文章目录
前言
本人也是菜鸟,在学习过程和写博客过程中都参考了很多的资料,写博客的目的是为了帮到一些有需求的人,同时也为了自己记录学习过程,如有不对和不妥的地方欢迎指出
本文将学习文件和目录的权限属性,权限的表示方法、修改权限、修改文件或目录的所属者及所属组、特殊权限、默认权限、ACL权限等权限管理知识
文件目录权限属性
当我们使用ll命令查看当前目录详细信息时,可以看到最左侧有十个字母
[root@linux1 wldj]# ll
总用量 0
drwxr-xr-x 2 root root 6 11月 22 20:13 a
-rw-r--r-- 1 root root 0 11月 22 20:13 a.txt
drwxr-xr-x 2 root root 6 11月 22 20:13 b
-rw-r--r-- 1 root root 0 11月 22 20:13 b.txt
drwxr-xr-x 2 root root 6 11月 22 20:13 c
-rw-r--r-- 1 root root 0 11月 22 20:13 c.txt
#详解
- #文件类型
rw-r--r-- #权限
1 #inode块
root #所属者
root #所属组
0 #大小
11月 22 20:13 #时间
a.txt #文件名字
这几个字母所表示的意义如下图所示:
- 0:该文件的文件类型,d为目录文件,-为文本文件
- 1、2、3:该文件所属者的权限,也就是这个文件的拥有者的权限
- 4、5、6:该文件所属组的权限,这个文件拥有组的权限
- 7、8、9:除了所属者和所属组以外其他用户的权限

权限详解
权限分为r、w、x三种权限,分别是
可读(r),可写(w),可执行(x)
文件权限:
- 可读:能够读取文件的实际内容
- 可写:能够编辑、新增、修改、删除文件的实际内容
- 可执行:能够执行脚本程序
目录权限:
- 可读:能够读取目录内的文件列表
- 可写:能够在目录新增、删除、重命名文件
- 可执行:能够进入该目录
数字表示:
rwx权限可以用数字来表示,r对应4,w对应2,x对应1

