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
略略略

Linux 特殊权限a,i,t,s以及查找带有特殊权限的所有文件(修订版---2022-11-11)相关推荐

  1. linux下find查找带有指定权限的文件(windows下编译的源代码文件)

    find -type f -perm -o=x 查找用户在windows下编译的源代码文件 转载于:https://blog.51cto.com/axlrose/1357610

  2. linux提升权限命令提示符,win10如何直接使用命令提示符提高管理员权限?

    原标题:win10如何直接使用命令提示符提高管理员权限? 在使用普通的命令提示符时,如果遇到需要管理员权限的操作,往往需要重新打开一个具有管理员权限的命令提示符页面进行操作. 而在Linux操作系统中 ...

  3. linux----------今天又遇到一个奇葩的问题,就是linux文件的权限已经是777了但是还是没有写入权限,按照下面的命令就解决了

    linux----------今天又遇到一个奇葩的问题,就是linux文件的权限已经是777了但是还是没有写入权限,按照下面的命令就解决了 参考文章: (1)linux----------今天又遇到一 ...

  4. Windows、Linux 纷纷被爆漏洞,黑客可直取 root 权限!

    整理 | 苏宓 出品 | CSDN(ID:CSDNnews) 无论是开源还是闭源,没有绝对安全的操作系统. 一夕间,多款操作系统被爆存在安全漏洞,其中包括开发者最为常用的 Windows 和 Linu ...

  5. linux配置SVN,添加用户,配置用户组的各个权限教程

    前言 今天组长要我给新员工添加svn 的权限,以及赋予他们权限访问指定的目录,于是就顺手写个教程吧,毕竟好记性不如烂笔头 一.xshell登陆服务器 用xshell登陆服务器,cd切换到服务器中svn ...

  6. linux文件的权限已经是777了但是还是没有写入权限

    linux----------今天又遇到一个奇葩的问题,就是linux文件的权限已经是777了但是还是没有写入权限,按照下面的命令就解决了 查看SELinux状态: 1./usr/sbin/sesta ...

  7. linux 666权限,linux主机555、644、666、755、777权限详解

    linux主机555.644.666.755.777权限详解 发表时间:2014-06-03 05:07 来源:未知 分类:其它代码 作者:岑溪网站开发 点击:次 linux主机555.644.666 ...

  8. linux如何进入su超级用户,Linux下普通用户用sudo su给自己加root权限的方法

    首先: sudo这个命令就是给后面的命令加上root权限(sudo=superuser do),su这个命令是switch user,切换用户,你sudo su这个命令的意思是用root的权限来切换到 ...

  9. Linux下,文件权限UGO,ls -l命令的详细查看内容,修改文件文件夹属主属组的命令

    Linux下,用户权限UGO 注意: 1.Linux中的对象都有基本权限UGO,ugo分别表示user,group,other, 2.这里的对象是对文件和文件夹的简写,不是编程语言中的对象概念. 一. ...

最新文章

  1. Nature Protocols | 密歇根州立大学何胜阳/Tiedje团队建立拟南芥微生物组研究的标准化生长体系!...
  2. JAVA生产环境验证_Java生产环境下性能监控与调优详解
  3. python-if条件判断与while/for循环
  4. 微信终于给我抛橄榄枝了,关于面试我又有话说
  5. express html页面,Express使用html模板
  6. python设计模式六大原则_学习设计模式 - 六大基本原则之迪米特法则(示例代码)...
  7. 23、jQuery九类选择器/jQuery常用Method-API/jQuery常用Event-API
  8. list集合排序_Java面试第七部分 Java的集合
  9. zzzkkk666用户名密码
  10. dragonfly数据库
  11. removeclass 传入两个类_jQuery源码解读之removeClass()方法分析
  12. node.js清除缓存命令
  13. 初中数学分几个模块_初中数学分成三大模块
  14. C#窗体Click事件没反应
  15. 跟偶一起做:击退眼睛疲劳的五大运动
  16. 利用OGR处理几何要素
  17. 基于FPGA的自动小车控制设计Verilog开发
  18. win7万能声卡驱动_win7的早期版本下安装驱动失败
  19. Google Chrome无法访问网站的原因与解决办法
  20. springboot购物商城

热门文章

  1. 还记得刚毕业那会的少年模样吗,肖遥与大家分享
  2. U3D_Maze开发手记
  3. Shopify开店建站营销推广卖家平台后台中文指南 – Test orders / 测试订单
  4. 系统分析与设计 选课系统
  5. linux命令行下写for语句,Linux命令行 – 流程控制:for 循环
  6. 福彩3d开奖结果接口文档及示例分享
  7. js时间戳转化为时间
  8. VS中使用QT进行中英文翻译
  9. java nio attachment_7. 彤哥说netty系列之Java NIO核心组件之Selector
  10. 动态视频流切换的处理策略