注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

PostgreSQL 中文网

 
 
 

日志

 
 

RHEL6 学习:文件特殊权限位学习( SUID、SGID、STICKY )  

2012-07-21 21:38:59|  分类: RHEL |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

       关于Linux 系统上文件的特殊权限( SUID、SGID、STICKY ) 之前也知道些,可是过段时间
又忘了,今天再次学习了这方面的知识,好记心不如烂笔头,还是写下来比较好。


一 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
-rwx------. 1 root root 53 Jul 22 21:56 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
drwxr-sr-x. 2 root root 4096 Jul 21 21:12 share_dir

[root@redhat6 test]# chmod 2777 share_dir
[[root@redhat6 test]# ll -d share_dir
drwxrwsrwx. 2 root root 4096 Jul 21 21:16 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
[root@redhat6 test]# ll -d work_dir
drwxrwxrwt. 2 root root 4096 Jul 21 21:20 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://molinux.blog.51cto.com/2536040/469523
http://blog.chinaunix.net/space.php?uid=23370286&do=blog&id=2427160    
 

  评论这张
 
阅读(24715)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016