Como configurar o Linux jaulas chroot
O termo jaula foi usado pela primeira vez em 1992, em um artigo escrito por um proeminente pesquisador de segurança, Bill Cheswick, (o que é interessante, se você curte esse tipo de coisa, você pode encontrar o artigo aqui). As cadeias Chroot começaram a aparecer em 2003, com aplicações como IRC e FTP. Em 2005, a Sun introduziu sua tecnologia de “contêineres” chamada zonas, que por sua vez foi um precursor do conceito de espaços de nomes, que é uma tecnologia de núcleo usada com contêineres.
chroot basics
Chroot permite que um administrador controle o acesso a um serviço ou sistema de arquivos enquanto controla a exposição ao ambiente servidor subjacente. Os dois exemplos comuns que você pode encontrar São durante a sequência de inicialização e a” linha de emergência ” nos sistemas Red Hat/CentOS/Fedora, e em FTP seguro (SFTP).
o comando parece-se com isto:
chroot <newroot> ]
semelhante ao comando sudo
, o comando chroot
altera o ambiente do seguinte comando. Em outras palavras, ele vai mudar você para o diretório newroot
, e também faz desse diretório o diretório “trabalho”. O command
então executa nesse local, o que é útil para coisas como resgatar um sistema que não inicializa.
ao contrário de sudo
, você estará ” no ” diretório. Esta prática, mais uma vez, é útil se você está iniciando a partir de mídia externa, mas precisa acessar um sistema de arquivos “local” ou comando para fazer o trabalho.
o outro uso comum de chroot
é restringir um serviço ou usuário usando um wrapper para esconder o resto do sistema de arquivos, portanto restringindo a visão de um usuário remoto dos dados de outros usuários. Uma implementação popular usando esta abordagem SFTP.
exemplo
Antes de começar a trabalhar neste exemplo, deve certificar-se de que tem cópias de segurança. Neste caso, faça backup do arquivo /etc/ssh/sshd_config
porque você vai estar fazendo alterações a esse especificamente:
# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
por agora, você só vai restringir os usuários SFTP para suas diretorias home no servidor. Este requisito significa que você vai precisar adicionar usuários e colocá-los em um grupo:
# useradd -g sftpusers -s /sbin/nologin -p nick nick
lembre-se que ao fazer isto irá atribuir nick
uma conta sem consola de autenticação. Esta técnica é prática e uma boa prática de segurança: se ele está apenas usando SFTP, ele não deve ter privilégios de login. Discutirei a possibilidade de fornecer uma shell a usuários remotos no próximo artigo.
Agora, você precisa dizer ao serviço ssh
o que fazer quando os usuários do SFTP fazem login. Abrir o ficheiro /etc/ssh/sshd_config
e adicionar o seguinte no final:
Subsystem sftp internal-sftpMatch Group sftpusersForceCommand internal-sftpChrootDirectory /homeX11Forwarding noAllowTcpForwarding no
é importante que adicione estas definições como um conjunto separado de itens, e que use a sintaxe Match
para indicar que esta secção só se aplica aos utilizadores deste grupo. Se você fez as alterações aos itens existentes, eles se aplicariam a todos os usuários do SSH, o que poderia quebrar o acesso remoto.
as linhas de configuração decompõem-se da seguinte forma::
- o
ForceCommand
fazssh
escolher a sua instalação incorporada para fornecer serviço SFTP (que você pode controlar de forma independente). -
ChrootDirectory
dizsshd
onde restringir o usuário. -
Subsystem sftp internal-sftp
diz asshd
para carregar o serviço internosftp
e torná-lo disponível.
poderá ter de se certificar de que este Subsystem
não é já definido comentando esta linha mais cedo no ficheiro de configuração:
# override default of no subsystems# Subsystem sftp /usr/libexec/openssh/sftp-server
depois de ter feito as alterações e verificado a ortografia, vá em frente e salve as alterações. Então, reinicie sshd
:
# systemctl restart sshd
testar o novo utilizador:
$ sftp nick@showmenick@showme's password:Connected to [email protected]> lsaccounting ansible fred jason kenny lisa nicksftp> pwdRemote working directory: /sftp> exit
Oops, espere apenas um minuto: parece que você pode ver todos os diretórios dos outros usuários também. No entanto, você não pode navegar para esses diretórios:
sftp> cd fredsftp> lsremote readdir("/fred"): Permission denied
Você pode direcionar o chroot de usuário para seu próprio diretório alterando o ChrootDirectory
linha sshd_config
arquivo como este:
ChrootDirectory /
Esta rápida mudança faz com que ele olhe para o Nick que ele está em seu próprio diretório, e ele não vai ser capaz de ver todos os outros arquivos do usuário:
sftp> pwdRemote working directory: /home/nicksftp>sftp> exit$ touch test.txt$ sftp nick@showmenick@showme's password:Connected to [email protected]> put test.txtUploading test.txt to /home/nick/test.txttest.txt 100% 0 0.0KB/s 00:00sftp> lstest.txtsftp>
para Onde foi? Olha para isto.:
# ls /home/nicktest.txt
Note que a chroot jail
não é considerada por si só uma restrição de segurança adequada. Embora impeça um usuário de mudar de um diretório Restrito, existem maneiras em torno disso (a idéia geral é referida na página de homem chroot(2)
, que você deve dar uma olhada Se você está considerando usar este truque em um contexto crítico de produção ou de negócios.)
embrulhar(por agora)
assim, você pode ver que chroot
pode ser uma ferramenta bastante útil. Na parte 2, vou olhar mais para a atribuição de diretórios específicos para os usuários, e fornecer um ambiente de shell para um usuário remoto sem expor o resto do servidor.
novo em recipientes? Descarregue o iniciador de Containers e aprenda o básico de containers Linux.