selinux 阻止執行 pam_exec 命令
我正在嘗試設置我的電腦以在每次使用者登錄時通知我(通過 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
。