如何将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视为组-因此,如果您myuser以www-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

是什么s在g+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.