数字表示法是基于字符rwx的权限而来的,目的是为了简化权限的表示方式
[root@linux1 wldj]# ll
-rw-r--r-- 1 root root 0 11月 22 20:13 a.txt
例如这个a.txt文件,它的文件所属者权限为rw-,也就拥有可读可写权限,也就是拥有4和2的权限,那么这个文件的文件所属者权限为6(4+2+0)。所属组权限为r--,即4。其他用户的权限为r--,即4。所以这个文件的权限表示为644
更改权限
chmod
修改文件、目录的权限
文字设定法
语法:chmod [操作对象] [操作符] [赋予的权限] 文件/目录
操作对象:
u 用户(user),文件或目录的所属者
g 用户组(group),文件或目录的所属组
o 其他用户(other)
a 所有用户all
操作符:
+ 添加权限
- 减少权限
= 设置权限
#实例1
[root@linux1 wldj]# ll a.txt #查看a.txt文件的权限
-rw-r--r-- 1 root root 0 11月 22 20:13 a.txt #644,所属组没有w权限
[root@linux1 wldj]# chmod g+w a.txt #赋予a.txt所属组w权限
[root@linux1 wldj]# ll a.txt #查看a.txt文件的权限
-rw-rw-r-- 1 root root 0 11月 22 20:13 a.txt #此时权限变为664,所属组获得w权限
#实例2
[root@linux1 wldj]# ll a.txt #查看a.txt文件的权限
-rw-rw-r-- 1 root root 0 11月 22 20:13 a.txt #664权限
[root@linux1 wldj]# chmod o-r a.txt #将其他用户的r权限删除
[root@linux1 wldj]# ll a.txt #查看a.txt文件权限
-rw-rw---- 1 root root 0 11月 22 20:13 a.txt #权限变为660
#实例3
[root@linux1 wldj]# ll a.txt #查看a.txt文件权限
-rw-rw---- 1 root root 0 11月 22 20:13 a.txt #权限660
[root@linux1 wldj]# chmod a=rwx a.txt #设置a.txt文件所有用户拥有rwx权限
[root@linux1 wldj]# ll a.txt #查看a.txt文件权限
-rwxrwxrwx 1 root root 0 11月 22 20:13 a.txt #权限为777
数字设定法
chmod [权限] 文件/目录
#实例1
[root@linux1 wldj]# ll b.txt #查看b.txt权限
-rw-r--r-- 1 root root 0 11月 22 20:13 b.txt #权限为644
[root@linux1 wldj]# chmod 777 b.txt #赋予b.txt权限为777
[root@linux1 wldj]# ll b.txt #查看b.txt权限
-rwxrwxrwx 1 root root 0 11月 22 20:13 b.txt #权限为777
chown
更改文件、目录的属者、属组
格式:
chown [属者] 文件/目录
chown :[属组] 文件/目录
chown [属者]:[属组] 文件/目录
#实例1:
[root@linux1 wldj]# ll a.txt
-rwxrwxrwx 1 root root 0 11月 22 20:13 a.txt #属者为root,属组为root
[root@linux1 wldj]# chown user01 a.txt #将所属者更改为user01
[root@linux1 wldj]# ll a.txt
-rwxrwxrwx 1 user01 root 0 11月 22 20:13 a.txt #属者变为user01,属组不变
#实例2
[root@linux1 wldj]# ll b.txt
-rwxrwxrwx 1 root root 0 11月 22 20:13 b.txt #属者为root,属组为root
[root@linux1 wldj]# chown :user01 b.txt #更改所属组为user01
[root@linux1 wldj]# ll b.txt
-rwxrwxrwx 1 root user01 0 11月 22 20:13 b.txt #属组变为user01,属者不变
#实例3
[root@linux1 wldj]# ll c.txt
-rw-r--r-- 1 root root 0 11月 22 20:13 c.txt #属者为root,属组为root
[root@linux1 wldj]# chown user01:user01 c.txt #更改属者为user01,属组为user01
[root@linux1 wldj]# ll c.txt
-rw-r--r-- 1 user01 user01 0 11月 22 20:13 c.txt #属者和属组变为user01
特殊权限
SUID
临时拥有所属者的权限
[root@linux1 ~]# ll /usr/bin/touch
-rwxr-xr-x. 1 root root 96312 Oct 20 2021 /usr/bin/touch
[root@linux1 ~]# chmod u+s /usr/bin/touch #为用户添加s权限
[root@linux1 ~]# ll /usr/bin/touch
-rwsr-xr-x. 1 root root 96312 Oct 20 2021 /usr/bin/touch
#可以发现x变为了s,如果文件原先就没有x权限的话,就会变成rwS
说明
对文件设置SUID强制位之后,可以让对此文件没有执行权限的用户执行此文件
chmod u+s filename 对文件设置SUID强制位
chmod u-s filename 对文件取消SUID强制位
SGID
子文件继承父目录所属组
[root@linux1 ~]# mkdir /share
[root@linux1 ~]# chmod 777 /share/
[root@linux1 ~]# su - can #切换为普通用户can
[can@linux1 ~]$ touch /share/a #创建一个文件a
[can@linux1 ~]$ ll /share/
total 0
-rw-rw-r--. 1 can can 0 Nov 28 08:01 a #用户和用户组为can
[can@linux1 ~]$ exit #回到root用户
logout
[root@linux1 ~]# chmod g+s /share/ #赋予s权限
[root@linux1 ~]# ls -ld /share/ #查看/share的权限
drwxrwsrwx. 2 root root 15 Nov 28 08:01 /share/ #所属组的x变为s
[root@linux1 ~]# su - can #切换can用户
Last login: Mon Nov 28 08:01:39 EST 2022 on pts/1
[can@linux1 ~]$ touch /share/b #创建文件b
[can@linux1 ~]$ ll /share/
total 0
-rw-rw-r--. 1 can can 0 Nov 28 08:01 a
-rw-rw-r--. 1 can root 0 Nov 28 08:01 b #b的属组为root
概念
对目录设置了SGID强制位之后,用其他用户在目录下创建文件则会继承该目录的所属组
chmod g+s directory:对目录设置SGID强制位
chmod g-s directory:对目录取消SGID强制位
SBIT
只能删除自己的文件,不能删除其他用户的文件
[root@linux1 ~]# chmod o+t /srv/sharesmb/
[user01@linux1 sharesmb]$ touch user01 #user01创建文件
[user01@linux1 sharesmb]$ exit
exit
[root@linux1 ~]# su user02
[user02@linux1 root]$ cd /srv/sharesmb/
[user02@linux1 sharesmb]$ rm -rf user01 #user02无法删除user01创建的用户
rm: 无法删除 'user01': 权限不够
umask默认权限
默认权限掩码,定义默认权限中被屏蔽或禁用的权限位
umask值用于设置用户在创建文件时的默认权限,
当我们在创建目录或文件时,他们的默认权限就是umask值决定的。root的umask值默认是0022,普通用户的umask值默认是0002
#查看默认权限
[root@linux1 ~]# umask
0022
[user01@linux1 ~]$ umask
0002
详解:
第一个0代表丢弃的权限
第二个0代表本文件/目录拥有者什么权限都没丢弃,x权限除外
第三个2代表本文件/目录的用户组丢弃了w权限,如果是文件那么他的x文件也会被丢弃
第三个2代表本文件/目录的其他用户能使用的权限只有r和x,文件除外
当root用户创建目录时,默认的权限就是用最大权限777去掉相应位置的umask值权限,即对于所有者不必去掉任何权限,对于所属组要去掉w权限,对于其他用户也要去掉w权限,所以目录的默认权限就是755
当root用户创建文件时,默认的权限则是用最大权限666去掉相应位置的umask值,即文件的默认权限是644
ACL权限管理
设置文件ACL策略规则
setfacl命令可以用来细分linux下的文件权限
chmod命令可以把文件权限分为u,g,o三个组。而setfacl可以对每一个文件或目录设置更精确的文件权限。换句话说,setfacl可以更精确的控制权限的分配
比如:让某一个用户对某一个文件具有某种权限
setfacl -m u:[用户名]:[权限(rwx)] [文件名] #为用户设置ACL权限
setfacl -m g:[组名]:[权限(rwx)] [文件名] #为组设置ACL权限
setfacl -x u:[用户名] [文件名] #删除用户ACL权限
setfacl -x g:[组名] [文件名] #删除组ACL权限
setfacl -b [文件名] #删除文件的所有ACL权限
#为manager组设置对于/srv/sharesmb目录具有读写权限
[root@linux1 ~]# setfacl -m g:manager:rwx /srv/sharesmb/
#为dev组设置对于/srv/sharesmb目录具有只读权限
[root@linux1 ~]# setfacl -m g:dev:rx /srv/sharesmb/
#查看权限ACL权限
[root@linux1 ~]# getfacl /srv/sharesmb/
getfacl: Removing leading '/' from absolute path names
# file: srv/sharesmb/ #显示的文件或目录的名称
# owner: root #文件或目录的所有者
# group: root #文件或目录的所有组
user::rwx #文件所有者具有的权限
group::r-x #文件所有组具有的权限
group:manager:rwx #manager组具有的权限
group:dev:r-x #dev组具有的权限
mask::rwx #ACL掩码,表示ACL规则中分配的最大权限,如果mask是r--,即使manager组被授予rwx,实际的权限也会被限制为r--
other::r-x #除了上面的用户以外的其他用户的权限