php - sudo 与 php 更改文件所有者

标签 php sudo

我正在运行一个 php 脚本,我希望在运行时能够将文件所有者从 www-data 更改为 Linux 用户,然后在进行一些内部维护后将其更改回来。

我正在运行以下命令

$cmd = "sudo chown  www-data ".$path;
shell_exec($cmd);

其中 $path 是完整路径

我已使用 sudo visudo 将以下内容添加到我的 sudoers 文件中

www-data ALL=NOPASSWD: /fullpath/to/phpfile.php

但是在检查我的错误日志时我仍然得到

^Msudo:: no tty present and no askpass program specified

各位,可能是什么问题? 谢谢

最佳答案

警告在 php 脚本中使用 sudo 是一个糟糕的主意,因为它具有巨大的安全隐患。

1。干净、安全的解决方案

i need to change the ownership of the file so that mp4box can write files to that directory

假设您的目录是/srv/directory。您需要创建一个组,其中包含 www-data 用户和任何将写入该目录的用户(假设只有一个用户:tony)。

groupadd mygroup
usermod -a -G mygroup www-data,tony

然后相应地更改目录所有权和权限。

chown -R /srv/directory www-data:mygroup
chmod -R /srv/directory 770

但这是配置/安装部分,此类命令不应在运行时运行,因为它可能需要 root 访问权限。它允许任何 php 脚本在计算机上执行任何操作。 应该在安装和配置脚本运行环境时运行

不是开发运营注意事项:

@my sysadmin:如果你读到这篇文章,请不要杀我。

您不应该关心运行时的用户权限,因为系统管理员的工作是确保系统安全并确保您的代码可以在其上运行。因为您不关心这一点,所以您的代码中不应该有任何 sudo 。 然而,地球上没有一个系统管理员会授予 www-data 用户 root 访问权限(也许有,但他们很快就会被解雇)。

更多开发操作说明:

如果您是一个善良的人,不想被同事和/或用户讨厌。你应该:

  • 记录对目录 X 或 Y 的写访问权限的需求。
  • 也许创建一个安装脚本,仅以 root 身份执行一次配置作业。
  • 或者创建一个 Docker 容器,或者一个预先配置为运行您的代码的虚拟机。

2。太棒了;我不关心安全解决方案

看看this unix stack exchange post

关于php - sudo 与 php 更改文件所有者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42268229/

相关文章:

linux - sudo用户可以读取启用了sudo访问的命令文件吗?

php - 如何运行需要root的perl脚本?

node.js - 如何在没有 sudo 的情况下修复 npm 抛出错误

php - 验证电子邮件时允许挪威语和特殊字母

php symfony Doctrine 或从 2 个表中获取数据

javascript - me/friends?fields=installed 未安装时返回一些已安装 = true

linux - 将输出重定向为不同的用户

windows - 如何在 Windows 上的 powershell 上执行 sudo

php - 查询绑定(bind)在 CodeIgniter 3 中不起作用

php - OSX 如何知道何时从/tmp 目录中删除文件?