我正在尝试将计算机设置为在用户每次登录时(通过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本身更与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
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句