如何将www-data用户分配到主文件夹中的文件夹?


31

我有一个文件夹: /home/myuser/folderA

我想授予www-data用户对上述内容的写权限,而'myuser'继续具有正常访问权限(因为无论如何它都是myuser的主文件夹)。

我需要使用哪些命令?

注意:我不想www-data访问中的任何其他文件夹/home/myuser/

提前致谢。

Answers:


46

首先,将自己加入群组 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视为组-因此,如果您myuserwww-data用户身份创建文件,则将具有访问权限。

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

如果您的Web服务器没有对/home/myuser目录的输入权限(非常明智),那么除非您执行其他操作,否则它不会进入目录。两个解决方案:

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

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

第二个选项是最好的。假设folderA中的内容确实是公开的,并且您不在乎谁看到它,可以将其设置为

sudo mkdir -m777 /home/shared-stuff

然后,您可以在其中放入具有上述权限的folderA和www-data不应具有不同权限访问的folderB,例如

$ 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

是什么sg+rwxs
T.Todua

“组粘性”位。在以“第一个...”开头的段落中解释了这种效果:-)
artfulrobot

6

另一种方法是直接在apache config中更改用户名,这是如果它是您的本地计算机,并且您从其他位置保存了图像,这将破坏对文件夹所做的任何权限。如果您只有1个用户并且不关心www-data,也可以这样做!

$ sudo vi /etc/apache2/apache2.conf

查找用户和组并放入您的
User <Your User>
Group <Your Group>

$ sudo service apache2 restart

该解决方案似乎并不安全,任何人都知道此设置将导致什么样的安全威胁?
Fleuv

我非常确定这是不安全的,这就是为什么我只给出Local Machine的精度。
Shadowbob

此解决方案提供对您文件夹的apache的所有访问权限
Loenix
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.