php - 无法在 php 的 system() 中更改用户

标签 php permissions sudo

我的命令是

echo root_password | sudo -u root -S executable_full_path arguments

我在浏览器中得到的错误信息是

[sudo] password for www-data: Sorry, try again.

在 phpinfo() 中,安全模式关闭并且没有禁用的功能。为什么这不起作用?相同的命令在 shell (bash) 中运行良好。 Escapeshellarg 和 escapeshellcmd 没有区别。

编辑:仅仅能够执行命令是不够的。被执行的程序在/tmp 中创建一个套接字,并需要为其分配权限。所以我认为我真的需要为此 Root ,这可能吗?

最佳答案

正如 Álvaro 所建议的,我将我的评论作为答案。 Matt,这将使以 root 身份运行该命令成为可能。

@Matt,不要那样做/etc/sudoers(顺便说一句,您使用visudo 命令编辑此文件,绝不能直接编辑)。这样一来,您的 Web 应用程序运行的任何 sudo whatever 命令都可以由 root 用户运行,如果攻击者在您的应用程序中发现漏洞,他可能会从中获得很多乐趣。

如果您只想以 root 身份运行一个命令而不需要密码,请将其放入 /etc/sudoers(记住 visudo 命令):

www-data ALL=(ALL) NOPASSWD: executable_full_path

那么您只允许以 root 身份执行此命令。现在你应该可以做到了

sudo -u root executable_full_path arguments

无需输入密码(它将以 root 身份运行)。此外,这是用户 www-data 可以使用 sudo 作为 root 用户执行的唯一命令,因此它应该不会有危险。

关于php - 无法在 php 的 system() 中更改用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5906717/

相关文章:

android - 我不在 list 文件中使用联系人权限。但我在应用程序信息屏幕上获得了联系许可

php chmod() 不改变权限

linux - CentOS 错误 - sudo : effective uid is not 0, 是 sudo 安装 setuid root 吗?

php - Microsoft 推送通知服务 403 - 禁止 : Access is denied

php - SSL 连接是否提供任何唯一的用户标识符?

php - Laravel - 导致 404 错误的事件

authentication - 用户 "system"无法列出集群中的所有服务

PHP 文本到图像使用 mysqli_fetch_row

azure - 在 Azure Devops SSH 任务中运行 `sudo` 命令的安全方法

linux - 使用 sudo 时找不到命令