Impedir que o usuário veja a lista do diretório inicial de outro usuário

Impedir que o usuário veja a lista do diretório inicial de outro usuário

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 passwdda 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/passwdvisualizar 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

informação relacionada