48小时系统班试听入口

【运维必看】LINUX特殊权限

发布作者:新盟教育 发布日期:2022-08-17 浏览人数:2134人

运维必备技能


linux中的特殊权限一共包含了以下三种:

1.SUID(属主特殊权限)。

2.SGID(属组特殊权限)。

3.SBIT(粘滞位)。



SUID



查看用户密码存放的文件我们可以看到是没有任何权限的[root@localhost ~]# ll  -d  /etc/shadow----------. 1 root root 2752 Jul 14 19:44 /etc/shadow



但是当我用户在更新或者密码的时候 是需要更新shadow的内容但是又没有权限写入,所以这时候SUID便有它的用处了。


[root@localhost ~]# which  passwd
/usr/bin/passwd
[root@localhost ~]# ll  -d  /usr/bin/passwd 
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd



此时能够看到属主的为权限为rws。

切换到普通用户的身份查看passwd这个指令的属性属主位也有SUID的权限。


[oldxie@localhost ~]$ ll  -d  /usr/bin/passwd 
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd



当我们将SUI的权限取消后切换用户执行paswd更改密码是没有权限的。


删除suid:chmod u-s file:


[root@localhost ~]# ll   /usr/bin/passwd 
-rwxr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd
[root@localhost ~]# su - xxx
Last login: Thu Jul 15 17:20:44 CST 2021 on pts/0
i come to  profile.d
i come  to  /etc/profile
i come to /etc/bashrc
[xxx@localhost ~]$ ll  /usr/bin/passwd ; ll  /etc/shadow
-rwxr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd
----------. 1 root root 2970 Jul 15 17:21 /etc/shadow



此时你再去passwd 更该密码它会一直提示passwd is not match (密码不匹配) 不能够修改密码。


重新加入suid:  chmod u+s  /usr/bin/passwd
或者  chmod   4755 /usr/bin/passwd  
就能够更改密码




SGID



①chmod g+s /dir。

②chmod 2770 /dir。

③chmod g-s /dir。


设置二进制可执行文件命令在执行的过程中会以命令的属组身份运行该命令。

设置在目录上,这时候在该目录下新建的文件/目录自动继承父级目录的属组。


演示场景:


[root@localhost ~]# groupadd  example 
[root@localhost ~]# useradd   ex1 -G  example  
[root@localhost ~]# useradd  ex2 -G  example 
[root@localhost ~]# mkdir  -p  /data/code 
[root@localhost ~]# chown    .example /data/code/
[root@localhost ~]# chmod   2770   /data/code/
[root@localhost ~]# echo  '1234' > /data/code/test.log
[root@localhost ~]# ll  /data/code/test.log 
-rw-r--r--. 1 root example 5 Jul 15 17:43 /data/code/test.log
[root@localhost ~]# chmod   g-s  /data/code/
[root@localhost ~]# echo  '123'> /data/code/test2.log
[root@localhost ~]# ll  /data/code/test2.log 
-rw-r--r--. 1 root root 4 Jul 15 17:45 /data/code/test2.log



上面的示例可以看出目录再有SGID和没有SGID的情况下下新建文件属组继承的不同。



SBIT



一旦目录被赋予粘滞位sticky(st ti ki)除了root可以删除目录中的所以文件,普通用户就算对该目录拥有w权限,也只能删除自己建立的文件,而不能删除其他用户的文件。


增加粘滞位:

1.chmod o+t/directory。

2.chmoda 1755/directory。

3.chmod o-t/directory。


演示:

后期当我们要初始化MYSQL服务时,服务会创建一些临时文件存储在/tmp目录下.当初始化完毕后,自己会清理里面的数据,别人无法清理(如果这个目录不是粘滞位,那么初始化MYSQL就会报错)。

编写shell 脚本模拟此场景:1.模拟mysql初始化创建文件至/tmp目录。2.然后登录普通用户删除mysql的初始化文件。

3.如果普通用户删除成功,则初始化失败(因为mysql服务创建的文件是需要自己销毁的)。

4.如果普通用户删除失败,则mysql服务器尝试删除,删除成功,则初始化失败。


脚本如下:


