Linux为将来的文件和文件夹设置用户和组所有权

nkcskrwz  于 2023-05-06  发布在  Linux
关注(0)|答案(4)|浏览(122)

我正在使用以下命令更改用户和组的所有权:

sudo chown -R apache:www /var/www

然而,我注意到,每当我向该目录添加新文件或文件夹时,所有者都是我当前的用户名,而不是预期的用户apache。如何修改上面的命令,使将来所有的文件夹和文件都归apache:www所有?或者我需要使用一个额外的命令?

30byixjq

30byixjq1#

您可以使用ACL来执行此操作。例如:

$ ls -ld /var/www
drwxr-xr-x 2 apache www 4096 Aug  7 13:53 /var/www

$ sudo setfacl -dRm u:apache:rwX,g:www:rwX /var/www

$ ls -ld /var/www
drwxr-xr-x+ 2 apache www 4096 Aug  7 13:53 /var/www

$ getfacl /var/www
# file: var/www
# owner: apache
# group: www
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:apache:rwx
default:group::r-x
default:group:www:rwx
default:mask::rwx
default:other::r-x

当新文件被创建时,它们仍然由您的用户拥有,但也会有一个ACL设置,授予apache用户权限:

$ touch donkey
$ ls -l donkey
-rw-rw-r--+ 1 gene gene 0 Aug  7 13:57 donkey

$ getfacl donkey
# file: donkey
# owner: gene
# group: gene
user::rw-
user:apache:rwx               #effective:rw-
group::rwx                      #effective:rw-
group:www:rwx              #effective:rw-
mask::rw-
other::r--

命令概述:

setfacl -dRm u:apache:rwX,g:www:rwX /var/www
  • -d标志指定应用于默认ACL的操作。
  • -R标志设置要递归应用的操作
  • -m表示这将是一个修改操作

之后就很简单了

  • u:USERNAME:权限
  • g:GROUPNAME:权限

这些条目必须用逗号分隔。
X权限(注意:它是大写的)意味着它将只应用于目录而不是文件。

uubf1zoe

uubf1zoe2#

您可以通过使用chmodSETGID(SET Group ID)标志在组级别上实现这一点:

chmod g+s <directory>

关于docs
在大多数系统上,如果设置了目录的set-group-ID位,则新创建的子文件继承与目录相同的组,并且新创建的子目录继承父目录的set-group-ID位。
一旦你设置好了,在<directory>中新建的文件和目录将被设置为<group>。例如

chmod g+s /srv/www

将导致/srv/www中新创建的文件和目录具有组www
您可以通过执行ls -al来验证这一点,这将显示s对目录的组“执行”权限。例如

drwxr-sr-x.   5 apache www       4096 Mar 13 20:32 www
      ^
    SETGID
yrefmtwq

yrefmtwq3#

我猜你需要在执行命令之前更改用户-一个类似这样的脚本:

$whoami
user1
$ su - apache
Password:
$ whoami
apache
[add file]
$ exit
eaf3rand

eaf3rand4#

类POSIX文件系统中的新文件总是有一个拥有用户和一个拥有组。chown(2) man page中详细解释了如何确定所有者,但所有者将 * 始终 * 是运行创建文件的任何进程的用户帐户,尽管您可以通过调整SETGID或ACL来拥有与进程组不同的组。
如果你想创建一个拥有不同所有者的新文件,你需要确保创建文件的进程拥有你想要的用户。因此,如果您当前正在运行<command>,并且希望文件开始时由apache拥有,则可能需要运行sudo -u apache <command>,以便进程以apache用户身份运行。
如果您无论如何都要这样做,那么可能更容易不去担心SETGID或类似的东西,而只是确保在拥有过程中也有正确的组来设置组。这意味着你需要运行sudo -u apache -g www <command>
显然,您可以继续使用chown,这可能是最简单的选择。您还可以通过确保组权限(通过SETGID或ACL(或更深奥的选项))使问题变得无关紧要,这意味着所有者不相关。但是如果你想让所有者从一开始就是一个不同的用户,那么sudo(或者其他可以让你改变运行给定进程的帐户的东西,例如su)是实现这一点的唯一方法。

相关问题