Sudo用php来改变文件所有者

时间:2017-02-16 08:09:10

标签: 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

男人们可能会遇到什么问题? 感谢

1 个答案:

答案 0 :(得分:0)

警告在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脚本在计算机上执行任何操作。 这应该在您安装和配置环境时运行,您的脚本将继续运行。

not dev-ops note:

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

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

更多开发者注意:

如果你是一个善良的人,不想被他的同事和/或用户所憎恨。你应该:

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

2。 tldr;我不关心安全解决方案

看看this unix stack exchange post