一.权限的概念
在 Linux 系统的架构里,权限是构建安全堡垒的基石,精准界定了不同用户对文件与目录的操作边界,对系统安全的维护以及数据完整性的保障起着决定性作用。Linux 将权限归纳为读(r),写(w)和执行(x)这三种基础类别,它们各司其职,共同守护系统资源。
1.读权限(r):
对于文件,拥有读权限的用户宛如拥有了一把打开知识宝库的钥匙,能够毫无阻碍地查 看文件的具体内容,无论是文本文件中的文字信息,还是配置文件里的参数设置,都能一览无余。切换 到目录场景下,读权限就如同赋予了用户进入一间仓库并查看库存清单的权力,用户凭借它可以运用ls命令,清晰罗列目录中的所有文件与子目录,对目录结构与内容分布做到心中有数。
2.写权限(w):
当用户对文件持有写权限时,便如同手握一支神奇的笔,能够自由修改文件内容,无论是增添新的文字段落,还是修正既有数据,都能随心操作。值得注意的是,若要删除文件,除了对文件本身有写权限,还需对文件所在目录具备写权限。把目光转向目录,写权限如同给予用户在一片空地上建造房屋的许可,用户可在目录中创建全新的文件与子目录,还能删除目录里已有的文件与子目录,自由规划目录内的资源布局。
3.执行权限(x):
若文件属于可执行文件,比如常见的脚本文件或二进制程序,执行权限就像点燃引擎的钥匙,用户得以运行该文件,让程序中的指令依序执行,实现各种功能。在目录方面,执行权则如同打开一扇门的钥匙,允许用户运用cd命令顺利进入该目录,深入探索目录内部的资源。
二.权限的查看及读取
1.权限的查看

