Restringindo um usuário SSH / SCP / SFTP a um diretório

36

Existe uma maneira simples de restringir um usuário SCP / SFTP a um diretório? Todos os métodos que encontrei exigem que eu instale uma prisão chroot copiando binários, mas não acho que isso seja necessário.

phunehehe
fonte

Respostas:

29

SSH Suporta chroot de um usuário SFTP nativamente. Você só precisa fornecer

ChrootDirectory

No seu arquivo de configuração sshd, e reinicie o sshd.

Se você está apenas executando sftp, não precisa fazer mais nada. Infelizmente, isso não funciona para o scp. Para shell interativo, você precisará copiar binários e nós / dev no chroot.

Um exemplo de configuração, para apenas um usuário, testuser:

Match User testuser
    ChrootDirectory /home/testuser
    ForceCommand internal-sftp

Algumas coisas a serem observadas, na página de manual do sshd_config:

    Todos os componentes do nome do caminho devem ser diretórios de propriedade raiz que não são
    gravável por qualquer outro usuário ou grupo. Após o chroot, o sshd (8) altera o
    diretório de trabalho para o diretório inicial do usuário.

Procure por ChrootDirectory no man sshd_config para obter mais informações.

Gabe.
fonte
2
Observe que a parte que começa com "Corresponder ao usuário do usuário de teste" deve estar no FIM do arquivo, pois incluirá linhas de configuração apenas se o usuário for "usuário de usuário" a partir desse ponto.
Magnus
11
Também é possível fazer chroot apenas para o protocolo SFTP, mas ainda permitir conexões SCP normais?
22413 lanoxx
11
Na minha máquina Ubuntu 14.04, também era necessário alterar a Subsystem sftp /usr/lib/openssh/sftp-serverlinha paraSubsystem sftp internal-sftp -f AUTH -l VERBOSE
partofthething
@ Magnus ou até outra Matchseção.
roaima
12

Um chroot é um método razoavelmente simples. Como o sistema operacional já possui esse recurso de segurança, os gravadores de daemon tendem a não tentar reimplementá-lo.

O Rssh vem com um guia sobre a criação de uma prisão chroot. Está no CHROOTarquivo na distribuição de origem. Em poucas palavras, você precisa ter:

  • Alguns binários, copiados a partir da raiz: /usr/bin/scp, /usr/libexec/openssh/sftp-server,/usr/bin/rssh_chroot_helper
  • As bibliotecas ( {/usr,}/lib/lib*.so.[0-9]) que eles usam também copiam
  • A /etc/passwd(possivelmente não uma cópia, mas derivada do mestre)
  • Alguns dispositivos: /dev/null, /dev/tty, e também um /dev/logsoquete para o registo (e você precisa dizer ao seu daemon syslog para ouvir em que socket)

Dica adicional que não está na documentação do rssh: Se você precisar que alguns arquivos estejam acessíveis em uma prisão chroot, poderá usar bindfs ou Linux mount --bindpara criar hierarquias de diretório adicionais de fora da prisão. bindfspermite que o diretório remontado tenha permissões mais restritivas, por exemplo, somente leitura. ( mount --binda menos que você aplique um patch do kernel; o Debian o incluiu desde o leste da lenny, mas a maioria das outras distribuições ainda não o fez em 2011.)

Gilles 'SO- parar de ser mau'
fonte
7

Você pode querer dar uma olhada no scponly (ou mais recentemente, rssh ); é essencialmente um shell de login que pode ser usado para iniciar o scp ou o subsistema sftpd. Na scponlycvariante, ele executa um chroot antes de ativar o subsistema em questão.

Shadur
fonte
scponly parece obsoleto, pelo menos no Ubuntu
tobixen