
Quero evitar que um usuário veja uma lista do diretório inicial (de outros usuários). Por padrão, um usuário não pode acessar o diretório inicial de outro usuário, mas pode encontrar o diretório inicial de outro usuário como abaixo:
[opc@instance-20210712-0826 home]$ cd /home
[opc@instance-20210712-0826 home]$ ls -lh
total 8.0K
drwx------. 10 opc opc 4.0K Nov 14 22:52 opc
drwx------. 2 otheruser otheruser 62 Nov 28 18:19 otheruser
drwx------. 3 yaskur yaskur 4.0K Nov 28 01:45 yaskur
De outra forma, um usuário pode ver uma lista de outros usuários (com base no diretório inicial). Eu quero evitar isso. É semelhante ao WHM/cPanel, se eu fizer login como usuário, não consigo ver o diretório inicial de outro usuário:
[myuser@sng128 ~]$ cd /home
[myuser@sng128 home]$ ls -l
total 4
drwx--x--x 25 myuser myuser 4096 Nov 28 08:27 myuser
Eu uso Oracle Linux, que é semelhante ao CentOS ou Rocky Linux.
Responder1
Permissões de arquivo restritivas não impedem que um usuário enumere outros usuários e seus diretórios iniciais. getent passwd
da glibc listará os usuários incluindo seus diretórios pessoais. A função subjacente getpwent()
também pode ser chamada por um programa.
Para impedir totalmente que qualquer usuário liste os diretórios iniciais de outros usuários, isole o usuário. Tipo, dê a eles seu próprio recipiente. Embora o "contêiner" possa ser implementado de várias maneiras: VM de hardware, VM de software (modo de usuário Linux), OpenVZ, chroot, contêineres podman ou os namespaces de isolamento de usuário e PID do Linux em geral.
Responder2
Tropecei nisso enquanto procurava uma solução para outra coisa ...
Minha opinião é que você pode simplesmente fazer:
chmod 711 /home
chmod 711 /home/*
e isso deve pelo menos impedir que outros usuários listem o diretório /home. Eles não são recursivos e apenas protegerão /home e /home/userX ou /home/userY de serem listados (ls) diretamente.
É claro que um usuário sem privilégios pode apenas cat /etc/passwd
visualizar todos os usuários no sistema; nesse caso, é tão bom quanto listar o diretório /home provavelmente...
Nesse caso, eu recomendo fortemente o Firejail, que foi construído exatamente para isso e é fácil de configurar.
No Ubuntu Server, você instalaria e configuraria assim (por exemplo, em um script firejail_install.sh):
#!/bin/bash
apt-get -y update
apt-get -y install firejail
if [ ! -f "/etc/firejail/disable-common.local" ]; then
cat > "/etc/firejail/disable-common.local" <<EOF
# Firejail blacklist
blacklist /etc/passwd
blacklist /etc/letsencrypt
blacklist /etc/mysql
blacklist /etc/nginx
blacklist /etc/php
blacklist /etc/postfix
blacklist /etc/varnish
blacklist /var/lib/mysql
blacklist /var/run/php
# END
EOF
fi
Apenas tome cuidado com o que você coloca na lista negra :)
Isso, combinado com as permissões corretas em /home, deve ser suficiente para proteger melhor o seu sistema de olhares indiscretos.
Responder3
Remover permissão de leitura global em /home
sudo chmod o-r /home
Esta é uma configuração incomum e pode quebrar algumas coisas inesperadamente. (por exemplo, navegadores de arquivos), mas não atrapalhará as tarefas comuns