【问题标题】:Sudo with php to change file ownerSudo 与 php 更改文件所有者
【发布时间】:2017-02-16 08:09:09
【问题描述】:

我正在运行一个 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

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

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

这可能是什么问题? 谢谢

【问题讨论】:

  • 当你输入 sudo 时,你需要提供 sudo 的密码以及你是如何提供密码的
  • 你绝对不应该那样做!任何可以以 root 身份运行的 PHP 脚本,即使是临时的,都会带来巨大的安全风险。如果你需要一个脚本来做一些家务,然后让它作为一个 cron 作业运行,那么你可以让脚本以你需要它运行的任何用户身份运行,而不会公开它。
  • 它在运行时不完全是内务管理,我需要更改文件的所有权,以便 mp4box 可以将文件写入该目录
  • 哪个用户运行 mp4box ?
  • mp4box 由 www-data 使用 shell_exec() 运行

标签: php sudo


【解决方案1】:

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

1。清洁安全的解决方案

我需要更改文件的所有权,以便 mp4box 可以将文件写入该目录

假设您的目录是 /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。 tldr;我不关心安全解决方案

看看this unix stack exchange post

【讨论】:

  • 问题是我试图更改权限的文件是在运行时由 php 创建的,所以我没有手动更改用户或组的选项,这就是为什么我试图通过脚本运行它
  • 如果它没有所需的权限,说明它不是由php创建的。但再次强调,这不是编程问题,而是管理员问题。
  • 文件的所有者/组是什么?如果那是 root,您需要配置生成该文件的守护程序以与另一个所有者/组一起写入。如果那是另一个非特权组,您只需将 www-data 添加到该组一次 (sudo usermod -a -G mygroup www-data),就完成了。
  • 它是由 php 创建的,当我把它 chown 给 root 用户 mp4box 写起来很舒服
  • 请告诉文件的所有者是什么,运行 MP4Box 的用户是什么,MP4Box 将其输出保存在哪里,最后该输出的所有者/组是什么。
猜你喜欢
  • 2012-12-05
  • 2013-11-13
  • 2016-04-05
  • 2011-01-14
  • 2014-08-11
  • 1970-01-01
  • 2013-11-08
  • 2021-08-30
相关资源
最近更新 更多