热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux权限管理_文件特殊权限SetUID、SetGID和StickyBIT学习总结(四)

Linux文件特殊权限SetUID、SetGID和StickyBIT学习总结一、前言:前面用了三篇文章总结Linux基本权限、umask默认权限、ACL权限和sud

Linux 文件特殊权限SetUID、SetGID和Sticky BIT 学习总结


一、前言:

        前面用了三篇文章总结Linux基本权限、umask默认权限、ACL权限和sudo授权,由于自身认知的关系,虽不尽全部,但也足够详细,记录下来所学到的一点一点,希望对看到本文的朋友有所帮助。

        本篇总结Linux权限管理中的文件特殊权限 SUID、SGID和Sticky BIT。


二、文件特殊权限 SetUID、SetGID和Sticky BIT


2.1 SetUID(SUID)

2.1.1 SetUID是什么


  • SetUID功能理解:
    • 必须是可执行的二进制程序,通俗来讲就是命令;
    • 命令执行者对该程序具有执行权限(x);
    • 命令执行者在执行命令期间,身份变成所属者身份;
    • SetUID只在程序执行过程中有效,程序执行结束即失效。

2.1.2 举例:普通用户 test 修改自身密码


  • 查看用户文件 /etc/passwd /etc/shadow 权限 

[root@localhost ~]# ll /etc/passwd
-rw-r--r--. 1 root root 1496 5月 1 12:52 /etc/passwd
[root@localhost ~]# ll /etc/shadow
----------. 1 root root 1190 5月 1 12:53 /etc/shadow默认情况,普通用户对两个文件只有读权限,不能修改文件

  •  分别查看root用户和test用户  /usr/sbin/passwd 命令权限

