gpt4 book ai didi

php - 使用 shell 脚本通过 php 运行 mkdir 不工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:49:58 29 4
gpt4 key购买 nike

我创建了一个文件 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

所以我试过:

  • Defaults:www-data !requiretty 添加到 visudo 但没有成功!!!!

  • 添加 -t-A 到 sudo 命令...(即 sudo -t ...)

  • 在 sudo 命令之前添加 export 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

关于php - 使用 shell 脚本通过 php 运行 mkdir 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30065410/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com