我的设置如下:
Multiple users coding for the one website
Each user has their own username/group
Websites are located in /usr/local/ourcompany/websites/sitename/*
./websites/
归 拥有me:ourcompany
。我将此文件夹及其所有子文件夹设置为可由组写入。chmod g+ws websites
这解决了大部分权限问题。它允许ourcompany
组中的每个人编辑网站文件。问题是通过 PHP 上传文件时出现的。
PHP 以 身份运行www-data
。这似乎破坏了 setuid 组可写设置。
我正在运行 Nginx,如果相关的话......
有小费吗?
答案1
我会这样做:
1-保留您拥有的工作权限。
2- 通过 PHP 将文件上传到不同的(临时)目录。此临时目录应可由 www-data 用户写入。
3- 编写一个简单的脚本,将上传的文件从临时目录复制/移动到所需路径/usr/local/ourcompany/websites/sitename/*
。然后,您可以 chown/chmod 新文件,以确保在上传更多文件时保留权限。此脚本将以 root 身份执行,如下一点所述。
4-将 www-data 用户添加到 sudoers 文件。使用sudo visudo
编辑它。因此,www-data 用户将以超级用户身份执行 shell 脚本(在第 3 点中创建),无需密码。您需要在 sudoers 文件中命名脚本以将此权限限制为此单个 shell 脚本。
答案2
您的 PHP 上传脚本可能非常具体,例如 /upload/up_script.php
在这种情况下,我将在 nginx 的配置中创建一个特定位置,并使用由“ourcompany”(而不是 www-data)成员运行的 php5-cgi 进程执行这些查询。其余代码仍然可以(应该)由对网站文件没有写权限的用户执行。