防止用户查看其他用户主目录列表

防止用户查看其他用户主目录列表

我想阻止用户查看(其他用户的)主目录列表。默认情况下,用户无法访问其他用户的主目录,但可以找到其他用户的主目录,如下所示:

[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

这是一个不寻常的设置,可能会意外破坏某些功能(例如文件浏览器),但不会妨碍常规任务

相关内容