我希望能够只允许用户对特定文件夹具有读/写权限,而不具有任何父文件夹的权限
例如
mywebsite
只能访问/var/www/html/mywebsite
并不是/var/www/html/otherwebsite
我努力了:
chown -R www-data /var/www/html
chown -R mywebsite:www-data /var/www/html/mywebsite
chmod -R 770 /var/www/html
我遇到的问题是,当我登录到时,mywesbite
我没有对 mywebsite 文件夹或任何其他文件夹的读写权限
我究竟做错了什么?
答案1
授予用户mywebsite
内部读/写权限/var/www/html/mywebsite
:
chown -R mywebsite /var/www/html/mywebsite
这应该足够了。您不必更改组所有者或权限,因为用户所有者应该已被授予读/写权限。
如果你想授予团体该文件夹内的读/写权限,例如组my-group
,您需要:
chgrp -R my-group /var/www/html/mywebsite
chmod -R g+w /var/www/html/mywebsite
重要笔记
不将文件的所有权(用户或组)设置
/var/www
为www-data
用户。让 Web 服务器以用户身份运行的意义www-data
在于,这是一个无特权帐户,无法修改任何文件。如果您将某些文件设置为此用户所有,则您正在否定该安全措施。如果您需要让您的 Web 服务器能够修改某些文件,只为这些特定文件设置所有权,并小心不要允许直接执行(例如通过 PHP)。一般来说,永远不要将其设置为www-data
可以修改文件。执行递归时
chmod
,使用字母比数字更好,例如chmod -R g+w something
而不是chmod -R 770 something
。这是因为前者能够仅修改您想要的权限,而保留其他权限。默认情况下,目录和文件将具有不同的“执行”权限 - 文件将关闭(例如 644)而目录将打开(例如 755),因为此权限对目录具有不同的含义。如果您这样做,chmod -R 770 something
则常规文件将打开执行权限。通常,只修改您需要的内容是个好主意。另一件需要注意的事情是,这
770
将删除全球可读权限,这将阻止 Web 服务器(以非特权用户身份运行)读取它。在这种情况下,它还会阻止用户mywebsite
查看/var/www/html/mywebsite
目录,因为您已将父目录设置/var/www/html
为 770。
答案2
我在 Ubuntu 16.04 上做了什么(也供我将来参考):
sudo groupadd web-content # creates a new group 'web-content'
sudo usermod -a -G web-content myuser # adds 'myuser' to the group
sudo usermod -a -G web-content www-data # adds 'www-data' to the group
sudo chown -R myuser:web-content /var/www/html # changes owner to 'myuser' and 'web-content' group
sudo find /var/www/html -type f -exec chmod 640 {} \; # applies rw for myuser and r permissions to all files
sudo find /var/www/html -type d -exec chmod 750 {} \; # applies rwx for myuser and rx permissions to all directories
sudo systemctl restart apache2.service # restarts the apache web service
如果这不安全或者不合理,请告诉我。
(注意:我只是想将此作为我之前评论的补充评论,但这样做会丢失代码行的格式)