设置目录中文件的默认用户名和组


13

使用这篇有用的文章,我可以在文件夹中设置默认的组和文件权限。

我在设置默认所有者(teamlead uid 1234)时遇到麻烦。

setfacl -d -m g::rwx /my/test/folder
setfacl -d -m o::rx /my/test/folder

getfacl /my/test/folder

# file: /my/test/folder
# owner: teamlead
# group: web_prod
# flags: -s-
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::rwx
default:other::r-x

接着就,随即:

[mary@boxen]# touch /my/test/folder/somefile
[mary@boxen]# ll /my/test/folder/somefile
-rw-rw-r--. 1 mary web_prod 0 Nov  6 08:58 somefile

因此,分配了正确的组,但是新文件拥有创建该文件的用户的所有权。我希望新创建的文件具有teamlead:web_prod所有者/组。

似乎setfacl也可以用来设置默认用户。使用现有文件夹acl config(以上):

[mary@boxen]# setfacl -d -m u:1234:rwx /my/test/folder

现在以其他用户身份创建文件。我希望它具有teamlead:web_prod所有权。

[mary@boxen]# touch /my/test/folder/anotherfile
[mary@boxen]# ll /my/test/folder/anotherfile
-rw-rw-r--+ 1 mary web_prod 0 Nov  6 08:58 somefile

新文件仍然拥有创建文件的所有者的所有权,而不是uid 1234(teamlead)。

是我什至有可能吗,还是我要解决这个问题的方式是错误的?

Answers:


18

使用setfacl可以为新创建的文件设置默认权限,但不能设置默认所有者/组。

要使新文件归特定用户所有,您需要一个setuid位,其工作方式类似于目录上的setgid位。不幸的是,这没有实现。

使用setfacl,您可以执行在大多数情况下几乎等同的操作:您可以将ACL设置为default:user:teamlead:rwx。这样,即使其他人拥有它,指定的用户也可以写入新文件。


请使用以下命令更新此答案,以将“ default:user:teamlead:rwx”应用于目录“ / foo”
user319862 '17

10

始终创建一个新文件,该文件属于创建文件的进程运行所使用的用户。(确切地说,是有效的用户ID。)这不能更改,因为允许用户创建属于其他用户的文件将是安全漏洞,类似于允许非root用户放弃文件

无论您要做什么,都不需要这样做。ACL足以确保以后需要读取文件的任何内容都具有足够的权限。保留文件由创建它的用户所有。


“ ACL足以确保以后需要读取文件的任何内容都具有足够的权限。” 假。新文件的组将是用户的默认组。如果进行协作的用户具有不同的默认组,则您将无法访问彼此的文件。您需要setgid才能使父文件夹的组“粘贴”到所有子文件夹。
bviktor

@bviktor您可以使用ACL达到相同的效果。
吉尔(Gilles)'所以

如何使用ACL为新文件指定所有者和组?
bviktor

@bviktor所有者是创建文件的人,不会改变。以传统权限拥有文件的组是无关紧要的。新文件上的ACL是目录的默认ACL,就像新文件上的拥有组是具有BSD语义(g+s)的目录的拥有组一样。
吉尔斯(Gilles)'所以

@吉尔斯不。新文件组将是创建者用户的“初始登录组”,而不是父文件夹的组。您描述的行为(即新文件获取父目录的组)要求在父目录上设置setgid。该组非常相关,因为当用户进行协作时,如果组不同,则他们将无法访问彼此的文件。除非您的文件可以全世界访问,否则这不是一个好主意。
bviktor

1

如果要使用新组创建新文件,则需要更改主组。

为此,您可以使用usermod和参数-g

   -g, --gid GROUP
       The group name or number of the user's new initial login group. The group must exist.
       Any file from the user's home directory owned by the previous primary group of the user will be owned by this new group.
       The group ownership of files outside of the user's home directory must be fixed manually.

例如

test2@kinakuta:/tmp$ id
uid=1002(test2) gid=1002(test2) grupos=1002(test2),1003(testgroup)
test2@kinakuta:/tmp$ touch test2
test2@kinakuta:/tmp$ ls -la test2
-rw-r--r-- 1 test2 test2 0 nov 23 22:26 test2
root@kinakuta:/tmp# usermod -g testgroup test2
root@kinakuta:/tmp# su test2
test2@kinakuta:/tmp$ touch test2_1
test2@kinakuta:/tmp$ ls -la test2_1 
-rw-r--r-- 1 test2 testgroup 0 nov 23 22:27 test2_1

0

在Linux上,您必须在父目录上有sgid才能继承文件组。(尽管在BSD系统上的目录上不需要sgid。)


问题是关于为新创建的文件分配所有权。组已正确分配。
2013年
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.