我知道这个问题很常见,但我似乎找不到好的答案。
设置如下 - 有一个网络服务器和一个文件夹,Apache(用户 www-data)在其中创建目录并上传/删除文件。
网站管理员可能决定添加或删除一些文件。
大多数托管设置对 Apache 和网站管理员使用相同的用户。
我可以在文件夹内部通过设置chmod 770
和创建一个包含两个用户的组来执行此操作,但我无法对子文件夹执行此操作。
我也想避免使用umask
。
答案1
尝试一下这个:
进入代码根目录
cd /var/www/html/
并尝试对文件执行此操作:
sudo find -type f -exec chmod 664 {} \;
对于目录:
sudo find -type d -exec chmod 775 {} \;
对于业主,你可以尝试
sudo chown www-data:www-data -R /var/www/html
这将找到每个文件夹和文件并更改您想要的权限,谢谢!
答案2
我将对文件使用 664 (rw-rw-r--) 而不是 770 (rwxrwx---)(默认值为 (rw-r--r--)),因此每个人都可以读取文件并且不会设置执行位。
对于目录(默认为 rwxr-xr-x),您需要执行位才能进入目录并访问文件。
新setgid
创建的文件自动属于目录的组(而不是创建该文件的用户的默认组),因此同一组的其他用户可以修改它们。
如果您的目录是/var/www/html
并且具有写权限的组是www-data
,那么您所需要的就是:
使用 set 将目录更改为 2775 (rwxrwsr-x)
setgid
。find /var/www/html -type d -exec chmod 2775 {} +
仅
setgid
在目录上设置(如果其他权限已经正确)find /var/www/html -type d -exec chmod g+s {} +
将文件更改为 664 (rw-rw-r--)
find /var/www/html -type f -exec chmod -v 664 {} +
递归地将组更改为
www-data
chgrp -R www-data /var/www/html
或者递归地将用户和组更改为
www-data
chown -R www-data:www-data /var/www/html
-v
您可以向上述命令添加详细选项来查看发生了什么更改。
将用户添加
username
到组www-data
usermod -a -G www-data username