我有一个文件夹:/home/myuser/folderA
我想授予 www-data 用户对上述内容的写权限,同时“myuser”继续拥有正常访问权限(因为它是 myuser 的主文件夹)。
我需要使用哪些命令?
注意:我不想www-data
访问中的任何其他文件夹/home/myuser/
。
提前致谢。
答案1
首先,将自己添加进群组www-data
usermod -a -G www-data (your username)
然后:
chgrp www-data /home/myuser/folderA
chmod g+rwxs /home/myuser/folderA
除非您的权限/home/myuser
不允许其他用户访问,否则应该可以解决问题。
第一个命令将文件夹的组所有权更改为 Web 服务器的所有权。第二个命令授予组成员www-data
读取、写入、进入目录的权限,并且组s
标志将确保在该目录中创建的任何文件都属于该组 - 因此,如果您以用户www-data
身份创建文件,则将具有访问权限。myuser
www-data
注意,这还取决于umask
您的用户帐户和 Web 服务器的设置:您需要确保在文件夹 A 中创建的文件具有组rw
访问权限(并且需要在组内创建的目录rwx
)
如果您的网络服务器没有进入您/home/myuser
目录的权限(非常合理),那么除非您执行其他操作,否则它将无法进入目录。两个解决方案:
sudo mount --bind /home/myuser/folderA /var/www/mysite/folderA
(这是一个丑陋的黑客行为,必须在重启后重复执行。但是这是一个强大的技巧,也可用于使文件夹在 SSH jail 内可访问。)只需将共享文件夹移动到其他位置,例如
/home/shared-stuff/folderA
。
第二个选项最好。假设文件夹 A 中的内容确实是公开的,并且您不关心谁可以看到它,您可以像这样进行设置
sudo mkdir -m777 /home/shared-stuff
然后,您可以在其中放入具有上述权限的文件夹 A,以及 www-data 不应以不同权限访问的文件夹 B,例如
$ cd /home/shared-stuff ; ls -l
drwxrwsr-x 2 myuser www-data 4096 Jan 17 21:46 folderA
drwxrwx--- 2 myuser myuser 4096 Jan 17 21:46 folderB
答案2
另一种方法是直接在 apache 配置中更改用户名,如果是你的本地机器并且您从其他地方保存图像,这会破坏对该文件夹的所有权限。如果您只有 1 个用户并且不关心 www 数据,也请这样做!
$ sudo vi /etc/apache2/apache2.conf
找到用户和组并输入你的
User <Your User>
Group <Your Group>
$ sudo service apache2 restart
答案3
对我来说,解决方案是 artfulrobot 答案的一部分。但它与 apache/var/www/html
文件夹有关。事实上,它应该已经属于 www-data 用户。
只需将您的用户添加到 www-data 组即可编辑,然后指定此主文件夹的组。例如
sudo usermod -a -G www-data $(whoami)
sudo chgrp www-data /var/www/html -R