我运行的是 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
希望这个解决方案适合您。