防止使用者看到其他使用者的主目錄列表

防止使用者看到其他使用者的主目錄列表

我想阻止使用者看到(其他使用者的)主目錄清單。預設情況下,使用者無法存取其他使用者的主目錄,但可以找到另一個使用者的主目錄,如下所示:

[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 passwdfrom 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

這是一個不尋常的設置,可能會意外地破壞一些東西。 (例如文件瀏覽器)但不會妨礙普通任務

相關內容