[root@localhost ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 11月 24 2015 /usr/bin/passwd
[root@localhost ~]# su - test
[test@localhost ~]$ ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 11月 24 2015 /usr/bin/passwd普通用户test对于passwd命令是有执行权限(x)的,所以可以修改密码

  •  test 用户 修改自己的密码 

[test@localhost ~]$ passwd
更改用户 test 的密码 。
为 test 更改 STRESS 密码。
(当前)UNIX 密码:
新的 密码:
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新。我们看到,密码修改成功。

  •  我们来看看这个修改密码的过程都经历了什么
    • test用户对 /usr/bin/passwd 命令拥有执行权限(x);
    • /usr/bin/passwd 命令所属者执行权限为 “s”,说明具有SetUID权限。
    • test 用户化身为 /usr/bin/passwd 命令的拥有者 root;
    • root 是管理员,拥有最大权限,所以能够更改 /etc/shadow 文件;
    • 修改完之后,所有者收回权限。

2.1.3 赋予SetUID 


  • 赋予格式:chmod u[+-]s 命令绝对路径
    • 参数
      • + :增加SetUID权限
      •  - :删除SetUID权限


  • 举例:给 /usr/bin/vim 设置SetUID权限,并删除相应权限

[root@localhost ~]# ll /usr/bin/vim
-rwxr-xr-x. 1 root root 2324712 7月 24 2015 /usr/bin/vim
[root@localhost ~]# chmod u+s /usr/bin/vim
[root@localhost ~]# ll /usr/bin/vim
-rwsr-xr-x. 1 root root 2324712 7月 24 2015 /usr/bin/vim
[root@localhost ~]# chmod u-s /usr/bin/vim
[root@localhost ~]# ll /usr/bin/vim
-rwxr-xr-x. 1 root root 2324712 7月 24 2015 /usr/bin/vim

2.1.4 建议


  • 当命令被设置 SetUID 权限后,命令执行者化身为root用户,就能使用该命令为所欲为,所以慎重赋予。
  • 具体建议
    • 控制关键目录的权限授予,比如“/”,“/usr/”等;
    • 最好不要人为添加 SetUID权限;
    • 按密码三原则设置密码,定期修改密码,比如三个月、六个月等;
    • 定时检查非系统自带的 SUID权限 的文件。

2.1.5 检测 SUID 和 SGID 的脚本


  • 建立系统自带 SUID 和 SGID权限的文件 suid.list

[root@localhost ~]# find / -perm -4000 -o -perm -2000 > suid.list
[root@localhost ~]# ls
anaconda-ks.cfg install.log install.log.syslog suidcheck.sh suid.list test
[root@localhost ~]# cat suid.list
/lib64/dbus-1/dbus-daemon-launch-helper
/sbin/netreport
/sbin/mount.nfs
/sbin/pam_timestamp_check
/sbin/unix_chkpwd
/bin/mount
/bin/umount
/bin/cgexec
/bin/su
/bin/cgclassify
/bin/ping6
/bin/ping
/usr/libexec/abrt-action-install-debuginfo-to-abrt-cache
/usr/libexec/polkit-1/polkit-agent-helper-1
/usr/libexec/openssh/ssh-keysign
/usr/libexec/utempter/utempter
/usr/libexec/pt_chown
/usr/sbin/userhelper
/usr/sbin/usernetctl
/usr/sbin/postdrop
/usr/sbin/suexec
/usr/sbin/postqueue
/usr/bin/ssh-agent
/usr/bin/staprun
/usr/bin/gpasswd
/usr/bin/chage
/usr/bin/chsh
/usr/bin/passwd
/usr/bin/locate
/usr/bin/write
/usr/bin/wall
/usr/bin/at
/usr/bin/chfn
/usr/bin/ksu
/usr/bin/newgrp
/usr/bin/pkexec
/usr/bin/crontab
/usr/bin/sudo

  • 写检测脚本,命名为 suidcheck.sh

[root@localhost ~]# vi suidcheck.sh 1 #!/bin/bash2 # Author:gaobailing (Email:375196239@qq.com)3 4 #搜索系统中的所有拥有SUID和SGID的文件,并保存在临时文件中5 find / -perm -4000 -o -perm -2000 > /tmp/setsuid.check6 7 #做循环,每次循环取出文件中的文件名8 for i in $(cat /tmp/setsuid.check)9 do10 #比对这个文件名是否在模版文件中11 grep $i /root/suid.list > /dev/null12 #如果在,不报错13 if [ "$?" != "0" ]14 #如果不在,则报错,将报错文件输出到日志文件,并在控制台打印出来15 then16 echo "$i isn't in suid.listfile" | tee -a /root/suid_log_$(date +%F)17 fi18 done19 # 删除临时文件20 rm -rf /tmp/setsuid.check

  • 验证脚本

#手动给 /usr/bin/vim 赋予 SetUID权限
[root@localhost ~]# whereis vim
vim: /usr/bin/vim /usr/share/vim /usr/share/man/man1/vim.1.gz
[root@localhost ~]# ll /usr/bin/vim
-rwxr-xr-x. 1 root root 2324712 7月 24 2015 /usr/bin/vim
[root@localhost ~]# chmod u+s /usr/bin/vim
[root@localhost ~]# ll /usr/bin/vim
-rwsr-xr-x. 1 root root 2324712 7月 24 2015 /usr/bin/vim#运行脚本检测
[root@localhost ~]# ./suidcheck.sh
/usr/bin/vim isn't in suid.listfile。[root@localhost ~]# cat suid_log_2022-05-02
/usr/bin/vim isn't in suid.listfile#报错,系统中自带 SetUID权限的文件,不含/usr/bin/vim,所以输出到控制台,并写入了日志里面#收回 /usr/bin/vim 的 SetUID权限
[root@localhost ~]# chmod u-s /usr/bin/vim
[root@localhost ~]# ll /usr/bin/vim
-rwxr-xr-x. 1 root root 2324712 7月 24 2015 /usr/bin/vim

        说明:SUID是比较重要的特殊权限,不要轻易给其他命令赋予,否则会出现无法预料的问题,请慎重。        



2.2 SetGID(SGID)


  • 针对文件
    • 必须是可执行的二进制程序,通俗来讲就是命令;
    • 命令执行者对该程序具有执行权限(x);
    • 命令执行者在执行命令期间,组身份变成所属组身份;
    • SetUID只在程序执行过程中有效,程序执行结束即失效。
  • 设置粘着位命令格式
    • chmod g[+-]t 文件

举例:

[root@localhost ~]# ll /var/lib/mlocate/mlocate.db
-rw-r-----. 1 root slocate 1668362 5月 2 03:26 /var/lib/mlocate/mlocate.db
[root@localhost ~]# ll /usr/bin/locate
-rwx--s--x. 1 root slocate 38464 3月 12 2015 /usr/bin/locate

  •  我们来看看执行 locate命令 之后,都经历了那些:
    • root用户对  /usr/bin/locate 命令拥有执行权限(x);
    • /usr/bin/locate 命令所属组有执行权限为 “s”,说明具有SetGID权限。
    • root 组化身为 /usr/bin/locate 命令的所属组 slocate;
    • 所属组 slocate,对 /var/lib/mlocate/mlocate.db 有读权限;
    • 所以root用户能够查看 /var/lib/mlocate/mlocate.db;
    • 执行结束之后,所属组收回权限。


  • 针对目录
    • 普通用户对此目录必须有 r 和 x 权限,才能进入此目录;
    • 普通用户有效组化身为此目录所属组;
    • 普通用户对此目录有 w 权限,新建文件默认属组就是就是这个目录的属组
  • 设置粘着位命令格式
    • chmod g[+-]t 目录

举例:略(后期补充),如有需要,可以留言。


2.3 Sticky BIT (SBIT)


  • 中文翻译:粘着位 
    • 有效范围:只针对目录有效
    • 普通用户对此目录有 w 和 x 权限,即普通用户拥有写入权限
    • 一旦设置粘着位,用户只能删除自己的文件,不能删除其他用户的文件
    • 一旦没有设置粘着位,用户能删除自己的文件,其他用户也能删除。
  • 设置粘着位命令格式
    • chmod o[+-]t 目录


2.4 设定文件特殊权限


  • 表示方法:
    • 4 : 代表SUID
    • 2 : 代表SGID
    • 1 : 代表SBIT

[root@localhost tmp]# chmod 4755 test
[root@localhost tmp]# chmod 2755 test
[root@localhost tmp]# chmod 1755 test
[root@localhost tmp]# ll -d test
drwsr-sr-t. 2 root root 4096 5月 2 06:11 test

三、小结


  • 知识点总结
    • SUID、SGID、SBIT不要认为赋予;
    • 命令执行者执行二进制程序过程
    • 设置 SUID、SGID 和 SBIT

推荐阅读

        Linux 权限管理_sudo授权 学习总结(三)

        Linux 权限管理_ACL权限 学习总结(二)

        Linux 权限管理_基本权限和umask默认权限 学习总结(一)

如果对你有所帮助,请点赞+评论+收藏,三连支持一下博主,感激不尽@


推荐阅读
  • 在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的步骤和方法
    本文介绍了在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的详细步骤和方法。首先需要下载最新的Java SE Development Kit 9发行版,然后按照给出的Shell命令行方式进行安装。详细的步骤和方法请参考正文内容。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 本文介绍了5个基本Linux命令行工具的现代化替代品,包括du、top和ncdu。这些替代品在功能上进行了改进,提高了可用性,并且适用于现代化系统。其中,ncdu是du的替代品,它提供了与du类似的结果,但在一个基于curses的交互式界面中,重点关注占用磁盘空间较多的目录。 ... [详细]
  • 进入配置文件目录:[rootlinuxidcresin-4.0.]#cdusrlocalresinconf查看都有哪些配置文件:[rootlinuxid ... [详细]
  • 我是这样学习Linux下C语言编程的-把程序输出信息加到系统日志里去关键词:Linux系统日志syslog服务程序syslogd ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 本文介绍了在Ubuntu系统中清理残余配置文件和无用内容的方法,包括清理残余配置文件、清理下载缓存包、清理不再需要的包、清理无用的语言文件和清理无用的翻译内容。通过这些清理操作可以节省硬盘空间,提高系统的运行效率。 ... [详细]
  • 程序员如何选择机械键盘轴体?红轴和茶轴对比
    本文介绍了程序员如何选择机械键盘轴体,特别是红轴和茶轴的对比。同时还介绍了U盘安装Linux镜像的步骤,以及在Linux系统中安装软件的命令行操作。此外,还介绍了nodejs和npm的安装方法,以及在VSCode中安装和配置常用插件的方法。最后,还介绍了如何在GitHub上配置SSH密钥和git的基本配置。 ... [详细]
  • 本文主要介绍关于linux文件描述符设置,centos7设置文件句柄数,centos7查看进程数的知识点,对【Linux之进程数和句柄数】和【linux句柄数含义】有兴趣的朋友可以看下由【东城绝神】投 ... [详细]
  • 找到JDK下载URL当然去官网找了。目前最新的1.8的下载URL(RPM)如下:http:download.oracle.comotn-pubjavajdk8u161-b122f3 ... [详细]
  • 开发笔记:MySQL数据库
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了MySQL数据库相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Linux学习笔记:psef、ps aux、kill9
    一、查看进程命令1.ps命令Linux中的ps命令是ProcessStatus的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就 ... [详细]
  • Linux目录结构说明(2)一些重要文件目录1.一些重要文件目录参考1.一些重要文件目录1.网卡配置文件etcsysconfignetwork-scr ... [详细]
  • 在做以下实验时需先做的操作为:(1)打开两个虚拟机(desktop和server)并更改他们的ipÿ ... [详细]
  • 与用户空间应用不同的是,内核不能调用标准C库或其它任何不属于内核的库。主要原因是,速度及大小的限制。标准C库对内核而言实在是太大了。许多常用的的libc ... [详细]
author-avatar
Cynthia番茄际_382
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有