Linux

首次登錄時建構使用者 chroot

  • June 19, 2014

我正在使用 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)或根本不執行。

引用自:https://serverfault.com/questions/589813