首次登錄時建構使用者 chroot
我正在使用 ldap 進行遠端使用者身份驗證,我基本上需要弄清楚如何:
一種。通過 nfs 從機器 a 對機器 b 上的使用者進行 chroot,(如果不安裝比我滿意的更多的目錄,這似乎是不可能的)
或者 - - - -
灣。將使用者添加到機器 a 上的 ldap db 後,在使用者登錄期間強制在機器 b 上執行腳本,該腳本將在使用者第一次登錄時自動 chroot 使用者。
我認為我的第二個選項可能是最好的選擇,並且正在考慮使用 pam_exec.so 來呼叫腳本。但是,我對這種方法有一些擔憂。首先,我不確定將要執行的腳本是否具有執行 chroot 所需的 root 權限。其次,我不確定 pam_exec 是否在登錄過程中發生得足夠早以成為一個有效的選擇。最後,我需要確保程式碼在 pam.d/ssh 和 pam.d/su 中都有效,以將其視為有效的解決方案。
我的擔憂是否有效,或者這似乎是一個很好的解決方案?或者有沒有更好的方法來解決這個問題。
首先,可以說,
chroot
可能不被視為安全功能。也有其他方向的意見。可以說,您需要實施的是一種可重現、可審核的方法,以限制使用者執行嚴格允許之外的操作的能力。
如果您在 LDAP 中註冊使用者,那麼您肯定已經部署了在連接到此 LDAP 的任何機器上執行 LDAP 身份驗證的機制,無論是通過
sssd
還是使用任何其他 PAM 模組,它與解決方案的其餘部分無關,並且假定已經到位(在我的情況下,我使用的是 freeIPA 和sssd
)。為了實現這個場景,我目前所做的如下(注意這種限制需要滿足幾個條件,否則很容易繞過限制):
- 使用者不屬於該
wheel
組,只有一個被授權使用su
(通過 PAM 強制執行)。通常,存在非 LDAP 使用者 (sysadm
) 以允許受信任的管理員在災難恢復或 LDAP 不可用的情況下執行操作。rbash
使用指向 private 的只讀 PATH 為使用者提供了適當保護~/bin
,該~/bin/
目錄包含指向所有允許命令的連結,例如:$ ll ~/bin total 0 lrwxrwxrwx. 1 root dawud 14 Sep 17 08:58 clear -> /usr/bin/clear* lrwxrwxrwx. 1 root dawud 7 Sep 17 08:58 df -> /bin/df* lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 egrep -> /bin/egrep* lrwxrwxrwx. 1 root dawud 8 Sep 17 08:58 env -> /bin/env* lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 fgrep -> /bin/fgrep* lrwxrwxrwx. 1 root dawud 9 Sep 17 08:58 grep -> /bin/grep* lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 rview -> /bin/rview* lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 rvim -> /usr/bin/rvim* lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 sudo -> /usr/bin/sudo* lrwxrwxrwx. 1 root dawud 17 Sep 17 08:58 sudoedit -> /usr/bin/sudoedit* lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 tail -> /usr/bin/tail* lrwxrwxrwx. 1 root dawud 11 Sep 17 08:58 wc -> /usr/bin/wc*
- 給使用者一個受限的只讀環境(想想像
LESSSECURE
,TMOUT
,HISTFILE
變數這樣的東西)。這是為了避免從orshell
之類的命令中轉義。less``vim
- 如果 MAC 限製到位(您使用的特定 GNU/Linux 發行版啟用了 SELinux),則使用者將映射到 SELinux 使用者
staff_u
,並根據需要通過sudo
. 具體sudorules
允許需要仔細審查以防止使用者規避這些限制,也可以部署在您現有的 LDAP 基礎設施中(這是 freeIPA 的功能之一)。- 使用者的
/home
,/tmp
並且可能/var/tmp
通過以下方式進行多實例化/etc/security/namespace.conf
:/tmp /tmp/.inst/tmp.inst-$USER- tmpdir:create root /var/tmp /tmp/.inst/var-tmp.inst-$USER- tmpdir:create root $HOME $HOME/$USER.inst/ tmpdir:create root
目錄的多實例化並不是一個新功能,它已經存在了很長時間。作為參考,請參閱2006 年的這篇文章。事實上,很多模組已經
pam_namespace
預設使用,但預設配置/etc/security/namespace.conf
並沒有啟用多實例化。此外,/etc/security/namespace.init
應該使所有骨架文件對使用者和root
.這樣,您可以選擇使用者是否可以代表自己執行任何命令(通過私有
~/bin
目錄中的連結,通過 提供/etc/skel
,如上所述),代表其他使用者(通過sudo
)或根本不執行。