Tudo o que o usuário faz requer acesso a grandes partes do sistema de arquivos. Para provar isso para você mesmo, execute o seguinte comando:
strace -e trace=file /bin/ls/$HOME
Você verá que listar o conteúdo de seu próprio diretório inicial requer a abertura e a leitura de pelo menos 40 outros arquivos espalhados pelo sistema. Outros comandos, como sftp e outros, requerem acesso muito mais amplo.
Os sistemas Unix são projetados com base no conceito de usuários com acesso somente leitura à maioria do sistema operacional. Com permissões e grupos cuidadosos, você pode facilmente proibi-los de ver o conteúdo dos diretórios uns dos outros. Com o pam_apparmor , você poderá restringir quais aplicativos eles podem executar.
EDITAR: Acabei de reler seus requisitos. Não parece que você precisa deles para fazer login em um shell totalmente interativo. Se este for o caso, existem duas maneiras de proceder:
-
%código%. Em seguida, defina shell do usuário para ser 'scponly'. Não deixe que o nome esteja cheio de você; Ele também funciona com o sftp. Se você quiser bloqueá-los ainda mais, consulte a documentação em
aptitude install scponly
sobre a configuração de um "chroot" por usuário. -
Se você precisar permitir o acesso a mais comandos do que apenas sftp / scp (como o rsync), precisará rolar seu próprio validador de comandos e configurar um "comando forçado" ssh. Adicione um bloco desse tipo ao seu
/usr/local/share/doc/scponly
:Match group sftponly ForceCommand /usr/local/bin/validate_sftp
Em seguida, escreva o script
/etc/ssh/sshd_config
. Algo semelhante a isto:#!/bin/bash if [[ $SSH_ORIGINAL_COMMAND = "rsync --server" ]] then exec $SSH_ORIGINAL_COMMAND elif [[ $SSH_ORIGINAL_COMMAND = "/usr/lib/openssh/sftp-server" ]] then exec $SSH_ORIGINAL_COMMAND else echo "You are only allowed rsync or sftp access to this server." fi
Adicione o (s) usuário (s) ao grupo "sftponly" (você terá que adicionar o grupo, é claro) e eles estarão restritos aos comandos permitidos pelo seu script.