Linux权限管理:特殊权限详解

特殊权限

图片[1]-Linux权限管理:特殊权限详解-不念博客

setuid权限会标红

setgid会标黄

权限代表:s

绿

权限代表:t

图片[2]-Linux权限管理:特殊权限详解-不念博客

引入:

# 1 普通用户可以修改密码吗?
可以 passwd命令


# 2 /etc/shadow 的权限
000
0 ? 08:41:43 root@sky,10.0.0.201:~ # ll /etc/shadow
----------. 1 root root 711 Aug 22 21:03 /etc/shadow


# 3 普通用户可以查看或者修改/etc/shadow吗?
改不了。普通用户vim进去 显示"/etc/shadow" [Permission Denied]


# 那为何普通用户能改密码?
归功于passwd命令的特殊权限 SetUID(s)
这使得你只要执行这个命令,就是在按照/bin/passwd 的属主权限去执行

一、SetUID权限

可以这样理解:当一个具有执行权限的文件设置了SetUID权限后,用户在执行这个文件时,将以文件所有者身份来执行

SetUID :无论是谁操作 都是按照其属主(root)的权限
例子 ll /bin/passwd
[root@bunian ~]# ll /bin/su
-rwsr-xr-x. 1 root root 32208 Oct 31  2018 /bin/su


#哪些命令默认设置了suid位
[root@bunian ~]# find /bin/ -type f -perm 4755|xargs ls -l
-rwsr-xr-x. 1 root root 64328 Oct 31  2018 /bin/chage
-rwsr-xr-x. 1 root root 57576 Apr 11  2018 /bin/crontab
-rwsr-xr-x. 1 root root 32096 Oct 31  2018 /bin/fusermount
-rwsr-xr-x. 1 root root 78272 Oct 31  2018 /bin/gpasswd
-rwsr-xr-x. 1 root root 44320 Oct 31  2018 /bin/mount
-rwsr-xr-x. 1 root root 41872 Oct 31  2018 /bin/newgrp
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /bin/passwd
-rwsr-xr-x. 1 root root 23656 Oct 31  2018 /bin/pkexec
-rwsr-xr-x. 1 root root 32208 Oct 31  2018 /bin/su
-rwsr-xr-x. 1 root root 32048 Oct 31  2018 /bin/umount


# SetUID的作用


1.让普通用户对可执行的二进制文件,临时拥有二进制文件的所属权限
2.如果设置的二进制文件没有执行权限,那么suid的权限显示就是S
3.特殊权限suid仅对二进制可执行程序有效,其他文件或目录则无效


注意:suid极其危险,不信可以尝试对vim或者rm命令进行设定suid


# 如何授权:
      chmod u±s 文件名
或者   chmod 4XXX 文件名


例如:
[root@db04 ~]# chmod u+s /bin/cat
[root@db04 ~]# chmod 4755 /bin/cat


给cat一个SetUID权限的话,普通用户就也可以看/etc/shadow了


#给cat命令授权 SetUID 权限
[root@db04 ~]# chmod 4755 /bin/cat
#查看cat权限
[root@db04 ~]# ll /bin/cat
-rwsr-xr-x. 1 root root 48568 11月 22 2013 /bin/cat
#切换用户
[root@db04 ~]# su - xxx
#再次查看/etc/shadow就能看了

#在有执行权限的情况下是 s,没有执行权限的情况下是 S
原本属主位上有x权限,s 显示s
原本属主位上有x权限,s 显示S


他的特殊权限4000   (可以stat /passwd 看一下)

例如:先改成000 加s权限显示大S

再改777 加s权限显示小s

大S和小s单纯只是用来提示原来位置上有没有x权限

二、SetGID

对于二进制命令或者程序来说,sgid 的功能与 suid 基本相同,唯一的区别是,suid是获得命令所属用户的身份和权限,而sgid 是获得命令所属用户组的身份和权限

# sgid 核心知识小结
1)与suid 不同的是,sgid 既可以针对文件,也可以针对目录进行设置。
2)sgid 的权限是针对用户组权限位的。


对于文件来说,sgid 的功能具体如下。
1)sgid 仅对二进制命令及程序有效。
2)二进制命令或程序,也需要有可执行权限x 的配合。
3)执行命令的任意用户可以获得该命令在程序执行期间所属组的身份和权限。


对于目录(继承目录所属的组)来说,sgid 的功能具体如下。
1)Linux 里默认情況下所有用户创建文件,默认用户和组都是自身。
2)sgid 可以让用户在此目录下创建的文件和目录具有与此目录相同的用户组设置(作用:组内文件共享。)


