我有一个执行 shell 脚本的 php 文件
$ip_access = $_GET['ip_access']; // 运行 knock 应用程序 exec("/home/knock.sh ".$ip_access);
但是当我访问它时,我在日志中收到以下错误“sh: /home/knock.sh: 权限被拒绝”我创建了一个新用户并将其添加到 apache httpd.conf 文件中,但仍然不起作用。任何关于如何设置权限或如何授予用户更多访问权限以使其正常工作的建议都将不胜感激。
答案1
如果您以适当的用户身份运行脚本,则可能需要为+x
文件添加执行权限。您可以使用以下命令执行此操作:
chmod +x /home/knock.sh
或者,您可以使用以下命令(无需添加执行权限):
exec("bash /home/knock.sh ".$ip_access);
答案2
检查您正在以何种模式运行 SELinux。
getenforce
如果您在强制模式下运行,则可以通过暂时禁用 SELinux 来解决 SELinux 问题:
setenforce 0
如果脚本运行,请重新启用 SELinuxsetenforce 1
并开始寻找您的配置与系统的 SELinux 安全策略的问题所在。
如果您在默认的强制模式下运行,则需要更改该文件的上下文,因为 Apachehttpd_script_exec_t
默认只能执行带有标签的文件。您需要运行:
semanage fcontext -a -t httpd_script_exec_t /home/knock.sh
fixfiles restore /home/knock.sh
之后,验证脚本的 SELinux 上下文:
ls -lZ /home/knock.sh
如果您在强制模式下运行但仍然不起作用,请检查您的审计日志/var/log/audit/audit.log
。