Em primeiro lugar, sem dúvida, chroot
pode não ser considerado um recurso de segurança . Existem opiniões na outra direção, também .
Indiscutivelmente, o que você precisa implementar é um método reprodutível e auditável de limitar a capacidade do usuário de executar ações diferentes das estritamente permitidas.
Se você registrar seus usuários no LDAP, certamente já implementou os mecanismos para executar a autenticação LDAP em qualquer máquina conectada a este LDAP, seja por meio de sssd
ou usando qualquer outro módulo PAM, não é relevante para o resto da solução, e é assumido como já está no lugar (no meu caso, estou usando o freeIPA e sssd
).
Para implementar esse cenário, o que eu faço atualmente é o seguinte (esteja ciente de que esse tipo de restrição requer que várias condições sejam atendidas, caso contrário, a restrição pode ser facilmente contornada):
- Os usuários não pertencem ao grupo
wheel
, o único autorizado a usarsu
(imposto pelo PAM). Geralmente, existe um usuário não LDAP (sysadm
) para permitir que administradores confiáveis executem ações em casos de recuperação de desastre ou indisponibilidade do LDAP. -
Os usuários recebem um
rbash
devidamente protegido com um PATH somente leitura apontando para um diretório privado~/bin
, esse diretório~/bin/
contém links para todos os comandos permitidos, por exemplo:$ ll ~/bin total 0 lrwxrwxrwx. 1 root dawud 14 Sep 17 08:58 clear -> /usr/bin/clear* lrwxrwxrwx. 1 root dawud 7 Sep 17 08:58 df -> /bin/df* lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 egrep -> /bin/egrep* lrwxrwxrwx. 1 root dawud 8 Sep 17 08:58 env -> /bin/env* lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 fgrep -> /bin/fgrep* lrwxrwxrwx. 1 root dawud 9 Sep 17 08:58 grep -> /bin/grep* lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 rview -> /bin/rview* lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 rvim -> /usr/bin/rvim* lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 sudo -> /usr/bin/sudo* lrwxrwxrwx. 1 root dawud 17 Sep 17 08:58 sudoedit -> /usr/bin/sudoedit* lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 tail -> /usr/bin/tail* lrwxrwxrwx. 1 root dawud 11 Sep 17 08:58 wc -> /usr/bin/wc*
-
os usuários recebem um ambiente restrito e somente leitura (pense em coisas como
LESSSECURE
,TMOUT
,HISTFILE
variables). Isso evita queshell
escape de comandos comoless
ouvim
. - se houver restrições MAC (a distribuição GNU / Linux específica que você está usando tem o SELinux ativado), os usuários serão mapeados para o usuário do SELinux
staff_u
e receberão direitos para executar comandos como outro usuário, conforme necessário, por meio desudo
. Osudorules
específico permitido precisa ser cuidadosamente revisado para evitar que o usuário contorne essas limitações e também pode ser implantado em sua infra-estrutura LDAP existente (esse é um dos recursos do freeIPA). -
os usuários '
/home
,/tmp
e possivelmente/var/tmp
são polyinstantiated via/etc/security/namespace.conf
:/tmp /tmp/.inst/tmp.inst-$USER- tmpdir:create root /var/tmp /tmp/.inst/var-tmp.inst-$USER- tmpdir:create root $HOME $HOME/$USER.inst/ tmpdir:create root
Polyinstantiation de diretórios não é um novo recurso, já está disponível há um bom tempo. Como referência, consulte este artigo de 2006 . De fato, muitos módulos já usam
pam_namespace
por padrão, mas a configuração padrão em/etc/security/namespace.conf
não habilita o polyinstantiation. Além disso,/etc/security/namespace.init
deve tornar todos os arquivos esqueletais somente leitura para os usuários e pertencentes aroot
.
Dessa forma, você pode escolher se os usuários podem executar qualquer comando em seu próprio nome (por meio de um link no diretório ~/bin
privado, provisionado via /etc/skel
, conforme explicado acima), em nome de outro usuário (via sudo
) ou nenhum.