如何将 www-data 用户授予我的主文件夹中的文件夹?

nLi*_*ked 36 permissions users directory home-directory

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

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

我需要使用哪些命令?

注意:我不想www-data访问/home/myuser/.

提前致谢。

art*_*bot 55

首先把自己加到群里 www-data

usermod -a -G www-data (your username)
Run Code Online (Sandbox Code Playgroud)

然后:

chgrp www-data /home/myuser/folderA
chmod g+rwxs /home/myuser/folderA
Run Code Online (Sandbox Code Playgroud)

除非您的权限/home/myuser不允许其他用户访问,否则应该这样做。

第一个命令将文件夹的组所有权更改为网络服务器的组所有权。第二个命令为www-data组成员提供读、写、进入目录的权限,组s标志将确保在该目录中创建的任何文件都www-data作为组 - 因此,如果您myuserwww-data用户身份创建文件,则将具有访问权限。

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

如果您的网络服务器没有进入您的/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
Run Code Online (Sandbox Code Playgroud)

然后,您可以将具有上述权限的文件夹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
Run Code Online (Sandbox Code Playgroud)


Sha*_*web 7

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

$ sudo vi /etc/apache2/apache2.conf
Run Code Online (Sandbox Code Playgroud)

找到用户和组并把你的
User <Your User>
Group <Your Group>

$ sudo service apache2 restart
Run Code Online (Sandbox Code Playgroud)