Coloque diretórios pessoais em um sistema de arquivos noexec
. Isso ajudará a impedir que o usuário execute binários armazenados lá, embora não seja uma garantia de 100%.
Coloque qualquer outro local gravável pelo usuário, como / tmp, também em sistemas de arquivos noexec.
Coloque qualquer coisa que você queira que os usuários possam executar, por exemplo / usr / local, de propriedade root e com as permissões apropriadas.
Observe que isso não impedirá que analisadores analisem e executem código armazenado no diretório pessoal do bob. Por exemplo, um script Perl pode ter seu bit de execução configurado e ser executado como ./myscript.pl
ou pode ser executado como perl ./myscript.pl
, caso em que somente será lido como entrada para o interpretador Perl.
Se você quiser garantias melhores do que isso, considere o aumento usando jail chroot, SELinux ou possivelmente até mesmo removendo completamente o acesso ao shell do bob. Se ele só pode usar sua conta como armazenamento de arquivos glorificado, ele realmente precisa de acesso ao shell? Pode, por exemplo, restringir usuários não confiáveis ao acesso sftp, SMB / CIFS / NFS ou WebDAV funcionar melhor no seu caso de uso?