我想阻止用户查看(其他用户的)主目录列表。默认情况下,用户无法访问其他用户的主目录,但可以找到其他用户的主目录,如下所示:
[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
另一种方式是,用户可以看到其他用户的列表(基于主目录)。我想阻止它。它类似于 WHM/cPanel,如果我以用户身份登录,则无法看到其他用户的主目录:
[myuser@sng128 ~]$ cd /home
[myuser@sng128 home]$ ls -l
total 4
drwx--x--x 25 myuser myuser 4096 Nov 28 08:27 myuser
我使用与 CentOS 或 Rocky Linux 类似的 Oracle Linux。
答案1
限制文件权限不会阻止用户枚举其他用户及其主目录。getent passwd
来自 glibc 将列出用户及其主目录。底层getpwent()
函数也可以由程序调用。
为了完全阻止任何用户列出其他用户的主目录,请隔离该用户。例如,为他们提供自己的容器。尽管“容器”可以通过多种方式实现:硬件 VM、软件 VM(用户模式 Linux)、OpenVZ、chroot、podman 容器或 Linux 用户和 PID 隔离命名空间。
答案2
当我正在寻找其他解决方案时偶然发现了这一点......
我的看法是,您可以这样做:
chmod 711 /home
chmod 711 /home/*
这至少应该可以防止其他用户列出 /home 目录。这些不是递归的,只会保护 /home 和 /home/userX 或 /home/userY 不被直接列出 (ls)。
当然,非特权用户可以cat /etc/passwd
查看系统中的所有用户,在这种情况下,它可能与列出 /home 目录一样好......
在这种情况下,我强烈推荐 Firejail,它是为此目的而构建的,并且易于设置。
在 Ubuntu Server 上,您可以像这样安装和配置它(例如在 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
只要小心你列入黑名单的内容即可:)
这与 /home 上的正确权限相结合,应该足以更好地保护您的系统免受窥探。
答案3
删除 /home 上的全局读取权限
sudo chmod o-r /home
这是一个不寻常的设置,可能会意外破坏某些功能(例如文件浏览器),但不会妨碍常规任务