上下文:我正在制作一个浏览器内控制面板,它使我可以一键访问我编写的脚本库(.sh 和 .php),以处理项目的各种数据。这是管理该项目数据的“一站式服务”。
我已经取得了很好的进步。我运行着 apache、PHP 和 MySQL,我的前端位于http://localhost。目前很好!
现在我遇到的问题是:我有一个工作正常的index.php,除了默认的apache用户(在我的机器上称为“_www”)似乎没有运行我的某些脚本的权限。
所以当我这样做时:
<?php
echo `ls`;
echo `whoami`;
echo `/Path/To/Custom/Script.sh`;
?>
ls
我得到了和的输出whoami
,但我从自定义脚本中没有得到任何结果。如果我像我一样运行自定义脚本(在交互式 shell 中),它当然可以工作。
最后我的问题是:什么是正确的的方式来配置这个。网络服务器是否像我一样运行?或者更改权限以便 _www 可以运行我的自定义脚本?
答案1
最好的办法是将脚本放在一个标准位置(例如/usr/local/bin
),Web 服务器将有足够的权限来执行它。
如果这不是一个选项,您可以使用 更改脚本的组chgrp groupname path
,然后使其对于该组可执行chmod g+x path
。如果_www
用户尚未位于该组中,请通过 将其添加到该组中usermod -aG groupname _www
。
答案2
要回答您的问题,最好授予 _www 组执行脚本的权限。
使用 ACL 扩展 *.sh 脚本的权限,以允许 _www 组中的用户执行权限:
cd /Path/To/Custom
setfacl -m g:_www:rx *.sh
还要检查 /Path/To/Custom 的每个目录组件并验证 apache 是否有权访问(即“查看”)/Path/To/Custom 中的脚本:
ls -ld /Path
ls -ld /Path/To
ls -ld /Path/To/Custom
除了最后一个组件(风俗)其中 apache 需要执行和读取权限。例如,如果上面的所有目录组件都有其他的权限接收那么 apache 就拥有在以下目录中查找您的脚本所需的所有访问权限风俗目录。