7.10 设置和清除suid
chmod u[+-]s
在7.6节中介绍了几种可能的权限。主要介绍的是r
、w
和x
,因为它们是最常用的几种权限,不过其他权限迟早也会遇到。我们先来看看suid
,它只适用于可执行文件,不能用于目录。
在设置suid
以后,用户就可以使用拥有者的权限执行这个文件了,就好像是程序的拥有者在运行它一样。使用suid
的一个常见例子是passwd
命令的权限设置,这个命令可以让用户设置和修改他们的密码。
$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root ... /usr/bin/passwd
可以看到passwd
设置了suid
权限,因为在用户的x
权限位置,现在有一个s
权限。passwd
的拥有者是root用户,但是有必要让普通用户也能运行这个命令,否则他们就不能修改自己的密码。为了让所有人都能执行passwd
命令,需要为用户、组及系统的其他用户都设置x
权限。不过,这还不够。答案是将passwd
设成suid root
,这样所有人都能以root
用户的权限运行这个命令。
说明 或许你已经看到用
s
或S
都可以表示设置了suid
。在设置suid
之前,如果拥有者已经具有执行权限(x
),就会看到s
;而S
则表示在设置suid
之前,拥有者没有执行的权限。最终的结果是一样的,但是字母的大小写能够告诉你最初的情形是什么样的。
有两种办法可以用于设置和取消suid
,即字母表示法和数字表示法。字母表示法如下所示:
$ pwd
/home/scott/bin
$ ls -l
-rwxr-xr-- 1 scott admins ... backup_data
$ chmod u+s backup_data
$ ls -l
-rwsr-xr-- 1 scott admins ... backup_data
现在admins
组的任何成员都能够运行backup_data
脚本,好像他们就是用户scott
一样。但是要注意,任何非admins
组的成员都不能运行这个程序,因为他们只有程序的读权限。如果有必要让系统中的每个用户都能够作为scott
来运行backup_data
脚本,那么就应该把权限设置成-rwsr-xr-x
。
使用u-
来代替u+
即可删除suid
。
$ ls -l
-rwsr-xr-- 1 scott admins ... backup_data
$ chmod u-s backup_data
$ ls -l
-rwxr-xr-- 1 scott admins ... backup_data
使用八进制权限表示法设置suid
要更复杂些,这是因为它在原来使用的数字权限表示法中引入了新的一位数字。回想一下,数字权限表示法使用了3个数字,第一个数字表示拥有者的权限,第二个表示组用户的权限,第三个则表示其他人的权限。其实在拥有者数字的左边还有第四个数字。只不过在绝大多数情况下,这个数字为0,所以没有必要显示或使用它。换句话说,chmod 644 libby.jpg
和chmod 0644 libby.jpg
是完全相同的。只有在修改suid
(或sgid
、sticky bit,随后几节将详细介绍)时,才需要第四位数字。
要将suid
的数字设置为4
,可以按如下所示的方法来修改backup_data
:
$ pwd
/home/scott/bin
$ ls -l
-rwxr-xr-- 1 scott admins ... backup_data
$ chmod 4754 backup_data
$ ls -l
-rwsr-xr-- 1 scott admins ... backup_data
要删除suid
,只要将这一位数字设置为0
,就能将权限设置回默认状态,不设置suid
权限。
$ ls -l
-rwsr-xr-- 1 scott admins ... backup_data
$ chmod 0754 backup_data
$ ls -l
-rwxr-xr-- 1 scott admins ... backup_data
说明 作为普通用户,一般很少需要将程序的权限修改为
suid
。它的使用通常都与root
用户拥有的程序有关,但是对此有所了解仍然是件好事情,以备在偶尔需要时能派上用场。