我将通过技术解决方案来完善rahmu和MV的答案。后面的所有内容仅对类似UNIX的系统有效。
滚动到chmod / chown部分,以获取使用ACL的示例-比UNIX文件模式更强大的工具。
查找您的Web服务器用户名
首先,您需要知道您的Web服务器运行所使用的用户名。如果您使用的是Apache,它可以是apache
或httpd
,www-data
等等。在大多数的Debian类系统中,Apache是www-data
。对于nginx,通常也是如此www-data
。
要查看它,请尝试:
ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1
确保此命令返回的用户名是一致的(例如,我99%的时间使用nginx,但是此命令返回的tomcat7
是我安装一次的Java Web服务器)。
授予Web服务器权限:使用chmod
和chown
使用chmod
666或777(解决不良文档/教程中此类问题的理想解决方案)可以神奇地使事情正常进行,但并不安全。授予666或777权限将授予“其他”访问权限。所以,不只是Apache的,也grandmother
和 nsa
(前提是您的计算机上存在这些用户帐户-但没有真的,请避免这样做,除非它只是用于测试/故障排除)。
最好是更加具体,并只授予您和Apache权限。更改文件组,以将对文件的完全控制权提供给Web服务器。为此,请递归更改所有者:
chown -R www-data:www-data your/folder/
但是最有可能的是,您可能只想通过更改组来保持对文件的完全访问权限:
chown -R yourusername:www-data your/folder/
然后,执行适当的操作chmod
以赋予该组www-data
与您相同的权限。例如,如果当前模式为640 (您的模式为6,www-data的模式为4,其他模式的0,转换为-rw-r -----),则将其设置为660 (您的模式为6,www-data的模式为6)。数据,其他则为0,转换为-rw-rw ----)。请参阅rahmu的答案以了解有关文件模式的更多信息,这是一个古老而优雅的机制。
为了避免使用操纵奥术数chmod
,您还可以使用以下语法:
chmod -R g+rw your/folder/
这意味着“向组(g
),递归()添加(+
)rw
对文件夹的读写权限your/folder/
(-R
)”。
在90%的情况下,这应该足够了。
我的首选方法:使用ACL(访问控制列表)
有时第一个解决方案是不够的。我将以Symfony框架为例,该框架记录和缓存大量数据。因此,它需要对相应文件夹的写权限。
当同时在CLI(使用我的用户帐户)和Web(Web服务器用户)中使用Symfony控制台时,chmod
/ chown
方法可能还不够。这会导致很多问题,因为Symfony会不断修改权限。
在这种情况下,我们将使用ACL(访问控制列表),这是在许多UNIX系统上管理权限的更高级的方法。
这里由官方的Symfony文档中给定(命令,请更改app/cache
和app/logs
您的需要):
在支持的系统上chmod +a
(即不支持Debian / Ubuntu)
sudo chmod +a "www-data allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
在不支持的系统上chmod +a
(最常见)
您将需要该setfacl
工具;也许默认情况下它已安装在您的系统上,所以请尝试setfacl -v
查看该命令是否可用。
如果命令不可用,并且您正在使用Ubuntu 14.04+,则只需安装该工具:
sudo apt install acl
否则,请遵循您的OS文档,因为您可能需要更改分区的挂载方式(此处为Ubuntu文档)。
我们到了:
sudo setfacl -R -m u:"www-data":rwX -m u:`whoami`:rwX app/cache app/logs
sudo setfacl -dR -m u:"www-data":rwX -m u:`whoami`:rwX app/cache app/logs
我从来没有过这种方法的任何问题,满意或您的钱。