Linux平台及应用
潘小玲 郑国华 丁敏

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

特殊权限设置

发布时间:2020-04-19 20:41   发布人:潘小玲   浏览次数:324

(5)特殊权限设置

(5.1)SUID、SGID和sticky-bit

除了上述的基本权限之外,还有特殊权限存在。由于特殊权限会拥有一些“特权”,因而用户若无特殊需要,不应该去打开这些权限,避免安全方面出现严重漏洞,甚至摧毁系统。3个特殊权限位是对可执行文件或目录进行的,使用了特殊权限将影响执行者的操作权限。对文件可以设置SUID和SGID特殊权限;对目录可以设置SGID和sticky-bit特殊权限。下面两表中分别列出了文件和目录特殊权限的说明。

文件的特殊权限说明

特殊权限

说 明

SUID

当一个设置了SUID位的可执行文件被执行时,该文件将以其所有者的身份运行,而不是命令执行者的权限。也就是说无论谁来执行这个文件,都有文件所有者的特权,任意存取该文件拥有者能使用的全部系统资源。如果所有者是root,那么执行人就有超级用户的特权

SGID

当一个设置了SGID位的可执行文件执行时,该文件将以其所属组的身份运行,而不是命令执行者的权限。也就是说无论谁来执行这个文件,都有文件所属组的特权,任意存取整个组所能使用的系统资源

 

目录的特殊权限说明

特殊权限

说 明

SGID

在目录中创建的所有文件将与该目录的所属组一致。所有被复制到这个目录下的文件,其所属的组都会被重设为和这个日录一致,除非在复制文件时加上-p(preserve,保留文件属性)的参数,才能保留原来所属的群组设置

sticky-bit

存放在该目录的文件仅准许其属主执行删除、移动等操作

一个设置了SUID的典型例子是passwd程序,它允许普通用户改变自己的口令,这是通过改变/etc/shadow文件的口令字段实现的。然而系统管理员决不允许普通用户拥有直接改变/etc/shadow文件的权利,因为这绝对不是个好主意。解决方法是将passwd 程序设置SUID,当passwd程序被执行时将拥有超级用户的权限,而passwd程序运行结束后又回到普通用户的权限。下面显示passwd程序的权限。

# ll /usr/bin/passwd

-rwsr-xr-x. 1 root root 27856 Aug  9  2019 /usr/bin/passwd

一个设置了sticky-bit的典型例子是系统临时文件目录/tmp,这样就避免了不法用户存心破坏,恣意乱删其他用户放置的文件。下面显示/tmp目录的权限:

# ll -d /tmp

drwxrwxrwt. 42 root root 8192 Mar 16 08:39 /tmp

 

 (5.2) SUID、SGID和sticky-bit的表示

从上面的显示可以看出:SUID是占用属主的x位置来表示的;SGID 是占用组的x位置来表示的; sticky-bit 是占用其他人的x位置来表示的。

SUID、SGID和sticky-bit也可用1位八进制数(3位二进制数)表示,如下表所示。

特殊权限的数值表示

权 限

数值表示

说 明

SUID

SGID

sticky

二进制

八进制|

-

-

-

000

0

不设置特殊权限

-

-

t

001

1

只设置sticky

-

s

-

010

2

只设置SGID

-

s

t

011

3

只设置SGID和sticky

s

-

-

100

4

只设置SUID

s

-

t

101

5

只设置SUID和sticky

s

s

-

110

6

只设置SUID和SGID

s

s

t

111

7

设置3种特殊权限

(5.3)设置特殊权限

设置特殊权限仍旧使用chmod命令,并且依然有字符设定法和数值设定法之分。

Ø  使用chmod命令的字符设定法时,可以使用s和t权限字符。

Ø  使用chmod命令的数值设定法时,要使用4位八进制数值,其中第1位八进制数用于设置特殊权限,后3位八进制数用于设置基本权限。

操作步骤3.9使用chmod命令设置特殊权限举例

//1.使用chmod命令的文字设定法

//为程序/usr/bin/myapp添加SUID权限

# chmod uts /usr/bi/myapp

//为目录/home/groupspace添加SGID权限

# chmod gts /home/groupspace

//为目录/home/share添加sticky权限

# chmod ot /home/share

//2.使用chmod命令的数值设定法

//为程序/usr/bin/myapp添加SUID权限

# chmod 4755 /usr/bin/myapp

//为目录/home/groupspace添加SGID权限

# chmod 2755 /home/groupspace

//为目录home/share添加sticky权限

# chmod 1755 /home/share