Linux特殊权限管理
一、linux文件权限限制
1、普通文件权限限制
1. 创建测试文件# 创建一个名为 test_file 的普通文件,并写入一些内容[ot@centos79-68-99 ~]$echo "This is a test file."> /tmp/test_file2. 查看文件初始权限使用 ls -l 命令查看文件的初始权限信息。[ot@centos79-68-99 ~]$ ll /tmp/test_file -rw-rw-r-- 1 ot ot 21 Mar 24 10:22 /tmp/test_file3. 修改文件权限接下来,我们使用 chmod 命令结合不同的方式来修改文件的权限。3.1 使用符号模式修改权限[ot@centos79-68-99 ~]$ chmod o-r /tmp/test_file再次查看文件权限:[ot@centos79-68-99 ~]$ ls -l /tmp/test_file-rw-rw---- 1 ot ot 21 Mar 24 10:22 /tmp/test_file可以看到,其他用户的读权限已经被移除。给文件所有者添加执行权限[ot@centos79-68-99 ~]$chmod u+x /tmp/test_file再次查看权限:[ot@centos79-68-99 ~]$ ls -l /tmp/test_file-rwxrw---- 1 ot ot 21 Mar 24 10:22 /tmp/test_file此时,文件所有者已经拥有了执行权限。3.2 使用数字模式修改权限将文件权限设置为用户有读、写、执行权限,用户组有读权限,其他用户没有任何权限。[ot@centos79-68-99 ~]$chmod 740 /tmp/test_file[ot@centos79-68-99 ~]$ls -l /tmp/test_file-rwxr----- 1 ot ot 21 Mar 24 10:22 /tmp/test_file4.添加xtt用户和属于ot用户组的xot用户用于测试[root@centos79-68-99 /]# useradd xtt[root@centos79-68-99 /]# id xttuid=22224(xtt)gid=22224(xtt)groups=22224(xtt)[root@centos79-68-99 /]# useradd -g ot xot[root@centos79-68-99 /]# id xotuid=22225(xot)gid=22223(ot)groups=22223(ot)5.测试xtt用户对test_file的读写执行权限[root@centos79-68-99 /]# su - xtt[xtt@centos79-68-99 ~]$ cat /tmp/test_filecat: /tmp/test_file: Permission denied[xtt@centos79-68-99 ~]$ echo "test write permission">> /tmp/test_file-bash: /tmp/test_file: Permission denied[xtt@centos79-68-99 ~]$ /tmp/test_file-bash: /tmp/test_file: Permission denied6.测试xot用户对文件的读写执行权限[root@centos79-68-99 /]# su - xotLast login: Tue Mar 24 10:30:48 CST 2026 on pts/0[xot@centos79-68-99 ~]$ cat /tmp/test_file This is a test file.[xot@centos79-68-99 ~]$ echo "test write permission">> /tmp/test_file-bash: /tmp/test_file: Permission denied[xot@centos79-68-99 ~]$ /tmp/test_file-bash: /tmp/test_file: Permission denied
2、目录文件权限限制
1.查看目录初始权限[xot@centos79-68-99 ~]$ mkdir /tmp/test_dir[xot@centos79-68-99 ~]$ ll -d /tmp/test_dir/drwxr-xr-x 2 xot ot 6 Mar 24 10:37 /tmp/test_dir/
二、linux文件的缺省权限
在 Linux 系统中,当你创建新文件或目录时,它们会被赋予一个默认的权限,也就是缺省权限。这个缺省权限主要由两个因素决定,这两个因素是文件系统的默认设置和 umask 值。#文件系统的默认设置不同的文件系统可能会有不同的默认权限,但一般来说,当你创建文件或目录时,会有一个基础的权限模板。常见的情况如下:文件:通常默认不具备执行权限,因为大多数普通文件不需要被直接执行。一般基础权限为 rw-rw-rw-(即 666)。目录:默认具备读、写和执行权限,因为目录需要能够被列出内容(读权限)、在其中创建或删除文件(写权限)以及进入该目录(执行权限)。一般基础权限为 rwxrwxrwx(即 777)。#umask 值的作用umask 是一个用于屏蔽(移除)默认权限的 4 位十(八)进制数。它的作用是从基础权限中减去相应的权限位,从而得到最终的缺省权限。umask 值的前导数字通常用于设置特殊权限(如 SUID、SGID、Sticky Bit),后三位分别对应文件所有者、用户组和其他用户的权限屏蔽。#umask示例常见的 umask 值为 0022 或 0002。下面分别介绍不同 umask 值下文件和目录的缺省权限计算方法:1. umask 为 0022 的情况文件的基础权限是 666,umask 为 0022。从基础权限中减去 umask 对应的权限,即:文件所有者:6- 0 = 6(rw-)用户组:6- 2 = 4(r--)其他用户:6- 2 = 4(r--)所以,最终文件的缺省权限为 644(rw-r--r--)。目录的基础权限是 777,umask 为 0022。计算如下:文件所有者:7- 0 = 7(rwx)用户组:7- 2 = 5(r-x)其他用户:7- 2 = 5(r-x)所以,最终目录的缺省权限为 755(rwxr-xr-x)。2. umask 为 0002 的情况文件的基础权限 666 减去 umask 0002 后:- 文件所有者:6 - 0 = 6(rw-)- 用户组:6 - 0 = 6(rw-)- 其他用户:6 - 2 = 4(r--)最终文件的缺省权限为**664**(rw-rw-r--)。目录的基础权限 777 减去 umask 0002 后:- 文件所有者:7 - 0 = 7(rwx)- 用户组:7 - 0 = 7(rwx)- 其他用户:7 - 2 = 5(r-x)最终目录的缺省权限为**775**(rwxrwxr-x)。#查看和修改umask值在终端中输入 umask 命令即可查看当前的 umask 值。umask在终端中直接输入新的 umask 值,该修改只对当前终端会话有效。umask 0027永久修改 umask 值:可以编辑用户的 .bashrc 或 .bash_profile 文件,在其中添加 umask 命令。例如:echo"umask 0022">> ~/.bashrcsource ~/.bashrc
三、linux文件的特殊权限
在 Linux 系统里,除了常规的读(r)、写(w)、执行(x)权限外,还有三种特殊权限,分别是 SetUID(SUID)、SetGID(SGID)和 Sticky Bit。
1、SetUid
SetUID 权限仅适用于可执行文件。当一个可执行文件被设置了 SUID 权限后,用户执行该文件时,会以文件所有者的身份来运行。这意味着即便普通用户执行该文件,也能获得文件所有者的权限。如果你对一个文件设置了SetUID特殊权限,那么在该文件拥有人权限的执行位上,若原本是 x 则变为 s;若原本没有执行权限,则显示为 S。例如,权限为`rwsr-xr-x` 表示该文件设置了 SUID 权限。#可以使用find命令来查找具有set uid特殊权限的文件[xot@centos79-68-99 ~]$ find /bin/ -type f -perm-4000-exec ls -l {} \;-rwsr-xr-x. 1 root root 32096 Oct 312018 /bin/fusermount-rws--x--x. 1 root root 23968 Oct12020 /bin/chfn-rws--x--x. 1 root root 23880 Oct12020 /bin/chsh-rwsr-xr-x. 1 root root 73888 Aug92019 /bin/chage-rwsr-xr-x. 1 root root 78408 Aug92019 /bin/gpasswd-rwsr-xr-x. 1 root root 41936 Aug92019 /bin/newgrp-rwsr-xr-x. 1 root root 44264 Oct12020 /bin/mount-rwsr-xr-x. 1 root root 32128 Oct12020 /bin/su-rwsr-xr-x. 1 root root 31984 Oct12020 /bin/umount-rwsr-xr-x. 1 root root 57656 Aug92019 /bin/crontab---s--x--x. 1 root root 147336 Oct12020 /bin/sudo-rwsr-xr-x. 1 root root 23576 Apr12020 /bin/pkexec-rwsr-xr-x. 1 root root 27856 Apr12020 /bin/passwd/usr/bin/passwd 命令就设置了 SUID 权限。普通用户可以使用该命令修改自己的密码,而修改密码需要对 /etc/shadow 文件进行操作,该文件只有 root 用户有写权限。由于 passwd 命令设置了 SUID 权限,普通用户执行时会以 root 用户的身份运行,从而能够修改密码。#查看 passwd 命令的权限[xot@centos79-68-99 ~]$ ls -l /usr/bin/passwd-rwsr-xr-x. 1 root root 27856 Apr12020 /usr/bin/passwd# 设置 SUID 权限chmod u+s executable_file# 取消 SUID 权限chmod u-s executable_file#创建一个查看/etc/shadow的c语言程序然后编译test_uid.c#include#includeint main(){FILE*fp;char ch;// 尝试打开 /etc/shadow 文件fp = fopen("/etc/shadow", "r");if(fp == NULL){perror("Failed to open /etc/shadow");return1;}// 读取文件内容并输出while((ch = fgetc(fp))!= EOF){putchar(ch);}// 关闭文件fclose(fp);return0;}#安装gcc编译器[root@centos79-68-99 ~] # yum -y install gcc#编译c语言代码成为二进制文件[root@centos79-68-99 ~] # gcc -o test_uid test_uid.c#拷贝到gls叫目录[root@centos79-68-99 ~] # cp test_uid ~gls/#执行测试[root@centos79-68-99 ~] $ ./test_uidFailed to open /etc/shadow: Permission denied#增加setuid特殊权限[root@centos79-68-99 ~] # chmod u+s ~gls/test_uid#再次执行测试[root@centos79-68-99 ~] $ ./test_uid
2、SetGid
#特殊权限 SetGID 介绍对于文件:当一个文件被设置了 setgid 权限,任何用户执行这个文件时,该进程的有效组 ID(EGID)会被设置为文件所有者的组 ID,而不是执行该文件的用户所在的组 ID。这意味着该进程在运行时会拥有文件所有者所在组的权限。对于目录:当一个目录被设置了 setgid 权限,在这个目录下创建的新文件和子目录的组所有者会继承该目录的组所有者,而不是创建者的默认组。#查找带特殊权限 SetGID 的文件[root@centos79-68-99 ~] # find /-type f -perm -2000 -exec ls -ld {} ;[root@centos79-68-99 ~] # find /-type d -perm -2000 -exec ls -ld {} ;#设置 setgid 权限数字方式:使用 chmod 命令结合数字 2000 来设置 setgid 权限。例如,要为文件 myfile 设置 setgid 权限,可以使用以下命令:chmod 2000 myfile符号方式:使用 chmod 命令结合符号 g+s 来设置 setgid 权限。例如:chmod g+s myfile
3、Sticky BIT
#特殊权限sticky bit介绍针对目录:当一个目录被设置了 sticky bit 权限时,只有文件的所有者、目录的所有者或者具有超级用户权限的用户才能够删除或重命名该目录下的文件。即便其他用户对这个目录拥有写和执行权限,也无法删除或重命名不属于他们的文件。这一特性在公共目录(如 /tmp)中十分有用,因为多个用户都可以在这个目录下创建文件,但他们不能随意删除或修改其他用户的文件。#查找带有sticky bit特殊权限的文件[root@centos79-68-81 etc]# find / -type d -perm-1000-exec ls -ld {} \;drwxrwxrwt 2 root root 40 Mar 20 16:53 /dev/mqueuedrwxrwxrwt 2 root root 40 Mar 20 16:53 /dev/shmdrwxrwxrwt. 3 root root 85 Mar 20 17:23 /var/tmpdrwxrwxrwt 2 root root 6 Mar 20 16:53 /var/tmp/systemd-private-fe85e597c6694b54929b60263ac7152b-chronyd.service-Dcf7Pp/tmpdrwxrwxrwt 2 root root 6 Mar 20 17:21 /var/VRTSat_lhcdrwxrwxrwt. 12 root root 4096 Mar 24 03:16 /tmpdrwxrwxrwt. 2 root root 6 Mar 20 16:51 /tmp/.X11-unixdrwxrwxrwt. 2 root root 6 Mar 20 16:51 /tmp/.font-unixdrwxrwxrwt. 2 root root 6 Mar 20 16:51 /tmp/.ICE-unixdrwxrwxrwt. 2 root root 6 Mar 20 16:51 /tmp/.XIM-unixdrwxrwxrwt. 2 root root 6 Mar 20 16:51 /tmp/.Test-unixdrwxrwxrwt 2 root root 6 Mar 20 16:53 /tmp/systemd-private-fe85e597c6694b54929b60263ac7152b-chronyd.service-kzz2q2/tmp#设置 sticky bit 权限数字方式:运用 chmod 命令搭配数字 1000 来设置 sticky bit 权限。例如,要为目录 mydir 设置 sticky bit 权限,可使用以下命令:chmod 1000 mydir符号方式:使用 chmod 命令搭配符号 o+t 来设置 sticky bit 权限。例如:chmod o+t mydir#取消 sticky bit 权限数字方式:使用 chmod 命令搭配数字 0000 来取消 sticky bit 权限。例如:chmod 0000 mydir符号方式:使用 chmod 命令搭配符号 o-t 来取消 sticky bit 权限。例如:chmod o-t mydir
四、设置linux文件属性
chattr 命令用于改变文件或目录的特殊属性,这些属性在常规的 chmod、chown 等命令设置的权限之外,提供了更高级的文件保护机制。 #常见属性 1.不可变属性i 为文件或目录添加不可变属性后,该文件或目录不能被删除、重命名、修改内容,也不能创建新的文件或子目录,即使是 root 用户也无法进行这些操作。 chattr +i test.txt # 为文件 test.txt 添加不可变属性 chattr-i test.txt # 移除文件 test.txt 的不可变属性 2.只添加属性a 文件被设置该属性后,只能在文件末尾追加内容,不能删除或修改已有内容,也不能重命名或删除文件。常用于日志文件,确保日志数据只能不断追加。 chattr +a access.log # 为日志文件 access.log 添加只添加属性 chattr-a access.log # 移除文件 access.log 的只添加属性 https://en.wikipedia.org/wiki/Chattr #使用 lsattr 命令可以查看文件或目录的特殊属性 lsattr test.txt
五、RBAC
#认证和授权介绍 当今时代的软件,认证(Authentication)功能已经成为了最重要的功能之一。 权限和用户是分不开的,我们在给文件设置权限的时候都是和用户相关联的,这里就引申出另外一个概念,授权(Authorization)。 认证和授权是当今软件最重要的两个功能,认证用于用户登录软件系统,授权用于登录软件系统后登录用户会被授予哪种权限。现在几乎任何的流行软件系统都支持认证和授权功能,甚至有些软件如果你不注册账号并认证登录你连基本的功能都无法使用。 #MAC,DAC,RBAC,ABAC等访问控制概念 1.DAC自主访问控制 自主访问控制模型(Discretionary Access Control,DAC)是一种基于主体(如用户、进程)和客体(如文件、目录、资产)之间关系来控制访问的权限控制模型。在DAC中,主体可以自主控制访问对象的权限,即主体拥有对对象的完全控制权,可以自由授权和收回对对象的访问权限。