ls -l 文件 ##查看文件权限
ls -ld 目录 ##查看目录权限
2.文件权限的种类
文件的属性被叫做文件的元数据(meta data),一种元数据用1个byte来记录内容
#文件权限信息#
- | rw-r--r-- | . | 1 | root | root | 0 | Apr 12 10:57 | lee
[1] [2] [3] [4] [5] [6] [7] [8] [9]
#目录权限信息#
d | rw-r--r-- | . | 2 | root | root | 0 | Apr 12 10:57 | timinglee
[1] [2] [3] [4] [5] [6] [7] [8] [9]
[1]文件类型
#文件类型
#- 普通文件
#d 目录
#l 软连接
#b 快设备
#c 字符设备
#s socket套接字
#p 管道 |
[2]文件权限说明
##用户权限
##rw-|r--|r--
# u g o
[3]文件安全上下文标记
##系统的selinux开启,那么在此位会出现“.”
[4]文件副本标记或目录中子目录标记
##对于文件:文件内容被系统记录的次数(硬链接个数)
##对于目录:目录中子目录的个数
[5-6]文件的归属
##文件拥有者
##文件拥有组
[7]文件容量统计
##对于文件:文件内容大小
##对于目录:目录中子文件的元数据大小
[8]文件时间戳
##文件内容被修改的时间
[9]文件名称
文件名称中一个英文字符占用一个字节,一个中文字符占用三个字节
3.用户对于文件的身份识别及设定
1)用户对文件的身份
u: #user 文件的拥有者,ls -l 看到的第五列信息
g: #group 文件拥有组, ls -l 看到的第六列信息
o: #other 既不是拥有者也不是拥有组成员的其他用户的通称
2)权限位
rwx|r--|r--
u g o
3)文件用户用户组管理
chown username file ##更改文件拥有者
chgrp groupname file ##更改文件拥有组
chown username:groupname file ##同时更改文件的拥有者和拥有组
chown|chgrp -R user|group dir ##更改目录本身及目录中内容的拥有者或者拥有组
4.设定普通权限的方法
chmod ##设定文件权限
#chmod 复制权限#
chmod --reference=/tmp /mnt/lee #复制/tmp目录的权限到/mnt/lee上
chmod -R --reference=/tmp /mnt/westosdir #复制/tmp目录的权限到/mnt/westosdir及
#目录中的子文件上 -R 代表第归操作
#chmod 字符方式设定权限
chmod <a|u|g|o><+|-|=><r|w|x> file ##用字副方式设定文件权限
示例:
chmod u-rw /mnt/lee2
chmod u-rw,g+x,o+wx /mnt/lee3
chmod a-rwx /mnt/lee4
chmod u=rwx,g=rx,o=--- /mnt/lee5
chmod -R u=rwx,g=rx,o=--- /mnt/timinglee
#chmod 数字方式设定权限#
权限波尔指表示方式
rwx = 111
--- = 000
三位二进制可以表示的最大范围为8进至数
rwx=111=7
rw-=110=6
r-x=101=5
r--=100=4=r
-wx=011=3
-w-=010=2=w
--x=001=1=x
---=000=0
#示例:
chmod 600 /mnt/lee1
rw-------
5.系统默认权限设定
- 系统本身存在的意义共享资源
- 从安全角度讲系统共享的资源越少,开放的权力越小系统安全性越高
- 既要保证系统安全,又要系统创造价值,于是把应该开放的权力默认开放把不安全的权力默认保留
1)如何保留权力
# umask表示系统保留权力
umask #查看保留权力
umask 权限值 #临时设定系统预留权力
#文件默认权限 = 777-umask-111
#目录默认权限 = 777-umask
#umask值越大系统安全性越高
#umask临时更改
umask 077
#永久更改
vim /etc/bashrc ##shell系统配置文件
74 if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
75 umask 002 #普通用户的umask
76 else
77 umask 022 -- 077 #root用户的umask
78 fi
vim /etc/profile ##系统环境配置文件
59 if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
60 umask 002 #普通用户的umask
61 else
62 umask 022 -- 077 #root用户的umask
63 fi
source /etc/bashrc ##source作用时使我们更改的内容立即被系统识别 source /etc/profile
6.系统中的特殊权限
在 Linux 系统中,常规的文件权限包括读(r)、写(w)和执行(x),分别对应数字 4、2 和 1。通过这些权限的组合,我们可以灵活地控制用户对文件和目录的访问。然而,在某些特定场景下,常规权限无法满足需求,这时就需要借助特殊权限来实现更精细的访问控制。
1)SUID(Set UID)
当一个设置了 SUID 权限的程序被执行时,内核会将进程的有效用户 ID(Effective User ID)临时设置为文件所有者的用户 ID,而实际用户 ID(Real User ID)保持不变。这样,在程序执行期间,该进程就具有了文件所有者的权限。
chmod 4原属性 file
chmod u+s file
实验:
su - lee
/bin/cat
ps ax -o user,group,comm | grep cat lee lee cat
#用root用户身份
chmod u+s /bin/watch
su - lee
/bin/cat
ps ax -o user,group,comm | grep cat root lee cat
注意:
由于 SUID 权限会提升用户的执行权限,不当使用可能会带来安全风险。例如,如果一个恶意程序
被设置了 SUID 权限且可被普通用户执行,那么该程序可能会以文件所有者的权限执行任意恶意操
作。因此,在设置 SUID 权限时,应谨慎考虑必要性和安全性。
2)SGID(Set GID)
对于可执行文件,当设置了 SGID 权限的程序被执行时,进程的有效组 ID(Effective Group ID)会临时被设置为文件所属组的组 ID。对于目录,设置了 SGID 权限后,在该目录下创建的新文件和子目录将自动继承该目录的组,而不是创建者的默认组。
#sgid 强制位
#针对目录: 目录中新建的文件自动归属到目录的所属组中
设定:
chmod 2源文件权限 dir
chmod g+s dir
实验
group testgroup
mkdir /mnt/public
chgrp testgroup /mnt/public
chmod 777 /mnt/public
lee ---> touch /mnt/public/file ##是谁建立的文件组就是谁的 chmod g+s /mnt/timinglee
lee ---> touch /mnt/public/file1 ##file1自动复制了/mnt/public目录组 #只针对二进制的可执行文件(c程序)
#当运行二进制可执行文件时都是用文件拥有组身份运行,和执行用户无关
实验:
su - lee
/bin/cat
watch -n 1 "ps ax -o user,group,comm | grep cat"
lee lee cat
用root用户身份
chmod g+s /bin/cat
su - lee
/bin/cat
ps ax -o user,group,comm | grep cat
lee root cat
注意:
同样,SGID 权限的不当使用也可能导致安全问题。例如,如果一个可执行文件设置了 SGID 权限且被恶意利用,可能会使普通用户获得过高的组权限,从而访问到不应访问的资源。对于共享目录设置 SGID 权限时,要确保组内成员的权限管理得当,避免权限滥用。
3)Sticky Bit
Sticky Bit 权限通过在目录权限上设置一个特殊标志来实现上述功能。它限制了用户对目录中文件的删除和重命名操作,只有满足特定条件的用户才能执行这些操作
#stickyid 粘制位
#针对目录: #如果一个目录stickyid开启,那么这个目录中的文件
#只能被文件所有人删除
chmod 1原始权限 dir
chmod o+t dir 实验:
mkdir /pub
chmod 777 /pub
su - lee ----> touch /pub/leefile
exit
su - timinglee --------> touch /pub/timingleefile
rm -fr /pub/leefile #可以删除
rm -fr /pub/timingleefile #不属于自己的文件也可以删除
如何解决此问题:
chmod 1777 /pub
chmod o+t /pub
以上两条命令都可以开启pub目录的t权限
su - timinglee ----> touch /pub/timingleefile
exit
su - lee --------> touch /pub/leefile
rm -fr /pub/leefile #可以删除
rm -fr /pub/timingleefile #不属于自己的文件不能删除
rm: cannot remove 'timingleefile': Operation not permitted
注意:
在设置 Sticky Bit 权限时,要明确其适用场景,确保目录中的文件安全性。同时,要注意与其他权限的协同工作,避免因权限设置不当而影响正常的文件操作。
三.ACL权限列表
1.ACL简介
ACL(Access Control Lists,访问控制列表)是一种灵活的权限管理机制,用于在 Linux 系统中对文件和目录设置更细致的权限。传统的 Linux 文件权限模型基于所有者(owner)、所属组(group)和其他用户(others)进行权限分配,分别对应读(r)、写(w)、执行(x)权限。然而,这种模型在一些复 杂的场景下显得不够灵活。例如,当需要给特定用户或组超出传统权限模型的权限时,ACL 就派上了用 场。通过 ACL,可以针对单个用户或组设置独立的读、写、执行权限,从而实现更精细的访问控制。
2.ACL权限列表的读取
2.1ACL权限开启标识
#acl列表开启标识
-rw-rw---- 1 root caiwu 0 Apr 18 09:03 lee
^
没有"+"代表acl列表未开启
-rw-rw----+ 1 root caiwu 0 Apr 18 09:03 lee
^
acl列表功能开启
2.2 ACL列表权限读取
getfacl leefile
显示内容分析
# file: leefile #文件名称
# owner: root #文件拥有者
# group: root #文件拥有组
user::rw- #文件拥有者权限
user:lee:rw- #特殊指定用户权限
group::r-- #文件拥有组权限
group:lee:--- #特殊指定的用户组的权限
mask::rw- #能够赋予特殊用户和特殊用户组的最大权限阀值
other::r-- #其他人的权限
注意:
当文件权限列表开启,不要用ls -l 的方式来读取文件的权限
3.acl列表的控制
setfacl -m u:lee:rw leefile #设定
setfacl -m g:westos:rw leefile
setfacl -m u::rwx leefile
setfacl -m g::0 leefile
setfacl -x u:lee leefile ##删除列表中的lee
setfacl -b leefile #关闭
4.acl 权限优先级
拥有者 > 特殊指定用户 > 权限多的组 >权限少的组 > 其他
5.mask阈值
mask是能够赋予指定用户权限的最大阀值
当设定完毕文件的acl列表之后用chmod缩小了文件拥有组的权力 mask会发生变化
恢复:
setfacl -m m:权限 文件
6.acl 列表的默认权限
设置默认 ACL。仅对目录有效,当在该目录下创建新文件或子目录时,新创建的对象将继承该目录的默认 ACL 规则
setfacl -m u:lee:rwx /mnt/westosdir ##只对于/mnt/westosdir目录本身生效
setfacl -Rm u:lee:rwx /mnt/westosdir ##对于/mnt/westosdir目录和目录中已经存在的内容生效
#以上的命令之针对与存在的文件生效,新建文件是不会被设定的
setfacl -m d:u:lee:rwx /mnt/westosdir/ ##针对与/mnt/westosdir目录中新建文件生效
四.attr权限
attr 权限,即文件属性权限,是 Linux 系统中一种对文件或目录赋予额外属性的机制。它能进一步增强对文件访问和操作的控制,提供了比传统 r(读)、w(写)、x(执行)权限更细致的管控维度。这些属性可以限制文件的某些操作,如防止文件被删除、修改,或者使其只能追加写入等
#attr权限限制所有用户
i #不能作任何的更改
a #能添加不能删除
lsattr dir|file ##查看attr权限
chattr +i|+a|-i|-a dir|file ##设定attr权限