2017-06-03 176 views
1

我在CentOS上运行Apache服务器,需要从PHP页面运行一些bash脚本。运行不需要写入或执行PHP文件许可的命令(例如shell_exec('ls/var/www/html/scripts /')),但是我在运行需要写入或执行的命令时遇到问题允许。例如这个命令不执行任何操作:从PHP脚本运行bash脚本

<?php 
    $output = shell_exec('/var/www/html/scripts/test.sh'); 
    echo $output; 
?> 

我做了apache用户拥有者和授予必要的权限scripts目录:

drwxr-xr-x. 2 apache apache 21 Jun 3 09:54 scripts 

和test.sh文件可以看出,但没有锁。

-rwxr-xr-x. 1 apache apache 51 Jun 3 09:54 test.sh 

我也尝试在PHP文件中sudo命令,并将下面的行添加到Sudoers文件的末尾,但没有任何更改。

apache ALL=NOPASSWD: /var/www/html/scripts/test.sh 

而且我检查PHP safe_mode设置是关闭并没有在php.ini文件中没有限制:

disable_functions = 

你的帮助将高度赞赏。

注:

我编辑我的bash脚本,并添加须藤象下面这样:

#!/bin/bash 
echo "Hi from test.sh"; 
sudo touch /var/www/html/scripts/file.log; 

现在,当我运行使用此命令将文件作为apache用户,它成功运行:

su -s /bin/sh apache -c "/var/www/html/scripts/test.sh" 

但是通过php的网页,它只会运行echo“Hi from test.sh”;线。当我检查记录,有上面运行的命令如下行:

su: pam_unix(su:session): session opened for user apache by root(uid=0) 
sudo: apache : TTY=unknown ; PWD=/var/www/html ; USER=root ; COMMAND=/bin/touch fromweb.log 
su: pam_unix(su:session): session closed for user apache 

而且从PHP网页中运行时生成的日志:打开和关闭:

sudo: apache : TTY=unknown ; PWD=/var/www/html/scripts ; USER=root ; COMMAND=/bin/touch fromweb.log 

缺少了pam_unix(会话SU)。

+0

您会收到任何错误消息? – JazZ

+0

请注意,Apache的默认用户是'www-data'。 – JazZ

+0

@JazZ没有特别的错误消息,因为错误报告是关闭的,但是当我从命令提示符运行bash文件时,会发生以下错误: su -s/bin/sh apache -c“scripts/test.sh” Hi .sh touch:无法触及'file.log':权限被拒绝 –

回答

1

我发现问题所在。这是因为Linux SELinux功能。此功能应用最低权限策略并拒绝在Linux上运行任何不必要的命令。禁用此功能后,bash脚本已成​​功运行。为此,请编辑文件/ etc/selinux/config并将SELINUX = enforcing更改为SELINUX = disabled并重新启动系统。但是,不建议为安全原因。您可以查看下面的链接,仅创建一些例外情况,而不是完全禁用SELinux。

https://wiki.centos.org/HowTos/SELinux

+0

太棒了!感谢您发布您的解决方案。祝你好运。 – JazZ

+0

@JazZ感谢您的帮助 –

+0

欢迎抱歉,无法将您引导至此解决方案。 – JazZ