权限 |
| 命令 |
|
SUID | 用户的权限是该程序文件属主的权限: 如属主是root, 那么执行该程序的用户就将暂时获得root权限 | chmod u+s filename (suid) chmod 4777 filename | 一个典型的例子就是 passwd 命令修改密码 |
SGID | sgid与suid类似, 只是执行程序时获得的是文件属组的权限。 | chmod g+s filename (sgid) chmod 2777 filename |
|
Sticky | 控制在共享目录下文件的删除权限 | chmod o+t temp_dir chmod 1777 | Temp目录的文件权限 |
一 SUID 简介
当一个可执行文件被设置了 SUID 属性时,其它用户执行此文件时,将以此文件的属主身份
运行,设置方式为 " chmod u+s file_name ",一个典型的例子就是 passwd 命令修改密码。我
们知道 Linux 的用户可以执行 passwd 命令修改自己的密码,而用户的密码信息保存在文件
"etc/shadow"文件里,此文件的权限为 000,那为什么普通用户执行 passwd 命令修改密码时,
也有权限写这个文件呢?
--1.1 查看 /etc/shadow 文件权限
[root@redhat6 test]# ll /etc/shadow ----------. 1 root root 1621 Jul 21 18:10 /etc/shadow |
--1.2 查看 passwd 脚本权限
[root@redhat6 test]# which passwd /usr/bin/passwd [root@redhat6 test]# ll /usr/bin/passwd -rwsr-xr-x. 1 root root 26980 Jan 29 2010 /usr/bin/passwd |
备注:原来脚本 /usr/bin/passwd 的权限已设置 SUID 属性 ,所以当普通用户执行 /usr/bin/passwd
命令修改密码时,实际上是以 root 的身份执行这个脚本。
--1.3 SUID 和 SHELL 脚本
这里做个简单的测试,来体验一下给可执行文件标记GUID的效果,先用 root 用户创建一个脚本 1.sh,这个脚本的
任务是查看属于 root 的一个日志文件,然后给 1.sh 加上 GUID, 目标给普通用户执行这个脚本1.sh 并查看本身没有
读权限的文件。
--1.3.1 查看 /test 目录权限
[root@redhat6 test]# cd / [root@redhat6 /]# ll -d test drwxrwxrwx. 4 root root 4096 Jul 22 22:05 test |
备注: /test 目录权限为 777。
--1.3 2 编写测试脚本 1.sh
[root@redhat6 test]# cat 1.sh #!/bin/bash cat /test/log.txt |
--1.3.3 测试脚本 1.sh 权限和 log.txt 权限
[root@redhat6 test]# chmod 4755 1.sh [root@redhat6 test]# ll 1.sh -rwsr-xr-x. 1 root root 31 Jul 22 22:05 1.sh [root@redhat6 test]# ll log.txt |
备注:脚本 1.sh 的属主为 root,脚本内容是查看 log.txt 的内容, log.txt 的权限为 700,
只有 root 用户才能查看。
--1.3.4 以 usera 用户登陆测试
[root@redhat6 ~]# su - usera [usera@redhat6 ~]$ cd /test [usera@redhat6 test]$ ll 1.sh -rwsr-xr-x. 1 root root 31 Jul 22 22:05 1.sh [usera@redhat6 test]$ ./1.sh cat: /test/log.txt: Permission denied |
备注:虽然脚本 1.sh 已经标记 GUID,但当脚本执行到 cat 命令时,仍然报权限问题。
--1.3.5 查看 cat 命令权限
[root@redhat6 test]# which cat /bin/cat [root@redhat6 test]# ll /bin/cat -rwxr-xr-x. 1 root root 47976 Oct 5 2011 /bin/cat |
--1.3.6 给 /bin/cat 脚本加上 SUID
[root@redhat6 test]# chmod u+s /bin/cat [root@redhat6 test]# ll /bin/cat -rwsr-xr-x. 1 root root 47976 Oct 5 2011 /bin/cat |
--1.3.7 切换到 usera 再次测试
[usera@redhat6 test]$ ./1.sh 2012-07-22 21:33:22 2012-07-22 21:33:28 test 000 000 |
备注:给 /bin/cat 脚本加上 GUID 后,普通用户能够调用脚本 1.sh 查看 log.txt (700) 的内容了。
二 SGID 简介
SGID 一般在目录上设置,在设置 SGID 属性的目录里创建的文件的 GID 会被默认设置成上组目录的
GID,设置方式为 "chmod g+s directory",下面演示下。
--2.1 创建用户
[root@redhat6 /]# useradd usera [root@redhat6 /]# useradd userb |
--2.2 创建目录
[root@redhat6 /]# mkdir -p /test/share_dir [root@redhat6 test]# ll -d share_dir drwxr-xr-x. 2 root root 4096 Jul 21 21:12 share_dir [root@redhat6 test]# chmod g+s share_dir [root@redhat6 test]# ll -d share_dir [root@redhat6 test]# chmod 2777 share_dir |
备注:也可以一步到位,使用 "chmod 2777 share_dir" 命令修改目录权限。
--2.3 usera 登陆并创建文件
[root@redhat6 test]# su - usera [usera@redhat6 ~]$ cd /test/share_dir [usera@redhat6 share_dir]$ touch a.txt [usera@redhat6 share_dir]$ ll total 0 -rw-rw-r--. 1 usera root 0 Jul 21 21:15 a.txt |
备注:usera 创建的文件的 GID 默认被改为了 root。
--2.4 userb 登陆并创建文件
[root@redhat6 test]# su - userb [userb@redhat6 ~]$ cd /test/share_dir [userb@redhat6 share_dir]$ touch b.txt [userb@redhat6 share_dir]$ ll total 0 -rw-rw-r--. 1 usera root 0 Jul 21 21:15 a.txt -rw-rw-r--. 1 userb root 0 Jul 21 21:16 b.txt |
备注:userb 创建的文件的 GID 默认被改为了 root。
三 STICKY 位
STICKY 位主要是用来控制在共享目录下文件的删除权限的,假如在一个权限为 777 的共享目录
下, usera 创建的文件可能被其它用户删除,显示这是不合理的,那么可以在这个目录下设置 STICKY
位,从而避免这种情况发生,典型的例子就是 /tmp 目录。
--3.1 /tmp 目录权限
[userb@redhat6 share_dir]$ cd / [userb@redhat6 /]$ ll -d /tmp drwxrwxrwt. 14 root root 4096 Jul 21 20:10 /tmp |
备注:在 /tmp 目录下,用户只能删除自己的文件,而不能删除其它用户的文件,接下来再做个测试。
--3.2 创建目录
[root@redhat6 test]# cd /test [root@redhat6 test]# mkdir work_dir [root@redhat6 test]# ll -d work_dir drwxr-xr-x. 2 root root 4096 Jul 21 21:20 work_dir [root@redhat6 test]# chmod o+t work_dir/ [root@redhat6 test]# chmod 1777 work_dir |
备注:也可以使用命令 "chmod 1777 work_dir" 一步完成权限设置。
--3.3 usera 创建文件
[root@redhat6 ~]# su - usera [usera@redhat6 ~]$ pwd /home/usera [usera@redhat6 ~]$ cd /test/work_dir [usera@redhat6 work_dir]$ touch a.txt [usera@redhat6 work_dir]$ ll total 0 -rw-rw-r--. 1 usera usera 0 Jul 21 21:23 a.txt |
--3.4 userb 创建文件
[root@redhat6 ~]# su - userb [userb@redhat6 ~]$ cd /test/work_dir [userb@redhat6 work_dir]$ touch b.txt [userb@redhat6 work_dir]$ ll total 0 -rw-rw-r--. 1 usera usera 0 Jul 21 21:23 a.txt -rw-rw-r--. 1 userb userb 0 Jul 21 21:23 b.txt |
--3.5 userb 尝试删除 usera 的文件
[userb@redhat6 work_dir]$ rm a.txt rm: remove write-protected regular empty file `a.txt'? y rm: cannot remove `a.txt': Operation not permitted |
备注:当 userb 尝试删除目录 /test/work_dir 下 usera 的文件 a.txt 时,报权限问题。
四 参考
http://francs3.blog.163.com/blog/static/40576727201262193649255/