1 #!/usr/bin/bash
  2 mysql_tmp_file=/tmp/mysq.init
  3 user=oldxie
  4 #初始化Mysql服务
  5 touch  ${mysql_tmp_file}
  6 ##模拟用户删除文件
  7 su  -  ${user}  -c   "rm -f  ${mysql_tmp_file}&>/dev/null"
  8 #检查是否删除成功
  9 
 10 if [ $? -eq  0 ];then
 11         echo  "${mysql_tmp_file} 文件被+${user}删除,该目录不是sbit mysql服务初始化失败 "
 12 else    
 13         echo   "${mysql_tmp_file}文件被${user}删除失败,该目录是sbit,mysql服务初始化成功"
 14         
 15 fi



另外一种写法:


1 #!/usr/bin/bash
 2 touch   /tmp/mysql_init
  3 su  -  oldxie  -c  "rm -f /tmp/mysql_init"&>/dev/null
  4 if [-f /tmp/mysql_init];then
  5         rm  -f /tmp/mysql_init
  6         echo  "mysql初始化成功,这个目录拥有sbit特殊权限"
  7 else
  8         echo  "mysql初始化失败,这个目录没有sbit特殊权限"
  9 fi


##目录有粘滞位的时候
[root@localhost ~]# chmod   o+t  /tmp/
[root@localhost ~]# ll  -d   /tmp/
drwxrwxrwt. 10 root root 4096 Jul 15 19:03 /tmp/
[root@localhost ~]# bash  mysql_init.sh 
i come  to  /etc/profile
i come to /etc/bashrc
/tmp/mysq.init文件被oldxie删除失败,该目录是sbit,mysql服务初始化成功
#目录没有粘滞位权限
[root@localhost ~]# chmod  o-t  /tmp/
[root@localhost ~]# bash   mysql_init.sh 
i come  to  /etc/profile
i come to /etc/bashrc
/tmp/mysq.init 文件被+oldxie删除,该目录不是sbit mysql服务初始化失败



SBIT总结:

1.让所有普通用户对该目录具有写入的权限,并且能实现每个用户只能删除自己的文件。

2.粘滞位目录表现others的x位,用t表示如果没有执行权限则显示T(大写)。

3.粘滞位目录的属主以及root用户有权限删除目录中的内容,其他用户没有权限删除。



特殊权限练习


假如你是一个员工的团队领导,为XTH公司工作:

1.公司要求你创建一个/tmp/dir_xth/的目录。

2.让ops组成员都能在该目录下创建或者访问文件。

3.但是除了文件创建者之外得其他人不能删除文件。


创建目录,组和用户并且将用户加ops组
[root@localhost ~]# mkdir   -p   /tmp/dir_xth 
[root@localhost ~]# chmod  770  /tmp/dir_xth/
[root@localhost ~]# groupadd   ops  
[root@localhost ~]# chown   .ops  /tmp/dir_xth/
[root@localhost ~]# useradd   A   -G  ops 
[root@localhost ~]# useradd   B    -G  ops 
[root@localhost ~]# chmod  g+s  /tmp/dir_xth/
[root@localhost ~]# chmod  o+t  /tmp/dir_xth/
[root@localhost ~]# su - A 
i come to  profile.d
i come  to  /etc/profile
i come to /etc/bashrc
[A@localhost ~]$ cd  /tmp/dir_xth/
[A@localhost dir_xth]$ touch  fileA 
[root@localhost ~]# su  - B 
[B@localhost tmp]$ cd  /tmp/dir_xth/
[B@localhost dir_xth]$ rm -f  fileA 
rm: cannot remove ‘fileA’: Operation not permitted
[B@localhost dir_xth]$ ^C








推荐阅读

>>>新手必备-Linux入门之云计算是什么

>>>红帽认证入门-Linux系统介绍及企业版本选型

>>>新手必备-Linux系统安装配置+Xshell远程连接

>>>Linux常用命令行合集之绝对路径和相对路径

>>>软连接与硬连接



运维界升职加薪必备的云计算技术,你学了吗?

学完高级运维云计算课程之后,你可以:

  • 跨越90%企业的招聘硬门槛

  • 增加70%就业机会

  • 拿下BAT全国TOP100大厂敲门砖

  • 体系化得到运维技术硬实力

  • 技术大佬年薪可达30w+

客服电话 15822722968 邮箱 799830458@qq.com 地址 天津市红桥区光荣道157号宝能创业中心2号楼-1、2门-907号
官方公众号
商务合作