如何将www-data用户授权给我的主文件夹中的一个文件夹?

我有一个文件夹:/home/myuser/folderA 我想给www-data用户对上述文件夹的写入权限,同时让'myuser'继续拥有正常访问权限(因为这是myuser的家目录)。
我需要使用哪些命令?
注意:我不希望www-data能够访问/home/myuser/下的其他文件夹。
提前感谢。
2个回答

首先,将自己添加到组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用户将具有访问权限。

注意:这还取决于您的用户帐户和Web服务器的umask设置:您需要确保在folderA中创建的文件具有组rw访问权限(并且在其中创建的目录需要组rwx

如果您的Web服务器没有进入您的/home/myuser目录的权限(非常明智),那么它将无法进入,除非您采取其他措施。两种解决方案:

  1. sudo mount --bind /home/myuser/folderA /var/www/mysite/folderA(这是一个丑陋的技巧,在重启后需要重复操作。但是它是一个强大的技巧,也可以用来使文件夹在SSH监狱中可访问。)

  2. 简单地将共享文件夹移动到其他位置,例如/home/shared-stuff/folderA

第二个选项最好。假设folderA中的内容是公开的,你不在乎谁看到它,你可以这样设置:

sudo mkdir -m777 /home/shared-stuff

然后你可以在里面放置一个名为folderA的文件夹,具有上述权限,并且还可以放置一个名为folderB的文件夹,www-data用户不应该具有访问权限,而是具有不同的权限,例如。
$ 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

g+rwxs中的s代表什么? - T.Todua
“Group sticky”是一个术语。它的作用在以下段落中有详细解释:“首先…” :-) - artfulrobot
要使绑定持久化,您可以在/etc/fstab中添加以下内容: /home/myuser/folderA /var/www/mysite/folderA none bind - hanshenrik
永远不要使用这种方式。这是一个安全问题。 - undefined

另一种方法是直接在Apache配置中更改用户名,这适用于您的本地机器,并且您从其他地方保存图像,可能会破坏对文件夹进行的任何权限设置。如果您只有一个用户且不关心www-data,请执行此操作!
$ sudo vi /etc/apache2/apache2.conf

查找用户和组并填入您的信息
用户 <您的用户名>
组 <您的组名>

$ sudo service apache2 restart

这个解决方案似乎不太安全,有人知道这个设置会引发什么样的安全威胁吗? - luukvhoudt
1我非常确定它不安全,这就是为什么我只给出了本地机器的精确度。 - Shadoweb
此解决方案为您的文件夹提供了对Apache的完全访问权限... - Loenix
1我喜欢这个解决方案;只要你不使用root,这是你的私人/本地机器,并且你有合理的权限 - 尤其是在使用rsync/ftp进行部署且不使用脚本等改变权限的方法时非常有用。 - undefined
1使用nginx(而不是apache),您可以执行以下操作:$ sudo vi /etc/nginx/nginx.conf,将user www-data;更改为user your-username; - undefined