摘要
-
文件与目录的授权(ACL)等相关命令
-
本文基于CentOS8(x86_64)
文件与目录的权限管理
小贴士
文件系统构成
1 2 3 4 5 6 7 8 9 10 11 12 13
| /usr/bin 、/bin:存放所有用户都可以执行的命令 /usr/sbin 、/sbin:存放只有root用户可以执行的命令 /home:用户缺省宿主目录 /proc:虚拟文件目录,存放当前进程信息 /dev:设备文件 /lib:系统运行所需的共享库 /lost+found:存放系统出错的检查结果 /tmp:临时文件 /etc:系统配置文件 /var:经常变动的文件,如邮件,日志,计划任务 /usr:库,手册,第三方程序一般安装在/usr/local下 /boot:内核文件 /mnt:临时挂载点
|
文件类型和文件权限
当我们通过ls -l
查看文件列表信息时,会看到文件类型和权限、文件所属用户和用户组、最后修改时间等等:
1 2 3
| drwxr-xr-x 6 root root 4096 7月 23 2021 apache-maven-3.8.1 -rw-r--r-- 1 root root 9536838 3月 31 2021 apache-maven-3.8.1-bin.tar.gz lrwxrwxrwx 1 root root 18 7月 23 2021 maven -> apache-maven-3.8.1
|
第一列展示的就是文件权限,如drwxr-xr-x
1 2 3 4 5 6 7 8
| 第一个字符表示文件类型: - 表示普通文件 d 表示目录 l 表示符号链接 c 表示字符设备文件 b 表示块设备文件 s 表示套接字文件 p 表示管道文件
|
也可以通过file
命令查看文件类型
1 2 3 4 5 6
| $ file apache-maven-3.8.1 apache-maven-3.8.1: directory $ file apache-maven-3.8.1-bin.tar.gz apache-maven-3.8.1-bin.tar.gz: gzip compressed data, from FAT filesystem (MS-DOS, OS/2, NT) $ file maven maven: symbolic link to `apache-maven-3.8.1'
|
1 2 3 4 5 6
| 第一列的其余 9 个字符表示文件或目录的访问权限,分别对应三个字符一组的 rwx 权限, 每3位分别代表文件所有者权限,文件所属组权限,其它用户和组的权限: r 表示读取权限 w 表示写入权限 x 表示执行权限 - 表示没有对应权限
|
1.改变文件或目录权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| chmod u+x file/dir
u:文件所有者 g:文件所属组 o:其它用户和组 a:所有用户所有组
+:赋予权限 -:去除权限
r:读权限 文件--可以查看 目录--可以列出目录内容 w:写权限 文件--可以修改 目录--可以在目录中创建、删除文件和目录 x:执行权限 文件--可以执行文件 目录--可以进入目录
注:对于目录,如有r权限,则必须有x权限。
chmod 751 file : 相当于rwxr-x--x r->4 w->2 x->1
|
2.改变文件或目录所有者和所属组
1 2 3 4 5
| chown user file :将file的所有者修改为user
chgrp group file :将file的所属组修改为group
chown -R user.group dir :修改dir及其子目录的所有者和所属组
|
3.为可执行程序赋予SetUID与SetGID权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| chmod u+s 程序 chmod 4755 程序 : 权限从3位数字变成了4位数字,SetUID权限用数字4表示
chmod u-s 程序 chmod 755 程序
chmod g+s 程序 chmod 2755 程序 : 权限从3位数字变成了4位数字,SetGID权限用数字2表示
chmod g-s 程序 chmod 755 程序
ll test.sh : 初始权限 -rwxr-xr-x 1 root root 0 3月 3 15:44 test.sh
chmod u+s test.sh : 增加SetUID权限
ll test.sh -rwSr-xr-x 1 root root 0 3月 3 15:44 test.sh
此时可以看到root用户的执行权限从小写的x变成了大写的S,表示任何用户执行test.sh,都会以root用户身份执行
chmod u-s test.sh : 去掉SetUID权限 chmod g+s test.sh : 增加SetGID权限
ll test.sh -rwxr-Sr-x 1 root root 0 3月 3 15:44 test.sh
此时可以看到root用户组的执行权限从小写的x变成了大写的S,表示任何用户执行test.sh,都会以root用户组的身份执行
find / -perm -4000 -o -perm -2000
|
4.ACL授权
添加或修改ACL权限
1 2 3 4 5
| setfacl -m [权限规则] dir[file]
权限规则: u[设置用户]:username[用户名]:rwx[设置权限] g[设置组]:groupname[组名]:rwx[设置权限]
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| -rw-r--r-- 1 root root 0 3月 9 11:25 file drwxr-xr-x 2 root root 4096 3月 9 11:36 dir
setfacl -m u:hanqf:rw file
setfacl -m u:hanqf:rwx dir
-rw-rw-r--+ 1 root root 0 3月 9 11:25 file drwxrwxr-x+ 2 root root 4096 3月 9 11:35 dir 此时可以看到file和dir的权限后面多了一个加号标志,同时其组权限也发生了变化,这个我们后面讲
setfacl -m g:hanqf:rw file
setfacl -m g:hanqf:rwx dir
-rw-rwxr--+ 1 root root 0 3月 9 11:25 file drwxrwxr-x+ 2 root root 4096 3月 9 11:35 dir 此时同样可以看到file和dir的权限后面多了一个加号标志,同时其组权限也发生了变化,这个我们后面讲
所以,只要看到文件或目录权限后面有个加号,就说明被设置ACL权限
setfacl -m u:hanqf:r -R dir
|
查看ACL权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| $ getfacl file
user::rwx user:hanqf:rw- group::r-x group:hanqf:rwx mask::rwx other::r-x
$ getfacl dir
user::rwx user:hanqf:rwx group::r-x group:hanqf:rwx mask::rwx other::r-x
$ getfacl --omit-header file :去掉头信息 user::rwx user:hanqf:rw- group::r-x group:hanqf:rwx mask::rwx other::r-x
|
小贴士
- 文件所有者权限:
ACL_USER_OBJ
user::rwx
- 指定某些用户的权限,一行显示一个:
ACL_USER
user:hanqf:rw-
- 文件所属组权限:
ACL_GROUP
group::r-x
- 指定某些用户组的权限,一行显示一个:
ACL_GROUP_OBJ
group:hanqf:rwx
- mask权限,
ACL_USER
, ACL_GROUP
和ACL_GROUP_OBJ
中的最大值,即rwx转换为数字后的和
mask::rwx
- 其它用户和组的权限
other::r-x
mask限制ACL权限最大值
-
上面我们在给文件或目录设置ACL权限后,通过ls -l
命令查看文件或目录权限时,发现组权限也发生了变化,
-
实际上这里的组权限显示的是mask
,mask
用于限制ACL_USER
, ACL_GROUP
和ACL_GROUP_OBJ
中的最大值,即rwx转换为数字后的和
-
我们也可以设置mask
的值
1 2 3 4 5 6 7 8 9 10 11 12
| $ setfacl -m mask::r-- file
$ getfacl --omit-header file user::rw- user:hanqf:rw- group::r-- group:hanqf:rwx mask::r-- other::r--
$ ls -l file -rw-r--r--+ 1 root root 0 3月 9 11:25 file
|
Default ACL 设置
1 2 3 4 5 6 7 8 9 10 11
| $ setfacl -d -m user:hanqf:rw dir $ getfacl --omit-header dir user::rwx group::r-x other::r-x default:user::rwx default:user:hanqf:rw- default:group::r-x default:mask::rwx default:other::r-x
|
1 2 3 4 5 6 7
| $ setfacl -k dir $ getfacl dir user::rwx user:hanqf:rw- group::r-x mask::rwx other::r-x
|
删除ACL权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| setfacl -x u:username file setfacl -x u:username dir setfacl -x u:username -R dir
setfacl -x g:groupname file setfacl -x g:groupname dir setfacl -x g:groupname -R dir
setfacl -b file setfacl -b dir setfacl -b -R dir
|
5.粘着位
1 2 3 4 5 6 7 8 9
| chmod o+t dir
chmod 1777 dir
chmod o-t dir
chmod 777 dir
|