创建 www-data 和 myuser 都可以编辑的文件

Hus*_*oli 3 permissions webserver

我有一个目录来存储发票 -

drwxrwxr-x  2 me www-data   49152 Sep  9 13:38 invoices
Run Code Online (Sandbox Code Playgroud)

有两个应用程序将文件写入此目录。

  1. PHP 网络应用程序

    -rw-r--r-- 1 www-data www-data 7681 Sep 9 13:38 invoice_1.html

  2. Python脚本

    -rw-rw-r-- 1 me me 8911 Sep 4 06:04 invoice_2.html

现在我想从 Web 应用程序覆盖 invoice_2.html。我怎么做?

我不想添加www-datame组。我不知道怎么做,但这会使我的服务器容易受到安全威胁。

帮帮我。

谢谢。

gar*_*Red 8

两个选项(均执行为root):

第一的

如果你很高兴me成为www-data小组的一员:

将用户添加mewww-data组:

# usermod -a -G www-data me
Run Code Online (Sandbox Code Playgroud)

在目录上设置SetGID标志invoices

# chmod g+s /<path>/<to>/invoices
Run Code Online (Sandbox Code Playgroud)

现在,由于设置了 SetGID 位,在invoices目录中创建的任何文件都将其组设置为www-data(目录的组)。由于用户me在此组中,因此用户将有权写入该文件。

第二

如果您不希望用户me成为该www-data组的成员,那么...

创建一个新组 - invoices

# groupadd invoices
Run Code Online (Sandbox Code Playgroud)

将用户me和添加www-data到该组。

# usermod -a -G invoices me
# usermod -a -G invoices www-data
Run Code Online (Sandbox Code Playgroud)

invoices目录的组更改为此新组 ( invoices)。

# chown .invoices /<path>/<to>/invoices
Run Code Online (Sandbox Code Playgroud)

确保该组invoices对该目录具有写权限:

# chmod g+w /<path>/<to>/invoices
Run Code Online (Sandbox Code Playgroud)

在目录上设置SetGID标志invoices

# chmod g+s /<path>/<to>/invoices
Run Code Online (Sandbox Code Playgroud)

现在,该invoices目录将归invoice组所有,并且invoices由于在目录上设置了 SetGID 位,因此在其中创建的任何文件都将设置为它们的组。双方mewww-data具有写权限,因为它们是成员invoices拥有该写权限组。