文件特殊属性:SUID/SGID/Sticky
2015-08-18 12:41
495 查看
文件特殊属性:SUID/SGID/Sticky
在介绍SUID之前,让我们来看一个奇怪的问题:通过前两章的学习我们已经了解到,每个用户都可以使用passwd(该命令的绝对路径是/usr/bin/passwd)来修改自己的密码。系统用于记录用户信息和密码的文件分别是/etc/passwd和/etc/shadow,命令passwd执行的最终结果是去修改/etc/shadow中对应用户的密码。对于这个文件,只有root用户有读权限,而普通用户在修改自己的密码时,最终也会修改这个文件。注意,虽然/etc/shadow文件对于root用户来说只有读权限,但是实际上root是可以使用强写的方式来更新这个文件的。但是普通用户在运行这个命令时居然有权限来写/etc/shadow文件,怎么可能呢?先来确认一下/etc/passwd和/etc/shadow的文件属性,从而确定普通用户根本没有写权限:
再来看一下/usr/bin/passwd的权限,发现有个特别的s权限在用户权限上,这就是奥秘所在—该命令是设置了SUID权限的,这意味着普通用户可以使用root的身份来执行这个命令。那么以上的疑问就很容易解释了。但是必须注意的是,SUID权限只能用于二进制文件。确认一下/usr/bin/passwd的权限:
下面是给一个二进制文件添加SUID权限的方法:
介绍完SUID之后,想必再来理解SGID就很容易了:如果某个二进制文件的用户组权限被设置了s权限,则该文件的用户组中所有的用户将都能以该文件的用户身份去运行这个命令,一般来说SGID命令在系统中用得很少,给一个二进制文件添加SGID权限的方法如下:
Sticky权限只能用于设置在目录上,设置了这种权限的目录,任何用户都可以在该目录中创建或修改文件,但是只有该文件的创建者和root可以删除自己的文件。RedHat或CentOS系统中的/tmp目录就拥有Sticky权限(注意看权限部分的最后是t),如下所示:
举个例子,用户john登录后,在/tmp下创建了一个文件john_file,然后,用户jack也登录到系统中进入/tmp目录,他试图删除这个文件,系统会告诉他没有权限删除这个文件,如下所示:
给一个目录添加t权限的方式如下:
在介绍SUID之前,让我们来看一个奇怪的问题:通过前两章的学习我们已经了解到,每个用户都可以使用passwd(该命令的绝对路径是/usr/bin/passwd)来修改自己的密码。系统用于记录用户信息和密码的文件分别是/etc/passwd和/etc/shadow,命令passwd执行的最终结果是去修改/etc/shadow中对应用户的密码。对于这个文件,只有root用户有读权限,而普通用户在修改自己的密码时,最终也会修改这个文件。注意,虽然/etc/shadow文件对于root用户来说只有读权限,但是实际上root是可以使用强写的方式来更新这个文件的。但是普通用户在运行这个命令时居然有权限来写/etc/shadow文件,怎么可能呢?先来确认一下/etc/passwd和/etc/shadow的文件属性,从而确定普通用户根本没有写权限:
[root@localhost ~]# ls -l /etc/passwd -rw-r--r-- 1 root root 1379 Dec 10 04:41 /etc/passwd [root@localhost ~]# ls -l /etc/shadow -r-------- 1 root root 859 Dec 10 04:41 /etc/shadow
再来看一下/usr/bin/passwd的权限,发现有个特别的s权限在用户权限上,这就是奥秘所在—该命令是设置了SUID权限的,这意味着普通用户可以使用root的身份来执行这个命令。那么以上的疑问就很容易解释了。但是必须注意的是,SUID权限只能用于二进制文件。确认一下/usr/bin/passwd的权限:
[root@localhost ~]# ll /usr/bin/passwd -rwsr-xr-x 1 root root 22984 Jan 7 2007 /usr/bin/passwd
下面是给一个二进制文件添加SUID权限的方法:
[root@localhost ~]# chmod u+s somefile
介绍完SUID之后,想必再来理解SGID就很容易了:如果某个二进制文件的用户组权限被设置了s权限,则该文件的用户组中所有的用户将都能以该文件的用户身份去运行这个命令,一般来说SGID命令在系统中用得很少,给一个二进制文件添加SGID权限的方法如下:
[root@localhost ~]# chmod g+s somefile
Sticky权限只能用于设置在目录上,设置了这种权限的目录,任何用户都可以在该目录中创建或修改文件,但是只有该文件的创建者和root可以删除自己的文件。RedHat或CentOS系统中的/tmp目录就拥有Sticky权限(注意看权限部分的最后是t),如下所示:
[root@localhost ~]# ll -d /tmp/ drwxrwxrwt 3 root root 4096 Jan 4 04:53 /tmp/
举个例子,用户john登录后,在/tmp下创建了一个文件john_file,然后,用户jack也登录到系统中进入/tmp目录,他试图删除这个文件,系统会告诉他没有权限删除这个文件,如下所示:
#用户john登录到系统中并创建了/tmp/john_file [john@localhost ~]$ cd /tmp/ [john@localhost tmp]$ touch john_file #用户jack登录到系统中试图删除/tmp/john_file [jack@localhost ~]$ cd /tmp/ [jack@localhost tmp]$ rm john_file rm: remove write-protected regular empty file 'john_file'? y rm: cannot remove 'john_file': Operation not permitted
给一个目录添加t权限的方式如下:
[root@localhost ~]# chmod o+t somedir
相关文章推荐
- 设置UIBarButtonItem不显示按钮的返回文字
- Bluedroid 之GKI框架
- iOS开发 -- UISwitch几种颜色的更改
- Chapter5: View Redraw 和UIScrollView - The Big Nerd Ranch Guide 读书笔记
- UI (User Interface)
- Interface Builder 帮助文档 一 Building User Interface 构建用户界面
- UIView和CALayer的差异
- IOS UITableview 的Cell 封装
- UE3 材质概要
- Maven 使用指南(4): Maven Build 的阶段
- LeetCode Implement Queue using Stacks
- LeetCode Implement Queue using Stacks
- 移动开发UI设计、素材网站
- CocoaPods问题汇总.
- Leetcode#63||Unique Paths II
- iOS中表视图(UITableView)使用详解
- UIButton的一些使用方法
- uefi 里面如何抓到一个变量
- 19.6.1 Partitioning Keys, Primary Keys, and Unique Keys 分区键,主键,和唯一健
- Build your first Django site - QA