Pam

selinux 阻止執行 pam_exec 命令

  • November 12, 2019

我正在嘗試設置我的電腦以在每次使用者登錄時通知我(通過 ssh、通過 gdm 或 tty)。現在我正在設置 sshd 並將其添加到/etc/pam.d/sshd

session optional pam_exec.so /etc/pam_scripts/notify.sh

這是可選的,因為即使命令由於某種原因失敗,我仍然想通過 ssh 登錄。

第一:我按照這裡的建議將這一行放在之後 pam_selinux close之前pam_selinux open

如果我whoami在腳本中放置 a 並記錄執行, I can see that the command is run as根`,特別是:

uid=0(root) gid=0(root) groups=0(root) context=system_u:system_r:sshd_t:s0-s0:c0.c1023

問題是,從日誌中,我可以看到 selinux 阻止執行curl,這是在腳本中使用的:

AVC avc:  denied  { name_connect } for  pid=1810 comm="curl" dest=443 scontext=system_u:system_r:sshd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:http_port_t:s0 tclass=tcp_socket permissive=0

我的腳本有這個標籤:

unconfined_u:object_r:etc_t:s0

我嘗試使用更改上下文chcon,但我總是被拒絕權限(即使使用 root),所以我可能正在做一些我不完全理解的事情。

順便說一句,我也嘗試seteuid在 pam 規則中使用,但沒有任何改變。

一般來說,我不明白如何確定 selinux 授予執行訪問權限的腳本所需的上下文。

此外,這似乎與 curl 比腳本本身更相關,因為腳本執行正常,但由 selinux 停止的是 curl。

我該如何解決這個問題?

我看到您已經找到了答案,但是由於我正在研究此問題,因此我將其留在這里以供後代使用:


當您遇到這樣的 selinux 拒絕時,您可以使用該audit2allow工俱生成允許該操作的更新的 selinux 策略。首先,您可能希望將 selinux 置於許可模式:

setenforce 0

現在,登錄並確保您的 PAM 配置按預期工作。我們這樣做是因為很有可能在第一個拒絕之後可能會有額外的 selinux 拒絕,並且在許可模式下執行將確保它們都被記錄。

現在您可以將 selinux 重新設置為強制模式:

setenforce 1

執行audit2allow -a。這將生成如下內容:

#============= sshd_t ==============

#!!!! This avc can be allowed using one of the these booleans:
#     authlogin_yubikey, nis_enabled
allow sshd_t http_port_t:tcp_socket name_connect;

我說“類似”是因為 (a) 正如我之前所說,可能存在與您目前的 PAM 配置相關的其他拒絕,並且 (b) 此命令查看審核日誌中的所有條目,因此您可以獲得先前拒絕的結果’實際上與您目前的問題無關。

在這種情況下,我們看到我們可以通過設置現有的 selinux 布爾值來允許被拒絕的操作。這看起來像:

setsebool nis_enabled=1

這可能就是您所需要的。或者,您可以像這樣生成對 selinux 策略的更新:

audit2allow -a -M local

這將生成一個新的策略文件local.pp。您可以通過執行來啟動它:

semodule -i local.pp

這裡有一些關於使用 selinux 的好資訊,包括更詳細的使用概述audit2allow

引用自:https://unix.stackexchange.com/questions/551715