SUID、SGID、SBIT归纳总结

由于网络上对于这三个特殊权限解释的内容太过简短,没看明白前就结束了教程,在自己试验后写总结以便其他人能方便了解

1、SUID

前提:SUID对于一个文件有什么限制和功能

只有可执行文件才能设定 SetUID 权限,对目录设定 SUID,是无效的。
用户要对该文件拥有 x(执行)权限。
用户在执行该文件时,会以文件所有者的身份执行。
SetUID 权限只在文件执行过程中有效,一旦执行完毕,身份的切换也随之消失。

1.1权限设置方法

1.1.1字母设置法

chmod u+s 文件名 添加SUID权限
chmod u-s 文件名 删除SUID权限

1.1.2数字设置法

chmod 4755 文件名

1.2 passwd例子

passwd命令是linux系统中用来修改密码的命令.系统中所有用户都可以使用.
而passwd命令改密码的行为是通过修改/etc/shadow文件来实现.
先看看passwd的权限

[root@linuxprobe ~]# cd /bin
[root@linuxprobe bin]# ls -l passwd
-rwsr-xr-x. 1 root root 27832 Jan 30  2014 passwd

可以看到第4位为S,表示设置了SUID权限,在这个情况下任何普通用户都可以修改他自身的密码(root可以修改所有用户的密码)

[user1@linuxprobe Desktop]$ passwd
Changing password for user user1.
Changing password for user1.
(current) UNIX password: 
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

user1用户密码修改成功,如果把passwd的SUID权限去掉会发生什么呢?

[root@linuxprobe bin]# chmod u-s passwd
[root@linuxprobe bin]# ll passwd
-rwxr-xr-x. 1 root root 27832 Jan 30  2014 passwd

我们再次更改user1密码

[user1@linuxprobe Desktop]$ passwd
Changing password for user user1.
Changing password for user1.
(current) UNIX password: 
New password: 
Retype new password: 
passwd: Authentication token manipulation error

虽然用户有执行 passwd 命令的权限,但无修改 /etc/shadow 文件的权限,因此最终密码修改失败
普通用户运行passwd命令,系统创建的passwd进程的属主由默认为"程序发起者"变为了passwd的属主
而passwd的属主是root,所以普通用户其实是在用root的权限修改/etc/shadow文件.最后passwd命令执行结束,passwd进程被关闭.

2、SGID

SGID主要实现如下两种功能:

1.让执行者临时拥有属组的权限(对拥有执行权限的二进制程序有效)
2.在其目录中创建的文件自动继承该目录的用户组

2.1权限设置方法

2.1.1字母设置法

chmod -R g+s 文件名 添加SGID权限
chmod -R g-s 文件名 删除SGID权限

2.1.2数字设置法

chmod 2777 文件名

2.2实例

[root@linuxprobe Desktop]# ls -ld sgidd/
drwxrwxrwx. 2 root root 6 Jul 17 22:21 sgidd/
[root@linuxprobe Desktop]# chmod 2777 sgidd/
[root@linuxprobe Desktop]# ls -ld sgidd/
drwxrwsrwx. 2 root root 6 Jul 17 22:21 sgidd/

首先为文件夹添加SGID权限

[user1@linuxprobe sgidd]$ touch file1
[user1@linuxprobe sgidd]$ mkdir file2
[user1@linuxprobe sgidd]$ ll
total 0
-rw-rw-r--. 1 user1 root 0 Jul 17 22:36 file1
drwxrwsr-x. 2 user1 root 6 Jul 17 22:36 file2

切换普通用户,在目录中创建一个文件与目录。可以看到创建的两个文件都自动继承了SGID文件夹的所属组,并且创建的目录也自动添加了SGID权限。

3、SBIT

SBIT的作用:

当某个目录设置了SBIT权限后,该目录中的文件就只能被其所有者执行删除操作,能有效防止其他人员的恶意破坏。

3.1权限设置方法

3.1.1字母设置法

chmod -R o+t 文件名 添加SGID权限
chmod -R o-t 文件名 删除SGID权限

3.1.2数字设置法

chmod 1777 文件名

3.2实例

[root@linuxprobe Desktop]# mkdir sbitd
[root@linuxprobe Desktop]# chmod 1777 sbitd/
[root@linuxprobe Desktop]# ls -ld sbitd/
drwxrwxrwt. 2 root root 6 Jul 17 23:23 sbitd/
[root@linuxprobe Desktop]# 

创建一个具有SBIT权限的目录

[user1@linuxprobe sbitd]$ mkdir test
[user1@linuxprobe sbitd]$ ls -ld test
drwxrwxr-x. 2 user1 user1 6 Jul 17 23:29 test

切换user1用户,创建目录test

[user2@linuxprobe sbitd]$ rm -rf test
rm: cannot remove ‘test’: Operation not permitted

切换user2用户,删除目录test,由于SBIT的缘故,提示不允许操作。

posted @ 2019-07-17 23:38  Swlip  阅读(313)  评论(0编辑  收藏  举报