Como Restringir o Acesso de Usuários SSH a Determinados Diretórios Usando Prisão Chroot

Existem várias razões para restringir uma sessão de usuário SSH a um diretório específico, especialmente em servidores web, mas a mais óbvia é a segurança do sistema. Para bloquear usuários SSH em um determinado diretório, podemos usar o mecanismo chroot.

O chroot (chroot) em sistemas semelhantes ao Unix, como o Linux, é um meio de separar operações de usuário específicas do restante do sistema Linux; altera o diretório raiz aparente para o processo de usuário em execução atualmente e seu processo filho (pai) com um novo diretório raiz chamado de jaula chroot.

Neste tutorial, mostraremos como restringir o acesso de usuários SSH a um diretório específico no Linux. Observe que executaremos todos os comandos como root, use o comando sudo se estiver logado no servidor como um usuário normal.

1. Comece criando o chroot jail usando o comando mkdir abaixo:

1. Comece criando a cela chroot usando o comando mkdir abaixo:

# mkdir -p /home/test

2. Em seguida, identifique os arquivos necessários, de acordo com a página de manual sshd_config, a opção ChrootDirectory especifica o nome do caminho do diretório para chroot após a autenticação. O diretório deve conter os arquivos e diretórios necessários para dar suporte a uma sessão do usuário.

Para uma sessão interativa, isso requer pelo menos um shell, comumente sh, e nós básicos /dev como null, zero, stdin, stdout, stderr e dispositivos tty:

# ls -l /dev/{null,zero,stdin,stdout,stderr,random,tty}
Listing Required Files

3. Agora, crie os arquivos /dev da seguinte maneira usando o comando mknod. No comando abaixo, a bandeira -m é usada para especificar os bits de permissão do arquivo, c significa arquivo de caracteres e os dois números são os números principais e secundários aos quais os arquivos apontam.

# mkdir -p /home/test/dev/		
# cd /home/test/dev/
# mknod -m 666 null c 1 3
# mknod -m 666 tty c 5 0
# mknod -m 666 zero c 1 5
# mknod -m 666 random c 1 8
Create /dev and Required Files

4. Depois disso, defina a permissão apropriada na cela chroot. Observe que a cela chroot e seus subdiretórios e subarquivos devem ser de propriedade do usuário root e não devem ser graváveis por nenhum usuário normal ou grupo:

# chown root:root /home/test
# chmod 0755 /home/test
# ls -ld /home/test
Set Permissions on Directory

Passo 2: Configurar Shell Interativa para Cela Chroot SSH

5. Primeiro, crie o diretório bin e, em seguida, copie os arquivos /bin/bash no diretório bin usando o comando cp da seguinte forma:

# mkdir -p /home/test/bin
# cp -v /bin/bash /home/test/bin/
Copy Files to bin Directory

6. Agora, identifique o bash necessário para libs compartilhadas, conforme abaixo, e copie-os no diretório lib:

# ldd /bin/bash
# mkdir -p /home/test/lib64
# cp -v /lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} /home/test/lib64/
Copy Shared Library Files

Etapa 3: Criar e Configurar Usuário SSH

7. Agora, crie o usuário SSH com o comando useradd e defina uma senha segura para o usuário:

# useradd tecmint
# passwd tecmint

8. Crie o diretório de configurações gerais da prisão chroot, /home/test/etc e copie os arquivos de conta atualizados (/etc/passwd e /etc/group) neste diretório da seguinte maneira:

# mkdir /home/test/etc
# cp -vf /etc/{passwd,group} /home/test/etc/
Copy Password Files
Note: Each time you add more SSH users to the system, you will need to copy the updated account files into the /home/test/etc directory.

Etapa 4: Configurar o SSH para usar a Prisão Chroot

9. Agora, abra o arquivo sshd_config.

# vi /etc/ssh/sshd_config

e adicione/modifique as linhas abaixo no arquivo.

#define username to apply chroot jail to
Match User tecmint
#specify chroot jail
ChrootDirectory /home/test
Configure SSH Chroot Jail

Salve o arquivo e saia, e reinicie os serviços SSHD:

# systemctl restart sshd
OR
# service sshd restart

Etapa 5: Testando o SSH com a Prisão Chroot

10. Neste ponto, teste se a configuração da jaula chroot está funcionando conforme o esperado:

# ssh [email protected]
-bash-4.1$ ls
-bash-4.1$ date
-bash-4.1$ uname
Testing SSH User Chroot Jail

A partir da captura de tela acima, podemos ver que o usuário SSH está preso na jaula chroot e não pode executar nenhum comando externo (ls, date, uname, etc).

O usuário só pode executar o bash e seus comandos internos, como (pwd, history, echo, etc), conforme visto abaixo:

# ssh [email protected]
-bash-4.1$ pwd
-bash-4.1$ echo "Tecmint - Fastest Growing Linux Site"
-bash-4.1$ history
SSH Built-in Commands

Passo 6. Crie o diretório pessoal do usuário SSH e adicione comandos Linux

11. A partir do passo anterior, podemos perceber que o usuário está preso no diretório raiz, podemos criar um diretório pessoal para o usuário SSH da seguinte maneira (faça isso para todos os usuários futuros):

# mkdir -p /home/test/home/tecmint
# chown -R tecmint:tecmint /home/test/home/tecmint
# chmod -R 0700 /home/test/home/tecmint
Create SSH User Home Directory

12. Em seguida, instale alguns comandos do usuário, como ls, date e mkdir no diretório bin:

# cp -v /bin/ls /home/test/bin/
# cp -v /bin/date /home/test/bin/
# cp -v /bin/mkdir /home/test/bin/
Add Commands to SSH User

13. Em seguida, verifique as bibliotecas compartilhadas para os comandos acima e mova-as para o diretório de bibliotecas do cárcere chroot:

# ldd /bin/ls
# cp -v /lib64/{libselinux.so.1,libcap.so.2,libacl.so.1,libc.so.6,libpcre.so.1,libdl.so.2,ld-linux-x86-64.so.2,libattr.so.1,libpthread.so.0} /home/test/lib64/
Copy Shared Libraries

Passo 7. Teste do SFTP com Cárcere Chroot

14. Faça um teste final usando sftp; verifique se os comandos que você acabou de instalar estão funcionando.

Adicione a linha abaixo no arquivo /etc/ssh/sshd_config:

#Enable sftp to chrooted jail 
ForceCommand internal-sftp

Salve o arquivo e saia. Em seguida, reinicie os serviços SSHD:

# systemctl restart sshd
OR
# service sshd restart

15. Agora, teste usando SSH e você receberá o seguinte erro:

# ssh [email protected]
Test SSH Chroot Jail

Tente usar o SFTP da seguinte forma:

# sftp [email protected]
Testing sFTP SSH User

É isso por agora! Neste artigo, mostramos como restringir um usuário SSH em um diretório específico (cárcere chroot) no Linux. Use a seção de comentários abaixo para nos oferecer seus pensamentos sobre este guia.

Source:
https://www.tecmint.com/restrict-ssh-user-to-directory-using-chrooted-jail/