ACLs negativas
Você pode impedir que um usuário acesse certas partes do sistema de arquivos definindo as listas de controle de acesso . Por exemplo, para garantir que o usuário abcd
não possa acessar nenhum arquivo em /home
:
setfacl -m user:abcd:0 /home
Essa abordagem é simples, mas você deve se lembrar de bloquear o acesso a tudo que não deseja que abcd
consiga acessar.
Chroot
Para obter um controle positivo sobre o que o abcd
pode ver, configure um chroot , ou seja, restrinja o usuário a um subárvore do sistema de arquivos.
Você precisa criar todos os arquivos de que o usuário precisa (por exemplo, mysql
e todas as suas dependências, se quiser que o usuário possa executar mysql
) sob o chroot. Digamos que o caminho para o chroot seja /home/restricted/abcd
; O programa mysql
precisa estar disponível em /home/restricted/abcd
. Um link simbólico apontando para fora do chroot não é bom porque a pesquisa de link simbólico é afetada pela cadeia chroot. No Linux, você pode fazer bom uso de montagens de bind:
mount --rbind /bin /home/restricted/abcd/bin
mount --rbind /dev /home/restricted/abcd/dev
mount --rbind /etc /home/restricted/abcd/dev
mount --rbind /lib /home/restricted/abcd/lib
mount --rbind /proc /home/restricted/abcd/proc
mount --rbind /sbin /home/restricted/abcd/sbin
mount --rbind /sys /home/restricted/abcd/sys
mount --rbind /usr /home/restricted/abcd/usr
Você também pode copiar arquivos (mas precisará cuidar para que eles estejam atualizados).
Para restringir o usuário ao chroot, adicione uma diretiva ChrootDirectory
ao /etc/sshd_config
.
Match User abcd
ChrootDirectory /home/restricted/abcd
Estrutura de segurança
Você também pode usar estruturas de segurança, como SELinux ou AppArmor. Em ambos os casos, você precisa escrever uma configuração bastante delicada, para ter certeza de que não está deixando nenhum buraco.