我在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)。
您会收到任何错误消息? – JazZ
请注意,Apache的默认用户是'www-data'。 – JazZ
@JazZ没有特别的错误消息,因为错误报告是关闭的,但是当我从命令提示符运行bash文件时,会发生以下错误: su -s/bin/sh apache -c“scripts/test.sh” Hi .sh touch:无法触及'file.log':权限被拒绝 –