2.MAC强制访问控制 强制访问控制(Mandatory Access Control),在MAC模型里,授权不是由每个用户来掌控的。授权的决定是由系统管理员来定制的。这样,管理员可以更好地控制用户的访问权限。同时,也有效地避免了用户通过其他手段来绕过访问控制系统的限制,确保了系统的强制性。
##RBAC(Role-Based Access Control)模型-软件系统中最常规的认证和授权实现方法 上面两个模型似乎都太过于极端,一个极端的自由,一个极端的约束。所以,程序员经典的一句话就是“遇事不决,再加一层”。RBAC的关键就是在MAC的基础上,主体与资源操作权限中增加了一层角色进行权限控制。 这样系统管理员,或者说是安全员要管理的逻辑就轻松多了。不需要对每位用户细分到每一条具体的权限,只需要分配一个角色(权限组)就可以了。 RBAC增加了“角色”的概念,我们首先把权限赋予角色,再把角色赋予用户。这样,由于增加了角色,授权会更加灵活方便。 RBAC把权限体系抽象成三个实体:用户、角色、资源(权限的抽象)。三个实体之间的关系如下:

也就是说,角色实际上是人与资源之间的中间桥梁,人可以通过拥有某个角色来获得该角色下的所有权限。 如下图,如果按传统权限模型,给每一个用户赋予权限则会非常麻烦,并且做不到批量修改用户权限。这时候,可以抽象出几个角色,譬如普通员工、财务、采购等,然后把权限分配给这些角色,再把角色赋予用户。这样无论是分配权限还是以后的修改权限,只需要修改用户和角色的关系,或角色和权限的关系即可,更加灵活方便。此外,如果一个用户有多个角色,譬如王先生既负责财务和采购,那么可以给王先生赋予两个角色,即财务角色+采购角色,这样他就拥有这两个角色的所有权限。 当用户的工作内容发生变化时,如上图林总职务变更(从采购总监变更为财务总监),只需要重新绑定用户关联的角色,而不用一一删除该用户的权限再添加权限。

