我正在运行一个 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。太棒了;我不关心安全解决方案
关于php - sudo 与 php 更改文件所有者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42268229/