Linux Ubuntu 上的 php shell_exec() 权限

ngo*_*o91 18 linux shell php exec

我正在使用 Linux 服务器开发一个 php 应用程序。我的问题是执行shell_exec()调用某些 exe 文件不起作用(实际上不是 exe,它是一种 linux 可执行文件)

echo shell_exec("whoami");
Run Code Online (Sandbox Code Playgroud)

我有守护进程

echo shell_exec("ls")
Run Code Online (Sandbox Code Playgroud)

我有一些文件名但是

echo shell_exec("php -v")
Run Code Online (Sandbox Code Playgroud)

我什么都没有,一个空白页

echo shell_exec("php ....bla bla bla")
Run Code Online (Sandbox Code Playgroud)

也是空白页。

如果我在终端(用户 hu)上输入,所有这些命令都将起作用。我已经在谷歌上搜索了几个小时,人们说这是因为许可。我没有在 Linux 上的经验。我必须做什么才能在 php 中执行我的程序?

小智 12

Apache 的用户www-data需要被授予权限才能使用sudo.

  1. 运行命令sudo visudo。实际上我们想编辑文件etc/sudoers。为此,通过sudo visudo在终端中使用,它重复(临时)sudoers文件进行编辑。
  2. 在文件的末尾,添加以下示例:-如果我们想在您的问题中使用命令进行restart吸烟和使用php命令进行其他操作,

www-data ALL=NOPASSWD: /etc/init.d/smokeping/restart, usr/bin/php

(这是假设您希望使用超级用户(root)权限运行restartphp命令。并且您phpusr/bin/路径中使用命令)

但是,如果您希望使用超级用户权限运行每个应用程序,则添加以下内容而不是上面的内容。您可能不想这样做,而不是ALL命令,非常危险。

www-data ALL=NOPASSWD: ALL
Run Code Online (Sandbox Code Playgroud)

3.编辑sudoers文件后(通过visudo我们编辑sudoersso保存并退出临时文件(visudo)的临时文件写入sudoers文件。(wq!

4.就是这样,现在在您的脚本中使用exec()shell_exec以下方式xxx.php记得sudo在php脚本中使用命令之前使用。

前任:-

exec ("sudo /etc/init.d/smokeping restart 2>&1");
Run Code Online (Sandbox Code Playgroud)

或者

shell_exec("sudo php -v"); 
Run Code Online (Sandbox Code Playgroud)

因此,在您的问题中,将您希望使用的命令添加到step no (2.)我添加并根据需要更改您的 php 脚本中。

这里和你的问题一样/sf/answers/1606733761/


小智 5

尝试指定 php 二进制文件的整个路径.. 例如, /usr/bin/php

如果您不知道,请使用以下方法找到它: which php