Linux 特殊权限a,i,t,s以及查找带有特殊权限的所有文件
前言:
linux的权限系统是一个比较复杂的系统,那么为什么会复杂呢?因为,Linux的文件系统是使用了很多的元素的:用户,组,读权限,写权限,执行权限,这五个基本元素之间的非常多的排列组合组成了一个可靠的(复杂的)权限系统。
例如我们查看一个文件,ls -al它的所有权限和属组:
[root@node3 ~]# ls -al admin.conf
-rw------- 1 root root 5643 Nov 3 11:26 admin.conf
输出可以分隔为如下(以|为分隔符);
- |rw- | --- | --- | 1 | root |root |5643 |Nov 3 11:26 |admin.conf
- 第一部分:文件类型,-表示普通文件,如果是文件夹,此处会是d,如果是链接文件,此处会是l
- 第二部分:用户权限---可读可写不可执行(三种基本权限r是读,w是写,x是执行)-代表没有权限,这一组权限通常用字母u表示,user的简写,以上面的文件为例,给它增加用户执行权限:
chmod u+x admin.conf
再次查询它的权限:
[root@node3 ~]# ls -al admin.conf
-rwx------ 1 root root 5645 Nov 11 16:22 admin.conf
- 第三部分:组权限---- -代表没有权限,因此,任何组都无读写执行的权限。这一组权限通常用字母g表示,group的简写,以上面的文件为例,给它增加组执行权限:
[root@node3 ~]# chmod g+x admin.conf
[root@node3 ~]# ls -al admin.conf
-rwx--x--- 1 root root 5645 Nov 11 16:22 admin.conf
- 第四部分:其它用户和组的权限---- -代表没有权限,因此,其它的任何用户和组都没有读写执行权限,这里的其它相对的是六七,也就是属组,这一组权限通常用字母o表示,other 的简写,例子和上面一样就不举例了,需要注意的是,ugo这三个是可以合并起来使用的,比如,用户和其它用户增加写权限:
[root@node3 ~]# chmod uo+w admin.conf
[root@node3 ~]# ls -al admin.conf
-rwx--x-w- 1 root root 5645 Nov 11 16:22 admin.conf
- 第五部分:链接次数---此文件的软硬链接, 这里是1,表示没有任何链接文件
- 第六部分:归属用户---- 这里是归属于root用户
- 第七部分:归属组---- 这里是归属于root组
- 第八部分:文件的字节数--- 这里是5643个字节大小
- 第九部分:文件的创立时间----这里是11月3号 11点26创建的
- 第十部分: 文件的名称---- 这里是admin.conf
那么,以上这个admin.conf 文件的实际意义是:此文件仅仅能够由root用户读取和修改,不可以执行。
【1】
用户
在linux系统中,用户分为两种,一种是超级用户,一种是普通用户。
- root用户:
也就是大家熟知的root用户,此用户是内核层面的,也就是说内核里定义的。此用户的权限在linux系统内是最高的,地位等同于上帝,除了极少数的操作root不可以执行,基本所有的操作都可以执行,相对于Linux系统,可以用这些词形容root用户:生杀予夺,权倾天下,九五之尊,绝对主宰等等等等此类的词。因此,在crack夸耀战果的时候会说拿下了某个主机的root密码,这个就标志着整个主机的控制权在手了。root用户区别于其它用户的最大特点:此用户无法删除,用户ID为0。
- 普通用户:
那么,另一种用户就是普通用户了,相对于linux系统,可以用这些词形容普通用户:芸芸众生,普罗大众等等。当然了,有同学会说,这不对,使用linux的时候,人家给了一个普通用户,所有任务我都可以利用此用户完成,这个普通用户不普通。OK,其实这个特殊一点的普通用户只是由root用户给了某些特别权限而已,等于是某些普通人拿着尚方宝剑而已,仅此而已,普通用户是可以删除的这一点不会改变。
【2】
组
用户的集合,和用户一样分为两种,组的意义是扩展用户,例如,A用户,B用户,C用户同属一个D组,那么,可以方便快速的设置D组的权限,ABC就同时拥有一个统一的权限了
- 一个是超级组---wheel组 和root组,超级组wheel内的用户可以在su或者sudo的时候不需要校验任何密码就获得较高的权限,仅此而已。
- 一种是普通组,除wheel和root组以外的组称之为普通组。
【3】
- 读权限:指的是利用 cat ,less, more, head, tail, vi, vim等等读取文件的命令显示文件的内容
- 写权限:指的是利用vi ,vim以及cat +重定向符 等等命令编辑器修改文件内容。
- 执行权限:bash命令或者c命令Java命令等等程序读取并执行文件内的内容。
- 特殊权限:a,i,s,t 四种特殊权限,是上面三种普通权限 读写执行 的扩展,以应对一些比较特殊的情景。
以上是关于linux权限系统的一些简单介绍,下面着重讲解特殊权限的赋予,取消,应用场景以及如何查询出系统内所有包含特殊权限的文件的方法。
一,
特殊权限 a,i
按照在实际的工作中的使用率来,我想 a i t这三个是十分高的,尤其是a和i,a和i是文本文件专有的特殊权限,可以这么说,人在三界中,它在五行外,特殊在它们的设置都是专用命令chattr命令,而不是chmod这个一般的修改文件权限的命令。当然,t(包括大t)s(包括大s),仍然是使用chmod这个命令来设置,切记,切记!!!!
- 属性 a 是表示该文件只可append,也就是只可追加补充文本内容,不可覆盖或者删除内容。这一个功能无疑是文件保护的利器(当然了,重要日志文件的利器,别理解错了)。
- 属性 i 是表示该文件(文件夹)冻结了,不可移动(mv命令对此权限无能为力),不可修改,不可追加,(因为不可移动所以)不可删除,但可复制(cp命令对此权限生效)。(类似冰封了,但有一线生机---复制),所以复制是这个特殊权限的弱点哦。
对于a和i这两个属性,通常同时使用,保护重要的日志记录以及重要的脚本,二进制文件,防止恶意的破坏。但是,终究人力有限,删除时会报错 无权限删除,因此,还是可以发现特殊属性的蛛丝马迹哦。(题外话,没有绝对的安全,只有相对的安全,对数据保持一颗敬畏的心吧!!!!!!!!!)
给test这个文件同时附加a i这两个特殊属性,添加命令为 chattr +权限 文件名,查看特殊属性为lsattr 文件名。(attribute的缩写为attr表示)。
当移动带有这两个特殊属性的文件时,会报错,无权限操作。
修改这个文件或者添加内容到这个文件时,会报错,只读模式文件,无法写入,请不保存退出。
可以复制这个文件,复制后的副本文件没有特殊属性,可以任意修改,移动删除,即使复制的时候使用 了a参数、(cp -a是保留权限属性,但特殊属性并不会保留。)
以上是关于特殊属性 a i 对于文件的设置,那么,文件夹会有一点特别,文件夹不会显示特殊权限,但会受到特殊权限的影响,比如,下面我建立一个test文件夹,并给这个文件夹赋予 i 这个特殊权限,将不能在此文件夹内创建任何文件。
[root@node3 ~]# mkdir test && chattr +i test && cd test/
[root@node3 test]# touch suibian
touch: setting times of ‘suibian’: No such file or directory
查看不到文件夹的特殊权限 i
[root@node3 test]# ls -al ../test/
total 4
drwxr-xr-x 2 root root 6 Nov 11 17:05 .
dr-xr-x---. 10 root root 4096 Nov 11 17:05 ..
[root@node3 test]# lsattr ../test/
解除特殊权限 a i的方法:
- 1,复制,前面已经提到了
- 2,chattr -ai 文件夹(文件)
特殊权限 a i 的应用场景:
保护重要的日志文件,例如MySQL集群的binlog日志,此时可以给这些日志赋予 a 和 i 特殊权限,既不影响binlog日志的生成还可以防止误操作删除。
保护重要的配置文件,例如,某个服务的基本不会在修改的固定的配置文件,可以防止配置文件的误修改,而文件在修改前没有备份。
二,
特殊权限 SetUID,简称SUID特殊权限。
- SUID特殊权限仅适用于可执行文件,且需要可执行文件本身有x权限。
- 所具有的功能是,所有用户对设有SUID的文件有执行权限
- 当用户执行文件时,会以文件所有者的身份去执行文件
- 一旦程序执行结束,身份的切换也随之消失
- SUID位的可执行文件被执行时,该文件将以所有者的身份运行,也就是说无论谁来执行这个文件,他都有文件所有者的特权如果所有者是root,那么执行人就有超级用户的特权,这时该位就成为了一个安全漏洞,因此不要轻易设置该特殊权限。
例如,必须以root身份才可以运行的useradd命令,passwd命令,这里就以useradd命令为例,使得普通用户可以执行useradd命令:
[root@node3 ~]# whereis useradd
useradd: /usr/sbin/useradd /usr/share/man/man8/useradd.8.gz
[root@node3 ~]# ls -al /usr/sbin/useradd
-rwxrwx---. 1 root root 118192 Nov 6 2016 /usr/sbin/useradd
可以看到useradd命令普通用户没有执行权限,因此,添加普通用户的执行权限,添加普通用户的执行权限后,仍然不能正常添加用户:
[root@node3 ~]# chmod o+x /usr/sbin/useradd
[root@node3 ~]# su - zsk
Last login: Fri Nov 11 18:50:19 CST 2022 on pts/0
[zsk@node3 ~]$ useradd zsk2
useradd: Permission denied.
useradd: cannot lock /etc/passwd; try again later.
添加了特殊权限SetUID后,普通用户(注意,是所有的普通用户,包括后面新建的用户)可以添加用户了,达到了预期目标:
[root@node3 ~]# chmod u+s /usr/sbin/useradd
[root@node3 ~]# su - zsk
Last login: Fri Nov 11 19:09:27 CST 2022 on pts/0
[zsk@node3 ~]$ useradd zsk2
[zsk@node3 ~]$ id zsk2
uid=1004(zsk2) gid=1004(zsk2) groups=1004(zsk2)
以passwd 这个修改用户密码的命令和自建用户zsk为例,演示当passwd命令权限带s和S的不同使用情况。
[root@centos7 ~]# ls -al /usr/bin/passwd
-rwsr-xr-x 1 root root 27856 Apr 1 2020 /usr/bin/passwd#这个时候是小s
[root@centos7 ~]# chmod -x !$
chmod -x /usr/bin/passwd#改成大s了
[root@centos7 ~]# ls -al /usr/bin/passwd
-rwSr--r-- 1 root root 27856 Apr 1 2020 /usr/bin/passwd
[zsk@centos7 ~]$ passwd
-bash: /bin/passwd: Permission denied
切换成zsk用户后无法执行passwd命令了,说明大s并没有效力。
特殊权限 SetGID,简称SGID特殊权限
- sgid主要用于文件夹,为某个目录设置sgid之后,在该目录中的创建的文件,都以(目录的属组)权限为准,而不属于创建该文件的用户权限,这就实现了多个用户,可以共享一个目录的作用。
- s属性的增减一般为 chmod u+s 文件名 chmod g+s文件名
对文件来说
-
sgid只对二进制命令生效,且需要二进制命令本身有x权限。
-
执行包含sgid权限的二进制命令时,会获得该命令在执行期间所属的组的身份与权限。
对文件夹来说
-
linux中所有的用户,默认创建的文件,文件夹,属主和属组都是用户自身。
-
设置了sgid的目录,会保证在这个目录下创建的文件、文件夹都保持同样的权限属性,都属于该目录的属组权限。
建立一个文件夹,名称为test,路径为/opt/test:
[root@node3 ~]# mkdir /opt/test
[root@node3 ~]# ls -al /opt/test
total 0
drwxr-xr-x 2 root root 6 Nov 11 19:24 .
drwxr-xr-x. 7 root root 87 Nov 11 19:24 ..
以上表示/opt/test目录没有写权限,因此,给该目录增加了写权限,此时普通用户可以在此目录下写入文件,并且此文件的属组自动继承了test的属组。
[root@node3 ~]# chmod g+s /opt/test
[root@node3 ~]# su - zsk
Last login: Fri Nov 11 19:11:18 CST 2022 on pts/0
[zsk@node3 ~]$ touch /opt/test/zsk
touch: cannot touch ‘/opt/test/zsk’: Permission denied
[zsk@node3 ~]$
[zsk@node3 ~]$ logout
[root@node3 ~]# chmod o+w /opt/test/
[root@node3 ~]# su - zsk
Last login: Fri Nov 11 19:26:09 CST 2022 on pts/0
[zsk@node3 ~]$ touch /opt/test/zsk
[zsk@node3 ~]$ ls -al /opt/test/zsk
-rw-rw-r-- 1 zsk root 0 Nov 11 19:27 /opt/test/zsk
小结:
文件属主和组设置SUID和GUID,文件在被设置了s权限后将以root身份执行。在设置s权限时文件属主、属组必须先设置相应的x权限,否则s权限并不能真正生效(c h m o d命令不进行必要的完整性检查,即使不设置x权限就设置s权限,chmod也不会报错,只是当我们ls -l时看到的是 rwS,大写S说明s权限未生效)。特别需要注意,SUID作用对象只是二进制可执行文件,SGID作用对象可以是文件夹也可以是文件。
特别说明,s属性我认为是和windows右键管理员运行该程序一样的功能,实现。简单记忆就是Windows的右键管理员运行。
特殊权限 t
黏滞位,又称黏着位,也称之为SBIT
t和T是针对文件夹的,表明这个文件夹和其内的文件是属主的,同样的,大t仅仅表明设置了t属性,但并不生效。t的位置是在other内,
因此,设置 t属性的命令为 chmod o+t 文件夹。
t属性针对的是多用户文件管理,使得动态的用户属主生效。
下面这个例子就比较详细的解释了SBIT,先新建一个文件夹,此文件夹/opt/test下普通用户zsk2新建一个文件,这个文件的属组和属主是zsk2,切换到普通用户zsk4,同样新建一个文件,这个文件的属组和属主是zsk4,此时,设置了SBIT,这个时候,zsk4删除不了zsk2的文件,同样,zsk2删除不了zsk4的文件。
去除SBIT后,zsk4可以删除zsk2的文件了。
[root@node3 ~]# mkdir /opt/test
[root@node3 ~]# chmod o+wt /opt/test/
[root@node3 ~]# su - zsk2
Last login: Fri Nov 11 19:50:10 CST 2022 on pts/0
[zsk2@node3 ~]$ touch /opt/test/zsk2
[zsk2@node3 ~]$ ls -al /opt/test/zsk2
-rw-rw-r-- 1 zsk2 zsk2 0 Nov 11 19:51 /opt/test/zsk2
[zsk2@node3 ~]$ logout
[root@node3 ~]# su - zsk4
[zsk4@node3 ~]$ touch /opt/test/zsk4
[zsk4@node3 ~]$ rm -rf /opt/test/zsk2
rm: cannot remove ‘/opt/test/zsk2’: Operation not permitted
[zsk4@node3 ~]$ ls -al /opt/test/zsk4
-rw-rw-r-- 1 zsk4 zsk4 0 Nov 11 19:52 /opt/test/zsk4
[root@node3 ~]# chmod o-t /opt/test/
[root@node3 ~]# su - zsk4
Last login: Fri Nov 11 19:52:09 CST 2022 on pts/0
[zsk4@node3 ~]$ rm -rf /opt/test/zsk
zsk2 zsk4
t属性多见于samba,ftp这样的多用户服务中配合管理多用户,以及Linux中一个比较特殊的文件夹,tmp文件夹。
大T的生成就不说了,下面只是演示一下产生过程,o-x即可变为大T:
[root@node3 ~]# ls -al /opt/
total 8
drwxr-xr-x. 7 root root 87 Nov 11 19:49 .
dr-xr-xr-x. 17 root root 244 Nov 3 11:15 ..
drwxr-xr-x. 3 root root 17 Nov 2 19:26 cni
-rw-------. 1 root root 5503 Nov 3 19:47 config
drwx--x--x. 4 root root 28 Nov 2 16:59 containerd
drwxrwxrwx 3 mssql mssql 18 Nov 7 16:10 mssql
drwxr-xr-x 4 root root 30 Nov 6 01:43 mysql
drwxr-xrwt 2 root root 18 Nov 11 19:59 test
[root@node3 ~]# chmod o-x /opt/test/
[root@node3 ~]# ls -al /opt/
total 8
drwxr-xr-x. 7 root root 87 Nov 11 19:49 .
dr-xr-xr-x. 17 root root 244 Nov 3 11:15 ..
drwxr-xr-x. 3 root root 17 Nov 2 19:26 cni
-rw-------. 1 root root 5503 Nov 3 19:47 config
drwx--x--x. 4 root root 28 Nov 2 16:59 containerd
drwxrwxrwx 3 mssql mssql 18 Nov 7 16:10 mssql
drwxr-xr-x 4 root root 30 Nov 6 01:43 mysql
drwxr-xrwT 2 root root 18 Nov 11 19:59 test
三,
查找具有特殊权限的文件和文件夹:
所有具有SUID和SGID特殊权限的文件和文件夹
find / -type f -perm -04000 -o -perm -02000
输出如下:
[root@node3 ~]# find / -type f -perm -04000 -o -perm -02000
find: ‘/proc/7802/task/7329’: No such file or directory
find: ‘/proc/7802/task/8690’: No such file or directory
find: ‘/proc/8861/task/8861/fd/6’: No such file or directory
find: ‘/proc/8861/task/8861/fdinfo/6’: No such file or directory
find: ‘/proc/8861/fd/5’: No such file or directory
find: ‘/proc/8861/fdinfo/5’: No such file or directory
/run/log/journal
/run/log/journal/a2f678c0809244ad9beb9e89abb092fd
/root/passwd
略略略