setgid 位主要用于目录中,在为某个目录设置了setgid 位以后,在该目录中新创建的文件具有该目录的所属组权限,而不是创建该文件的用户的默认所有者。这就使得在多个用户之间共享一个目录中的文件变得简单。


# sgid实际应用很少
例子 ll /bin/write
s在属组位


# 如何授权:chmod g+s 文件名
    或者  chmod 2XXX 文件名   2000 就是只授这个权   变成------S---

例如:

root@bunian,10.0.0.201:~ # mkdir /tmp/test                 创建test目录
root@bunian,10.0.0.201:~ # chmod g+s /tmp/test             授权
root@bunian,10.0.0.201:~ # ll /tmp/test/ -d                 看一下
  drwxr-sr-x. 2 root root 6 Aug 23 10:47 /tmp/test/     r-s 已经有了s  
root@bunian,10.0.0.201:~ # touch /tmp/test/toot.file       在test下创建toot文件
root@bunian,10.0.0.201:~ # su - a01                         切到a01用户
Last login: Tue Aug 23 09:29:22 CST 2022 on pts/0
[a01@bunian ~]$ touch /tmp/test/xxx.file                     在test下创建xxx.file 提示无权限
touch: cannot touch ‘/tmp/test/xxx.file’: Permission denied

root@bunian,10.0.0.201:~ # chmod 777 /tmp/test               777授权下
root@bunian,10.0.0.201:~ # su - a01                           切到a01用户
[a01@bunian ~]$ touch /tmp/test/xxx.file                     就可以创建了。在test下创建xxx.file
[a01@bunian ~]$ ll /tmp/test                                 查看
total 0
-rw-r--r--. 1 root root 0 Aug 23 10:56 toot.file
-rw-rw-r--. 1 a01 root 0 Aug 23 11:08 xxx.file            #属组变跟root了 不加权限正常是跟a01


                                                        那只要我是root组下的,我test下面的都能操作

三、sbit

Sticky BIT ,简称 SBIT 特殊权限 ,可意为粘着位、粘滞位、防删除位等。

SBIT 权限仅对目录有效,一旦目录设定了 SBIT 权限,则用户在此目录下创建的文件或目录,就只有自己和 root 才有权利修改或删除该文件。

也就是说,当甲用户以目录所属组或其他人的身份进入 A 目录时,如果甲对该目录有 w 权限,则表示对于 A 目录中任何用户创建的文件或子目录,甲都可以进行修改甚至删除等操作。但是,如果 A 目录设定有 SBIT 权限,那就大不一样啦,甲用户只能操作自己创建的文件或目录,而无法修改或删除其他用户创建的文件或目录。

举个例子,Linux 系统中,存储临时文件的 /tmp 目录就设定有 SBIT 权限:

✓ 17:43:23 root@bunian,10.0.0.201:/tmp # touch rootfile     root下创建rootfile
✓ 17:43:37 root@bunian,10.0.0.201:/tmp # su - xxx           切到xxx
[xxx@bunian tmp]$ touch xxx.file                             用户xxx创建xxx.file
root@sky,10.0.0.201:~ # su - a01                           切到a01 切到/tmp下 创建a01.file
[a01@bunian ~]$ cd /tmp/                                    


# 这时用a01用户删rootfile 和 xxx.file 均提示无法删除


[a01@bunian tmp]$ rm -fr xxx.file                    
rm: cannot remove ‘xxx.file’: Operation not permitted      
[a01@bunian tmp]$ rm -fr rootfile
rm: cannot remove ‘rootfile’: Operation not permitted




# 但若是移除/tmp目录的SBIT权限,则可以嗨删


0 ✓ 17:46:22 root@sky,10.0.0.201:/tmp # chmod o-t /tmp/     去除/tmp目录的SBIT权限
 0 ✓ 17:46:32 root@sky,10.0.0.201:/tmp # ll -d /tmp/       看一眼
drwxrwxrwx. 19 root root 4096 Aug 23 17:44 /tmp/             已经没有t了
 0 ✓ 17:46:35 root@sky,10.0.0.201:/tmp # su - xxx           换xxx用户
[xxx@sky tmp]$ rm -fr rootfile                               嗨删
[xxx@sky tmp]$ rm -fr a01.file
[xxx@sky tmp]$ ll                                           删完看一眼 都没了

# ll -d /tmp    
drwxrwxrwt. 19 root root 4096 Aug 23 18:21 /tmp


原本权限位上没有x 那T
原本权限位上没有x 那t




授权命令:
chmod o+t
默认权限 1000
© 版权声明
THE END