我的 Mac 工作站(OS X 10.7,预装了 apache 副本)上运行着 apache,我们的 Web 应用程序需要对文件系统的某些部分具有写访问权限才能运行(通常只是一个 tmp 目录,但有时不止于此)。
我们有(确实)数千个客户,我希望能够快速获取任何网站代码的副本,并使其“正常工作”,但是在将客户的网站从源代码控制中拉出后,我总是需要手动修改特定目录的 unix 权限(目录列表因客户而异,因为它多年来一直在变化)。
由于它是开发服务器,与一般互联网隔离,因此我想授予 apache/php 对整个 DocumentRoot 的写入权限。我该怎么做?
我尝试chmod 777
了 DocumentRoot,但如果我在其中创建一个目录,权限仍然是755
(所有者:me
,组:) wheel
。
我认为应该有一种方法可以强制在 DocumentRoot 内创建的所有文件为 777 或者 775,并将用户_www
添加到wheel
组中?
答案1
我可以通过使用支持继承权限的 ACL 来解决这个问题:
sudo chmod -R +a '_www allow read,write,delete,add_file,add_subdirectory,file_inherit,directory_inherit' /Library/WebServer/Documents
现在,每当我在中创建新目录或源代码控制签出时DocumentRoot
,_www
用户都拥有完全的读/写访问权限。
答案2
将 umask 设置为 000 或 002 将为您提供所需的 777 或 775 创建权限。问题是,您在任何地方创建的任何东西都会获得这些权限。如果您对 775 满意,那就去做吧。否则,您可以像这样创建 mkwebdir 命令:
mkwebdir()
{
umask 000;
mkdir "$1";
umask 022;
}
或者更好的是,如果你不介意在其中使用 sudo 命令:
mkwebdir()
{
mkdir "$1" && sudo chown _www "$1"
}
然后执行:mkwebdir 用户名
答案3
您可以尝试使用chown _www:wheel
docroot,然后chmod g+s
根据需要设置 umask。