加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

允许PHP以root权限运行特定的bash脚本

发布时间:2020-12-13 13:47:05 所属栏目:PHP教程 来源:网络整理
导读:我有一个php脚本调用这样的bash脚本: ?php $result = exec('sudo /bin/bash /var/www/my_bash_script.sh /var/www/vhosts/testsite/htdocs/'); var_dump($result);? 这是my_bash_script.sh的内容: #!/bin/bashsvn export --force --no-auth-cache --userna
我有一个php脚本调用这样的bash脚本:
<?php
    $result = exec('sudo /bin/bash /var/www/my_bash_script.sh /var/www/vhosts/testsite/htdocs/');
    var_dump($result);
?>

这是my_bash_script.sh的内容:

#!/bin/bash
svn export --force --no-auth-cache --username myusername --password mypassword http://1.2.3.4/repos/path/to/repo/ $1 2>&1
find $1 -print0 -type d | xargs -0 -n 1 -0 chown -R -v root:root 2>&1
find $1'storage' -print0 -type d | xargs -0 -n 1 chown -R -v apache 2>&1
find $1'shared' -print0 -type d | xargs -0 -n 1 chown -R -v apache 2>&1

该脚本的目的是从我的svn repo导出并正确设置用户权限.

PHP作为apache用户运行.

为了授予PHP运行此脚本的权限,我在sudoers中添加了以下行:

apache ALL=(ALL) NOPASSWD:ALL

现在显然这给了PHP太多的功能,所以我想限制PHP只运行这个特定的bash脚本,但我似乎无法正确使用语法:

apache ALL=(ALL) NOPASSWD:/var/www/my_bash_script.sh

上面只返回一个空字符串(到$result PHP变量) – 我做错了什么?

谢谢!

编辑: – 我已经在sudoers中注释掉了#Defaults requiretty.

我可能错了,但我相信sudoers也限制了可以传递给命令/脚本的参数,而不仅仅是命令本身.

如果您尝试在没有参数的情况下运行.sh,它可能会起作用,例如

sudo /bin/bash /var/www/my_bash_script.sh

因此,要告诉sudoers允许使用任何参数(通过apache)运行该脚本,您需要像这样调整行:

apache ALL=(ALL) NOPASSWD:/var/www/my_bash_script.sh *

通配符将允许apache使用任何参数运行该脚本.

您可能还需要/ bin / bash,但我不确定

apache ALL=(ALL) NOPASSWD: /bin/bash /var/www/my_bash_script.sh *

如果有人能够证实或反驳我对此的理解,我将不胜感激

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读