特定文件夹的文件夹权限

特定文件夹的文件夹权限

我希望能够只允许用户对特定文件夹具有读/写权限,而不具有任何父文件夹的权限

例如

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

重要笔记

  1. 将文件的所有权(用户或组)设置/var/wwwwww-data用户。让 Web 服务器以用户身份运行的意义www-data在于,这是一个无特权帐户,无法修改任何文件。如果您将某些文件设置为此用户所有,则您正在否定该安全措施。如果您需要让您的 Web 服务器能够修改某些文件,只为这些特定文件设置所有权,并小心不要允许直接执行(例如通过 PHP)。一般来说,永远不要将其设置为www-data可以修改文件。

  2. 执行递归时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

如果这不安全或者不合理,请告诉我。

(注意:我只是想将此作为我之前评论的补充评论,但这样做会丢失代码行的格式)

相关内容