#RBAC种类 RBAC是如今非常流行的一种权限控制模型,因此也分为了0-3四种。 1.RBAC0(基本模型) 是RBAC模型的基础,定义了用户、角色和权限之间的基本关系。用户被分配到不同的角色,角色被授予不同的权限。通过角色这一中间层,实现了用户和权限的解耦。

2.RBAC1(角色层次模型) 在 RBAC0 的基础上引入了角色层次关系,即角色可以有上下级之分。上级角色可以继承下级角色的权限,使得权限管理更加灵活。例如,“高级管理员”角色可以继承“普通管理员”角色的所有权限,并拥有额外的权限。

3.RBAC2(约束模型) 在 RBAC0 的基础上增加了一些约束条件,以增强系统的安全性。常见的约束包括互斥角色(如一个用户不能同时担任“审计员”和“财务管理员”角色)、基数约束(限制一个角色的最大用户数量或一个用户可担任的最大角色数量)等。 4.RBAC3(统一模型) 融合了 RBAC1 和 RBAC2 的特点,既包含角色层次关系,又包含各种约束条件,是最完整的 RBAC 模型。
#RBAC应用场景 1.企业信息系统 在企业的各种信息系统中,如企业资源规划(ERP)系统、客户关系管理(CRM)系统等,RBAC 可以用于管理员工对系统资源的访问权限,确保员工只能访问与其工作职责相关的信息和功能。 2.操作系统 现代操作系统如 Linux、Windows 等都支持 RBAC 模型,用于管理用户对系统文件、目录、设备等资源的访问权限。 3.网络设备 在网络设备如路由器、交换机等中,RBAC 可以用于管理管理员对设备配置和操作的权限,确保只有授权的管理员才能进行特定的操作。 #RBAC实现步骤 1.定义角色 根据组织的业务需求和组织结构,定义不同的角色,如管理员、普通用户、审计员等。 2.定义权限 明确系统中各种资源和操作,并为每种操作定义相应的权限。 3.分配权限给角色 将权限授予不同的角色,使得每个角色拥有完成其工作所需的权限。 4.分配角色给用户 根据用户的工作职责和身份,将合适的角色分配给用户。 5.实施访问控制 在系统中实现基于角色的访问控制机制,确保用户只能通过其分配的角色访问相应的资源和执行相应的操作。 #案例 腾讯会员、超级会员和注册用户可以访问不同资源,这种方式是一种比较经典的 RBAC(基于角色的访问控制)模式的应用,以下是具体分析: 角色定义:在这种场景中,腾讯视频将用户分为不同的角色,如注册用户、会员、超级会员。每个角色代表了一组特定的权限和访问级别。 权限分配:不同的角色被赋予不同的权限,以访问特定的资源。例如,注册用户可能只能访问部分免费内容;会员则可以观看更多的付费视频,但可能会有一些限制;超级会员则拥有更高级的权限,如可以观看更多独家内容、享受更高清的画质、拥有更多的观影特权等。通过这种方式,腾讯视频可以根据用户的角色来控制他们对不同资源的访问,从而实现了基于角色的访问控制。 灵活性和可管理性:RBAC 模式使得权限管理更加灵活和可管理。腾讯视频可以轻松地添加新的角色或修改现有角色的权限,以适应不同的业务需求和用户群体。例如,他们可以推出新的会员等级,或者为特定活动临时调整某些角色的权限。 这种 RBAC 模式在视频平台等众多互联网应用中广泛应用,能够有效地管理用户对不同资源的访问,提供差异化的服务,同时也方便了平台对权限的管理和维护。
#基于属性的访问控制(ABAC attribute based access control) 你可以将ABAC简单理解为更加细粒度的RBAC模型,ABAC模型通常是基于用户的属性(如身份、地点、时间等)和资源属性(如文件类型、敏感度等)进行判断的。你甚至可以把角色理解为该用户的一个属性,这些模型之间本身就不是互斥的,最终还是为了方便管理权限而来,所以灵活使用即可。 值得注意的是,ABAC模型一般是基于已有的一些属性来进行的权限划分,而RBAC模型则是在人为重新设置了几个角色来管理权限。 学校通知:在学校,通知的发布需要基于课程、年级或批次,让只有那些有资格看到通知的学生可以看到。 小区管理:物业管理人员可能需要基于住户身份、房屋所有权、访问时间等来管理小区门禁。 男女厕所:男生进男厕所,女生进女厕所。