php - 如何使用 PHP 在 LAMP 服务器上创建具有所有者权限的目录?
问题描述
我目前正在 Bitnami LAMP Stack 上运行 PHP 应用程序。我正在创建一个目录来存储文件。代码如下:-
$directory = "../data/folder";
if (!is_dir($directory)) {
$owner = "bitnami";
$group = "bitnami";
mkdir($directory, 0777, TRUE);
exec("sudo chown -R ".$owner.":".$group." ".$directory);
}
在服务器上创建目录时,所有者/组是 daemon/daemon。我希望创建目录时的所有者和组应该是 bitnami/bitnami。我尝试运行 sudo chown 命令,但它似乎不起作用。当我从 shell 运行相同的命令时,该命令使 bitnami 成为所有者。
请让我知道在 PHP 创建目录时是否可以让 bitnami 成为所有者。
解决方案
运行此代码时的当前用户是守护进程。
exec 尝试运行命令行 sudo 命令,作为很可能未设置或要求输入密码的守护进程。我首先要注意的是,php 有 chown ( http://php.net/manual/en/function.chown.php ),但是只有超级用户可以运行该命令,并且我假设实例不是 beeing由超级用户运行。
通过将用户添加到同一组以处理权限问题的历史,我看到了一些建议。另一种选择是设置 sudoers 文件 (/etc/sudoers) 以允许守护程序在没有密码的情况下运行 chown。我对如何更新它不是超级最新的,但来自https://unix.stackexchange.com/questions/18830/how-to-run-a-specific-program-as-root-without-a-password-prompt像这样的东西
daemon ALL = (root) NOPASSWD: /usr/bin/chown
应该可以工作,并让您的执行官在这种情况下应该成功。
推荐阅读
- reactjs - React 应用程序未在 Github 页面中正确部署
- java - Apache James 安装问题 - java.lang.UnsupportedClassVersionError:
- java - 我在字符串中使用了 /n 代码,并希望从顶行开始在新列中的下一个单词
- javascript - 为什么“拒绝访问”总是提醒
- python-3.x - 如何识别两张图片相同?
- sql - 如何在joomla的sql中获取会话ID
- javascript - 使用 express bodyparser 解析后,表单的类型“密码”返回未定义
- docker - 在 docker 上运行图像时出现这些错误
- hadoop - 创建配置单元表时出错:不匹配的输入“位置”需要 EOF
- html - 数据未在 VueJS 中正确显示