
我想阻止使用者看到(其他使用者的)主目錄清單。預設情況下,使用者無法存取其他使用者的主目錄,但可以找到另一個使用者的主目錄,如下所示:
[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
from 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
這是一個不尋常的設置,可能會意外地破壞一些東西。 (例如文件瀏覽器)但不會妨礙普通任務