此类问题可能取决于您使用的操作系统以及其配置方式。某些Linux发行版(主要是基于RHEL的发行版,如CentOS或Fedora)在默认情况下带有SELinux。可以使用以下命令检查并临时更改它:
root@ls:~# /usr/sbin/getenforce
Enforcing
root@ls:~# /usr/sbin/setenforce Permissive
root@ls:~# /usr/sbin/getenforce
Permissive
您还可以通过以下方式对当前配置有更完整的了解:
root@ls:~# /usr/sbin/sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: permissive
Mode from config file: enforcing
Policy version: 21
Policy from config file: targeted
可以通过编辑/etc/selinux/config
文件并将此SELINUX
变量设置为permissive
或来使此更改永久生效disabled
。
但是,解决这种问题的正确方法(如果确实如此)是检查/var/log/audit/audit.log
日志文件。它将包含与SELinux规则有关的所有事件。然后,您可能应该为脚本提供正确的上下文,即被apache / php用户授权运行。使用以下方法检查SELinux安全上下文ls -Z
:
root@ls:~# ls -alZ /var/www/cgi-bin/
drwxr-xr-x root root system_u:object_r:httpd_sys_script_exec_t .
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t ..
此列表列出了每个文件/目录的用户,角色和类型。在这里,该httpd_sys_script_exec_t
类型使cgi目录中的文件具有由httpd执行的权限。您的shell脚本可能应该具有相同的类型。
您还可以将这些audit.log
行输入audit2allow
命令。它将输出使SELinux满意所需的更改。但是通常建议的更改需要在SELinux策略本身上完成,这不是您应做的事情(不过,此输出可以为正在发生的事情提供一些线索)。
以下页面描述了类似的问题以及解决此问题的不同方法:http : //sheltren.com/stop-disabling-selinux
x
在文件上设置了执行权限()?您是否在shebang行中指定了脚本解释器?