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

36

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

    
por phunehehe 22.03.2011 / 01:25

3 respostas

30

SSH Suporta o chrooting de um usuário SFTP de forma nativa. Você só precisa fornecer

ChrootDirectory

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

Se você está apenas fazendo sftp, então você não precisa fazer mais nada. Infelizmente, isso não funciona para o scp. Para o 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 que você precisa saber, na página do manual sshd_config:

    All components of the pathname must be root-owned directories that are not
    writable by any other user or group.  After the chroot, sshd(8) changes the
    working directory to the user's home directory.

Pesquise o ChrootDirectory no man sshd_config para obter mais informações.

    
por 22.03.2011 / 03:04
11

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

Rssh vem com um guia sobre como configurar uma cadeia chroot. Está no arquivo CHROOT na distribuição de origem. Em suma, você precisa ter:

  • Alguns binários, copiados da raiz: /usr/bin/scp , /usr/libexec/openssh/sftp-server , /usr/bin/rssh_chroot_helper
  • As bibliotecas ( {/usr,}/lib/lib*.so.[0-9] ) que elas usam, da mesma forma, copiadas
  • A /etc/passwd (possivelmente não uma cópia, mas derivada do mestre)
  • Alguns dispositivos: /dev/null , /dev/tty e também um /dev/log de soquete para registro (e você precisa dizer ao seu syslog daemon para escutar nesse soquete)

Dica extra que não está na documentação do rssh: se você precisar que alguns arquivos sejam acessíveis em uma jaula chroot, use bindfs ou mount --bind do Linux para criar hierarquias de diretório adicionais fora da cadeia. bindfs permite que o diretório remontado tenha permissões mais restritivas, por exemplo, somente leitura. ( mount --bind não faz nada, a menos que você aplique uma correção de kernel; o Debian incluiu este patch desde a leste da lenny, mas a maioria das outras distribuições não tem a partir de 2011.)

    
por 22.03.2011 / 01:43
8

Você pode querer olhar para scponly (ou mais recentemente, rssh ); é essencialmente um shell de login que pode ser usado somente para iniciar o scp ou o subsistema sftpd. No scponlyc variant ele executa um chroot antes de ativar o subsistema em questão.

    
por 22.03.2011 / 08:50