PHP使用root权限调用shell

PHP调用shell时,有些时候会遇到权限问题,通过查看Apache日志可以发现如下的内容

rm: instrumentscli0.trace/form.template: Permission denied

原因是shell在执行这些语句时可能需要root权限,可以在脚本中的具体语句加上sudo ,比如 sudo rm xxx;当然最好是不要修改shell脚本,而是在php调用shell时,加上sudo ./xxx.sh


加上sudo后再次执行,发现第二个问题

sudo: no tty present and no askpass program specified

原因是执行sudo时需要一个终端来输入密码,解决方法是赋予Apache的执行用户root权限。

方法:修改visudo文件

命令如下

sudo visudo

在visudo文件中为Apache的执行用户分配权限,新增下面这一行

_www   ALL=(ALL) NOPASSWD: ALL

赋予_www用户所有权限,并且不需要输入密码,这其中,第一项是Apache执行用户的名称,不同的版本可能不一样,有的是nobody,有的是daemon, 有的是_www

可以通过查看Apache目录下的httpd.conf获悉具体用户,该文件有如下一段配置项

# If you wish httpd to run as a different user or group, you must run

# httpd as root initially and it will switch.  

#

# User/Group: The name (or #number) of the user/group to run httpd as.

# It is usually good practice to create a dedicated user and group for

# running httpd, as with most system services.

#

User _www

Group _www

这里就是执行用户,出于安全考虑,最好把默认的用户名修改为自定义的用户,当然也可以不修改。

你可能感兴趣的:(apache,PHP,shell,Permission,denied)