我有一个应用程序,浏览器外壳,我正在执行这个命令来获取可执行文件列表(列出来自$PATH的所有二进制文件)
compgen -A function -abck | sort | uniq当我调用这个命令时,它返回可执行文件,但是我从SELinux中得到了很多错误,比如:
SELinux is preventing bash from getattr access on the file /usr/sbin/chronyd.
allow this access for now by executing:
# ausearch -c 'bash' --raw | audit2allow -M my-bash
# semodule -X 300 -i my-bash.pp有什么办法可以防止这个错误吗?我希望我的应用程序工作在SELinux以及没有任何错误的盒子。
我可以更改PATH或执行一些命令来检查PATH是否可以在path变量中,这可能是/usr/sbin不能在PATH中。这样的命令存在吗?默认情况下,我有这样的路径:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/games这是sudo ausearch -c 'bash' --raw的结果
type=AVC msg=audit(1506851274.781:2921): avc: denied { getattr } for pid=12298 comm="bash" path="/usr/sbin/xl2tpd" dev="sda1" ino=2239132 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:l2tpd_exec_t:s0 tclass=file permissive=1对于| audit2why:
type=AVC msg=audit(1506851274.781:2921): avc: denied { getattr } for pid=12298 comm="bash" path="/usr/sbin/xl2tpd" dev="sda1" ino=2239132 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:l2tpd_exec_t:s0 tclass=file permissive=1
Was caused by:
Missing type enforcement (TE) allow rule.
You can use audit2allow to generate a loadable module to allow this access.是否有可能使我的代码与audit2allow一起工作?
发布于 2017-10-01 11:58:41
SELinux附带的默认策略旨在允许对每个应用程序进行典型的系统访问。与您的常规登录shell不同,您的"web“运行在web服务器上下文(httpd_t)中,其中应用了对web服务器的限制。您的web服务器也在允许的域中运行,这意味着策略规则不是强制执行的,而是日志记录的,因此您实际上不会在应用程序中看到任何拒绝权限的错误。
摆脱消息的最简单方法是遵循使用audit2allow的建议,在此之后,您可以将httpd_t设置为强制模式。audit2allow创建了一个新规则,允许为其生成拒绝消息的特定访问: httpd_t上下文允许getattr使用l2tpd_exec_t上下文文件的规则。
如果您计划继续使用来自web服务器的shell,则当您执行默认策略不允许的其他操作时(在httpd_t上下文中),您可能会看到更多的httpd_t权限错误。
理想情况下,您应该创建一个自定义策略,该策略具有一个明确的转换路径,该路径可以运行shell的(更多的)许可域。这允许您在不授予web服务器过度许可访问的情况下运行无限制的shell。如果它有用,则完全取决于如何从web服务器(脚本等)启动shell的详细信息。
如果您决定将httpd_t保持在允许的模式下,并且不需要任何日志消息,则可以将web服务器配置为在无限制的上下文中运行。无论哪种方式,对于web服务器来说,这实际上都与禁用SElinux一样。
https://unix.stackexchange.com/questions/395437
复制相似问题