Restringir o acesso do usuário SSH ao diretório inicial usando Chrooted Jail
Existem vários motivos para restringir uma sessão de usuário SSH a um diretório específico, especialmente em servidores web, mas o mais óbvio é a segurança do sistema. Para bloquear usuários SSH em um determinado diretório, podemos usar o mecanismo chroot.
alterar root (chroot) em sistemas do tipo Unix, como Linux, é um meio de separar operações específicas do usuário do resto do sistema Linux; altera o diretório raiz aparente do processo do usuário atualmente em execução e seu processo filho (pai) por um novo diretório raiz chamado jail chrooted.
Neste tutorial, mostraremos como restringir o acesso do usuário SSH a um determinado diretório no Linux. Observe que executaremos todos os comandos como root, use o comando sudo se você estiver logado no servidor como usuário normal.
Etapa 1: Criar SSH Chroot Jail
1. Comece criando a prisão 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 o qual fazer chroot após a autenticação . O diretório deve conter os arquivos e diretórios necessários para suportar a sessão de um usuário.
Para uma sessão interativa, isso requer pelo menos um shell, geralmente sh
, e nós /dev
básicos, como dispositivos nulos, zero, stdin, stdout, stderr e tty:
ls -l /dev/{null,zero,stdin,stdout,stderr,random,tty}
3. Agora, crie os arquivos /dev
da seguinte maneira usando o comando mknod. No comando abaixo, o sinalizador -m
é usado para especificar os bits de permissão do arquivo, c
significa arquivo de caracteres e os dois números são números maiores e menores para os 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
4. Depois, defina a permissão apropriada na prisão chroot. Observe que o chroot jail e seus subdiretórios e subarquivos devem pertencer ao usuário root e não podem ser gravados por nenhum usuário ou grupo normal:
chown root:root /home/test
chmod 0755 /home/test
ls -ld /home/test
Etapa 2: configurar o shell interativo para SSH Chroot Jail
5. Primeiro, crie o diretório bin
e depois copie os arquivos /bin/bash
para o diretório bin
usando o comando cp da seguinte forma:
mkdir -p /home/test/bin
cp -v /bin/bash /home/test/bin/
6. Agora, identifique o bash necessário para libs
compartilhadas, conforme abaixo, e copie-os para o 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/
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 do chroot jail, /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/
Etapa 4: configurar o SSH para usar o Chroot Jail
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
Salve o arquivo, saia e reinicie os serviços SSHD:
systemctl restart sshd
OR
service sshd restart
Etapa 5: Testando SSH com Chroot Jail
10. Neste ponto, teste se a configuração do chroot jail está funcionando conforme o esperado:
ssh [email
-bash-4.1$ ls
-bash-4.1$ date
-bash-4.1$ uname
Na captura de tela acima, podemos ver que o usuário SSH está bloqueado na prisão chroot e não pode executar nenhum comando externo (ls, date, uname, etc).
O usuário só pode executar o bash e seus comandos integrados, como (pwd, histórico, echo, etc), conforme visto abaixo:
ssh [email
-bash-4.1$ pwd
-bash-4.1$ echo "Tecmint - Fastest Growing Linux Site"
-bash-4.1$ history
Etapa 6. Crie o diretório inicial do usuário SSH e adicione comandos do Linux
11. Na etapa anterior, podemos notar que o usuário está bloqueado no diretório raiz, podemos criar um diretório inicial para o usuário SSH assim (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
12. Em seguida, instale alguns comandos de 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/
13. Em seguida, verifique as bibliotecas compartilhadas para os comandos acima e mova-as para o diretório de bibliotecas jail com 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/
Etapa 7. Testando SFTP com Chroot Jail
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ê obterá o seguinte erro:
ssh [email
Tente usar SFTP da seguinte maneira:
sftp [email
Por enquanto é isso! Neste artigo, mostramos como restringir um usuário SSH em um determinado diretório (chrooted jail) no Linux. Use a seção de comentários abaixo para nos oferecer sua opinião sobre este guia.