1.Linux 为每个文件和目录存储了 3 个额外的信息位。
(1)SUID(set user ID):当用户执行该文件时,程序会以文件属主的权限运行。
(2)SGID(set group ID):对文件而言,程序会以文件属组的权限运行;对目录而言,该目录中创建的新文件会以目录的属组作为默认属组。
(3)粘滞位(sticky bit):应用于目录时,只有文件属主可以删除或重命名该目录中的文件。
2.可以通过 chmod 命令设置 SGID,将其添加到标准 3 位八进制值之前(组成 4 位八进制值),或者在符号模式下用符号 s。
如果使用的是八进制模式,则需要知道这些位的排列
000 0 清除所有位
001 1 设置粘滞位
010 2 设置 SGID 位
011 3 设置 SGID 位和粘滞位
100 4 设置 SUID 位
101 5 设置 SUID 位和粘滞位
110 6 设置 SUID 位和 SGID 位
111 7 设置所有位
3.要创建一个共享目录,使目录中的所有新文件都沿用目录的属组,只需设置该目录的SGID 位。
$ mkdir testdir
$ ls -l
drwxrwxr-x 2 rich rich 4096 Sep 20 23:12 testdir/
$ chgrp shared testdir
$ chmod g+s testdir
$ ls -l
drwxrwsr-x 2 rich shared 4096 Sep 20 23:12 testdir/
$ umask 002
$ cd testdir
$ touch testfile
$ ls -l
total 0
-rw-rw-r-- 1 rich shared 0 Sep 20 23:13 testfile
$
4.Linux 开发者设计出了一种更先进的文件和目录安全方法:访问控制列表(access control list,ACL)。
ACL 允许指定包含多个用户或组的列表以及为其分配的权限。
可以使用 setfacl 命令和 getfacl 命令在 Linux 中实现 ACL 特性。getfacl 命令能够查看分配给文件或目录的 ACL:
$ touch test
$ ls -l
$ getfacl test
# file: test
# owner: rich
# group: rich
5.setfacl 命令可以为用户或组分配权限:
setfacl [options] rule filenames
setfacl 命令允许使用-m 选项修改分配给文件或目录的权限,或使用-x 选项删除特定权
可以使用下列 3 种格式定义规则:
u[ser]:uid:perms
g[roup]:gid:perms
o[ther]::perms
6.要为用户分配权限,可以使用 user 格式;要为组分配权限,可以使用 group 格式;要为其他用户分配权限,可以使用 other 格式。
例
(1)为 test 文件添加了 sales 组的读写权限。
$ setfacl -m g:sales:rw test
$ ls -l
(2)getfacl 的输出显示为两个组分配了权限
$ getfacl test
(3)要想删除权限,可以使用-x 选项:
$ setfacl -x g:sales test
$ getfacl test