如何覆盖特定文件夹的所有用户的 umask 设置?

如何覆盖特定文件夹的所有用户的 umask 设置?

我运行的是 RHEL6。我要求在 /etc/bashrc 中包含“umask 077”,但不允许更改。我们有一个指定用于小组协作的文件夹,我们希望同一小组中的每个人都能够在其中读写。因此,用户必须手动设置“umask 002”或在本地 .bashrc 文件中设置,或者记住 chmod。他们经常忘记,并且管理员被要求“修复”权限,因为文件的所有者不可用。

有没有办法强制文件夹为“umask 002”?我读过我应该使用 setfacl 但我认为 umask 会覆盖它。

答案1

如何强制在特定目录中创建的文件的组和权限?

我测试的是创建一个目录/var/test。我将组设置为 tgroup01。我确保在 /var/test 下创建的任何内容都将设置为 tgroup01 组。然后我确保 /var/test 下任何内容的默认组权限都是 rwx。

sudo mkdir /var/test
sudo chgrp tgroup01 /var/test
sudo chmod 2775 /var/test
sudo setfacl -m "default:group::rwx"

如果我然后创建一个目录 foo 或触摸一个文件等等,他们就有正确的权限

ls -al /var/test

drwxrwsr-x+  3 root   tgroup01  .
drwxr-xr-x   5 root   root      ..
-rw-rw-r--   1 userA  tgroup01  blah
drwxrwxr-x+  2 userA  tgroup01  foo

答案2

setgid 位不会帮助您 - 它只会影响所有权,而不影响所有者可以对文件执行的操作。

如果共享存储区域安装在不同的文件系统上,则可能有效。您需要让管理员使用显式设置的正确 umask 来安装它,以便您可以共享文件。或者,这些文件由仅供内部使用的 samba 共享挂载 - 有点过头了,但 samba 很容易允许特定的组和权限模型而不是操作系统提供的模型。

简而言之,我们中的一些人认为“ITS”中的“S”代表服务。如果他们有 077 umask 的要求,那么他们需要想出一种为您共享文件的有效方法。

(并且 setgid 位不起作用)

ivan@darkstar:~$ umask
0002
ivan@darkstar:~$ 
ivan@darkstar:~$ umask 077
ivan@darkstar:~$ umask
0077
ivan@darkstar:~$ mkdir te
ivan@darkstar:~$ ls -ld te
drwx------ 2 ivan ivan 4096 Sep  7 18:53 te
ivan@darkstar:~$ umask 2
ivan@darkstar:~$ umask
0002
ivan@darkstar:~$ groups
ivan adm cdrom sudo dip plugdev lpadmin sambashare kvm webdev
ivan@darkstar:~$ sudo chown .webdev te
ivan@darkstar:~$ sudo chmod g+w te
ivan@darkstar:~$ ls -ld te
drwx-w---- 2 ivan webdev 4096 Sep  7 18:53 te
ivan@darkstar:~$ chmod g+rx te
ivan@darkstar:~$ sudo chmod g+s te
ivan@darkstar:~$ ls -ld te
drwxrws--- 2 ivan webdev 4096 Sep  7 18:53 te
ivan@darkstar:~$ cd te
ivan@darkstar:~/te$ umask 077
ivan@darkstar:~/te$ umask
0077
ivan@darkstar:~/te$ touch test
ivan@darkstar:~/te$ ls -l
total 0
-rw------- 1 ivan ivan 0 Sep  7 18:54 test
ivan@darkstar:~/te$ 

答案3

您可以通过使用特殊许可来实现这一点”设置gid位”。

setgid 位对文件和目录都有效。在第一种情况下,设置了 setgid 位的文件在执行时,不是以启动它的用户组的权限运行,而是以拥有该文件的组的权限运行。

相反,当在目录上使用时,setgid 位会更改标准行为,以便在所述目录内创建的文件组将不是创建它们的用户的组,而是父目录本身的组。这通常用于简化文件共享(属于该组的所有用户都可以修改文件)。

如果我们想设置设置gid使用以下命令对目录进行位操作。

$ chmod 2775 test_dir

通过上面的命令,我们向其所有者和该目录所属组的用户授予对该目录的完全权限,并为所有其他用户授予读取和执行权限。

我们可以通过其他方式设置它,如下所述

$ chmod g+s test_dir

例子

我们已经创建了多个用户,其名称为用户1,用户2,用户3:

$ useradd user1
$ useradd user2
$ useradd user3

还建了一个群,名字叫团体:

$ groupadd group

添加团体作为创建用户中的辅助组:

$ usermod -a -G group user1
$ id user1
uid=1000(user1) gid=1000(user1) groups=1000(user1),1003(group)

$ usermod -a -G group user2
$ id user2
uid=1001(user2) gid=1001(user2) groups=1001(user2),1003(group)

$ usermod -a -G group user3
$ id user3
uid=1002(user3) gid=1002(user3) groups=1002(user3),1003(group)

已创建测试目录并添加了设置gid位允许:

$ mkdir test_dir
$ chmod 2775 test_dir
$ ls -al 
drwxrwsr-x   5 user group  4096 Sep  7 17:10 test_dir

使用创建的用户在 test_dir 中创建文件和目录:

$ cd test_dir

$ su user1
$ mkdir user1_dir
$ touch user1_file

$ su user2
$ mkdir user2_dir
$ touch user2_file

$ su user3
$ mkdir user3_dir
$ touch user3_file

这是测试目录目录列表:

$ ls -al
total 44
drwxrwsr-x 5 user  group 4096 Sep  7 17:10 .
drwxr-xr-x 1 root  root  4096 Sep  7 17:35 ..
drwxrwsr-x 2 user1 group 4096 Sep  7 17:11 user1_dir
-rw-rw-r-- 1 user1 group    0 Sep  7 17:10 user1_file
drwxrwsr-x 2 user2 group 4096 Sep  7 17:09 user2_dir
-rw-rw-r-- 1 user2 group    0 Sep  7 17:09 user2_file
drwxrwsr-x 2 user3 group 4096 Sep  7 17:09 user3_dir
-rw-rw-r-- 1 user3 group    0 Sep  7 17:09 user3_file

希望这个解决方案适合您。

相关内容