Linux文件特殊权限 SUID/SGID/Sticky Bit
2010-09-17 14:14
567 查看
转自:http://os.51cto.com/art/200801/64465.htm
前面一直提到文件的重要权限,就是rwx这3个读、写、执行的权限。但是,怎么 /tmp权限有些奇怪?还有, /usr/bin/passwd也有些奇怪,怎么回事呢?
不是只有rwx吗?为什么还有其他的特殊权限呢?不要担心,我们这里先不谈这两个权限,只是先介绍一下而已。因为必须要有账号的ID概念,以及程序的进程(process)概念后,才能够进一步了解这些特殊权限所表示的意义。
一、
Set UID
创建s权限,是为了让一般用户在执行某些程序的时候,能够暂时具有该程序拥有
者的权限。举例来说,我们知道,账号与密码的存放文件其实是 /etc/passwd与 /etc/shadow。而
/etc/shadow文件的权限是“-r--------”。它的拥有者是root。在这个权限中,仅有root可以“强制”存储,其他人是连看都不行
的。
但是,偏偏笔者使用dmtsai这个一般身份用户去更新自己的密码时,使用的就是
/usr/bin/passwd程序,却可以更新自己的密码。也就是说,dmtsai这个一般身份用户可以存取
/etc/shadow密码文件。这怎么可能?明明
/etc/shadow就是没有dmtsai可存取的权限。这就是因为有s权限的帮助。当s权限在user的x时,也就是类似
-r-s--x--x,称为Set
UID,简称为SUID,这个UID表示User的ID,而User表示这个程序(/usr/bin/passwd)的拥有者(root)。那么,我们就
可以知道,当dmtsai用户执行 /usr/bin/passwd时,它就会“暂时”得到文件拥有者root的权限。
SUID仅可用在“二进制文件(binary
file)
”,SUID因为是程序在执行过程中拥有文件拥有者的权限,因此,它仅可用于二进制文件,不能用在批处理文件(shell脚本)上
。这是因为
shell脚本只是将很多二进制执行文件调进来执行而已。所以SUID的权限部分,还是要看shell脚本调用进来的程序设置,而不是shell脚本本
身。当然,SUID对目录是无效的。
这点要特别注意。
二、Set GID
进一步而言,如果s的权限是在用户组,那么就是Set GID,简称为SGID。SGID可以用在两个方面。
文件:如果SGID设置在二进制文件上,则不论用户是谁,在执行该程序的时候,它的有效用户组(effective group)将会变成该程序的所有者的用户组(group id)。
目录:如果SGID是设置在A目录上,则在该A目录内所建立的文件或目录的用户组,将会是此A目录的用户组。
一般来说,SGID多用在特定的多人团队的项目开发上,在系统中用得较少。
三、Sticky Bit
这个Sticky
Bit当前只针对目录有效,对文件没有效果。
SBit对目录的作用是:“在具有SBit的目录下,用户若在该目录下具有w及x权限,则当用户在该目录下建
立文件或目录时,只有文件拥有者与root才有权力删除”。
换句话说:当甲用户在A目录下拥有w权限,这表示甲用户
对该目录内任何人建立的目录或文件均可进行“删除/重命名/移动”等操作。不过,如果将A目录加上了Sticky
bit的权限,则甲只能够针对自己建立的文件或目录进行删除/重命名/移动等操作。
举例来说,/tmp本身的权限是“drwxrwxrwt”,在这样的权限内容下,任何人都可以在 /tmp内新增、修改文件,但仅有该文件/目录的建立者与root能够删除自己的目录或文件。这个特性也很重要。
可以这样做个简单测试:
1. 以root登入系统,并且进入 /tmp中。
2. touch test,并且更改test权限成为777。
3. 以一般用户登入,并进入 /tmp。
4. 尝试删除test文件。
更多关于SUID/SGID/Sticky Bit的介绍,我们会在第11章中再次提及,当前,先有简单的概念即可。
四、SUID/SGID/SBIT权限设置
前面介绍过SUID与SGID的功能,那么,如何打开文件使其成为具有SUID与
SGID的权限呢?这就需要使用数字更改权限了。现在应该知道,使用数字更改权限的方式为“3个数字”的组合,那么,如果在这3个数字之前再加上一个数
字,最前面的数字就表示这几个属性了(注:通常我们使用chmod xyz
filename的方式来设置filename的属性时,则是假设没有SUID、SGID及Sticky bit)。
4为SUID
2为SGID
1为Sticky bit
假设要将一个文件属性改为“-rwsr-xr-x”,由于s在用户权限中,所以是
SUID,因此,在原先的755之前还要加上4,也就是使用“chmod 4755
filename”来设置。此外,还有大S与大T的产生。参考下面的范例(注意:下面的范例只是练习而已,所以笔者使用同一个文件来设置,必须知
道,SUID不是用在目录上,SBIT不是用在文件上)。
# 这个例子要特别小心。怎么会出现大写的S与T呢?不都是小写的吗?
# 因为s与t都是取代x参数的,但是,我们是使用
# 7666。也就是说,user、group以及others都没有x这个可执行的标志
# (因为666)。所以,S、T表示“空的”。
# SUID是表示“该文件在执行时,具有文件拥有者的权限”,但文件
# 拥有者都无法执行了,哪里来的权限给其他人使用呢?当然就是空的
前面一直提到文件的重要权限,就是rwx这3个读、写、执行的权限。但是,怎么 /tmp权限有些奇怪?还有, /usr/bin/passwd也有些奇怪,怎么回事呢?
[root@linux ~]# ls -ld /tmp ; ls -l /usr/bin/passwd drwxrwxrwt 5 root root 4096 Jul 20 10:00 /tmp -r-s--x--x 1 root root 18840 Mar 7 18:06 /usr/bin/passwd |
一、
Set UID
创建s权限,是为了让一般用户在执行某些程序的时候,能够暂时具有该程序拥有
者的权限。举例来说,我们知道,账号与密码的存放文件其实是 /etc/passwd与 /etc/shadow。而
/etc/shadow文件的权限是“-r--------”。它的拥有者是root。在这个权限中,仅有root可以“强制”存储,其他人是连看都不行
的。
但是,偏偏笔者使用dmtsai这个一般身份用户去更新自己的密码时,使用的就是
/usr/bin/passwd程序,却可以更新自己的密码。也就是说,dmtsai这个一般身份用户可以存取
/etc/shadow密码文件。这怎么可能?明明
/etc/shadow就是没有dmtsai可存取的权限。这就是因为有s权限的帮助。当s权限在user的x时,也就是类似
-r-s--x--x,称为Set
UID,简称为SUID,这个UID表示User的ID,而User表示这个程序(/usr/bin/passwd)的拥有者(root)。那么,我们就
可以知道,当dmtsai用户执行 /usr/bin/passwd时,它就会“暂时”得到文件拥有者root的权限。
SUID仅可用在“二进制文件(binary
file)
”,SUID因为是程序在执行过程中拥有文件拥有者的权限,因此,它仅可用于二进制文件,不能用在批处理文件(shell脚本)上
。这是因为
shell脚本只是将很多二进制执行文件调进来执行而已。所以SUID的权限部分,还是要看shell脚本调用进来的程序设置,而不是shell脚本本
身。当然,SUID对目录是无效的。
这点要特别注意。
二、Set GID
进一步而言,如果s的权限是在用户组,那么就是Set GID,简称为SGID。SGID可以用在两个方面。
文件:如果SGID设置在二进制文件上,则不论用户是谁,在执行该程序的时候,它的有效用户组(effective group)将会变成该程序的所有者的用户组(group id)。
目录:如果SGID是设置在A目录上,则在该A目录内所建立的文件或目录的用户组,将会是此A目录的用户组。
一般来说,SGID多用在特定的多人团队的项目开发上,在系统中用得较少。
三、Sticky Bit
这个Sticky
Bit当前只针对目录有效,对文件没有效果。
SBit对目录的作用是:“在具有SBit的目录下,用户若在该目录下具有w及x权限,则当用户在该目录下建
立文件或目录时,只有文件拥有者与root才有权力删除”。
换句话说:当甲用户在A目录下拥有w权限,这表示甲用户
对该目录内任何人建立的目录或文件均可进行“删除/重命名/移动”等操作。不过,如果将A目录加上了Sticky
bit的权限,则甲只能够针对自己建立的文件或目录进行删除/重命名/移动等操作。
举例来说,/tmp本身的权限是“drwxrwxrwt”,在这样的权限内容下,任何人都可以在 /tmp内新增、修改文件,但仅有该文件/目录的建立者与root能够删除自己的目录或文件。这个特性也很重要。
可以这样做个简单测试:
1. 以root登入系统,并且进入 /tmp中。
2. touch test,并且更改test权限成为777。
3. 以一般用户登入,并进入 /tmp。
4. 尝试删除test文件。
更多关于SUID/SGID/Sticky Bit的介绍,我们会在第11章中再次提及,当前,先有简单的概念即可。
四、SUID/SGID/SBIT权限设置
前面介绍过SUID与SGID的功能,那么,如何打开文件使其成为具有SUID与
SGID的权限呢?这就需要使用数字更改权限了。现在应该知道,使用数字更改权限的方式为“3个数字”的组合,那么,如果在这3个数字之前再加上一个数
字,最前面的数字就表示这几个属性了(注:通常我们使用chmod xyz
filename的方式来设置filename的属性时,则是假设没有SUID、SGID及Sticky bit)。
4为SUID
2为SGID
1为Sticky bit
假设要将一个文件属性改为“-rwsr-xr-x”,由于s在用户权限中,所以是
SUID,因此,在原先的755之前还要加上4,也就是使用“chmod 4755
filename”来设置。此外,还有大S与大T的产生。参考下面的范例(注意:下面的范例只是练习而已,所以笔者使用同一个文件来设置,必须知
道,SUID不是用在目录上,SBIT不是用在文件上)。
[root@linux ~]# cd /tmp [root@linux tmp]# touch test [root@linux tmp]# chmod 4755 test; ls -l test -rwsr-xr-x 1 root root 0 Jul 20 11:27 test [root@linux tmp]# chmod 6755 test; ls -l test -rwsr-sr-x 1 root root 0 Jul 20 11:27 test [root@linux tmp]# chmod 1755 test; ls -l test -rwxr-xr-t 1 root root 0 Jul 20 11:27 test [root@linux tmp]# chmod 7666 test; ls -l test -rwSrwSrwT 1 root root 0 Jul 20 11:27 test |
# 因为s与t都是取代x参数的,但是,我们是使用
# 7666。也就是说,user、group以及others都没有x这个可执行的标志
# (因为666)。所以,S、T表示“空的”。
# SUID是表示“该文件在执行时,具有文件拥有者的权限”,但文件
# 拥有者都无法执行了,哪里来的权限给其他人使用呢?当然就是空的
相关文章推荐
- linux特殊文件权限 suid、sgid和sticky-bit的作用
- 再次学习linux文件特殊权限:SUID、SGID、Sticky Bit
- linux特殊文件权限 suid、sgid和sticky-bit的作用
- Linux文件特殊权限 SUID/SGID/Sticky Bit
- Linux文件特殊权限 SUID/SGID/Sticky Bit
- Linux文件特殊权限 SUID/SGID/Sticky Bit
- Linux文件特殊权限 SUID/SGID/Sticky Bit
- 再次学习linux文件特殊权限:SUID、SGID、Sticky Bit
- 【Linux】文件特殊权限 SUID/SGID/Sticky Bit
- [Linux]:Linux文件特殊权限 SUID/SGID/Sticky Bit
- Linux文件系统上的特殊权限(SUID、SGID、Sticky)的知识点
- linux 三种特殊权限简介 s suid sgid sticky-bit
- 文件特殊权限:SUID/SGID/Sticky Bit
- 文件特殊权限:SUID/SGID/Sticky Bit
- Linux文件系统上的特殊权限(SUID、SGID、Sticky)
- 文件特殊权限:SUID/SGID/Sticky Bit
- Linux文件的三种特殊权限SUID、SGID、STICKY
- linux 三种特殊权限简介 s suid sgid sticky-bit
- linux unix 特殊权限SUID/SGID/Sticky Bit
- Linux文件系统上的特殊权限(SUID、SGID、Sticky)的知识点