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

使用shell脚本无法正常运行mkdir

发布时间:2020-12-15 22:32:57 所属栏目:安全 来源:网络整理
导读:我创建了一个文件test.sh,如下所示: #!/bin/shmkdir /testDir 如果我在命令行上运行脚本,例如:sudo /path/to/test.sh,它会成功创建目录. 我在visudo中添加了这样的sudo权限: www-data ALL=NOPASSWD: /path/to/test.sh 我在.php文件中运行这样的脚本: she
我创建了一个文件test.sh,如下所示:

#!/bin/sh
mkdir /testDir

如果我在命令行上运行脚本,例如:sudo /path/to/test.sh,它会成功创建目录.

我在visudo中添加了这样的sudo权限:

www-data ALL=NOPASSWD: /path/to/test.sh

我在.php文件中运行这样的脚本:

shell_exec('sh /path/to/test.sh');

但是没有创建目录!

我究竟做错了什么?!

正确的用户sudo权限?

当我在php文件上运行shell_exec(‘whoami’)时,我得到:

www-data

正确的PHP脚本路径?

我通过添加一个echo语句来测试shell脚本,如:

#!/bin/sh
mkdir /testDir
echo "hello"

当我运行.php命令时:

echo shell_exec('sh /path/to/test.sh');

.php页面返回

???你好

我也试过test.sh:

output=$( mkdir /testDir )
echo "$output"

但没有任何回报

更新

如果我把它添加到visudo:

www-data ALL=(ALL) NOPASSWD: ALL

有用!!但当我这样做时:

www-data ALL=(ALL) NOPASSWD: /path/to/test.sh

它不……正如你所知道的那样.

通过将PHP更改为,我找到了一种很好的调试方法

echo shell_exec('sh /path/to/test.sh  2>&1 1> /dev/null');

并返回错误:

sudo: no tty present and no askpass program specified

所以我试过了:

>添加默认值:www-data!requiretty到visudo但没有运气!!!!
>在sudo命令中添加-t和-A …(即sudo -t …)
>在sudo命令之前添加导出SUDO_ASKPASS = /usr/lib / openssh / gnome-ssh-askpass,然后只会导致一个全新的错误世界.

我不知道这个requiretty,因为它似乎不在我的ubuntu系统的任何地方.在visudo中没有提到过一次?

我花了太长时间!

有人能告诉我,如果我这样做,我会遇到什么问题:

www-data ALL=(ALL) NOPASSWD: ALL

解决方法

如果

www-data ALL=(ALL) NOPASSWD: ALL

有效,但是

www-data ALL=(ALL) NOPASSWD: /path/to/test.sh

没有,那么显然执行的命令与/path/to/test.sh不匹配.
看看你的代码,你实际上没有调用/path/to/test.sh:

sh /path/to/test.sh

你在调用sh!使用/path/to/test.sh作为第一个参数,但仍然如此.
您需要直接调用脚本(如果可行):

shell_exec('/path/to/test.sh');

或者相应地更新你的sudoers文件(注意sh的完整路径):

www-data ALL=(ALL) NOPASSWD: /bin/sh /path/to/test.sh

(编辑:李大同)

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

    推荐文章
      热点阅读