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

权限

 

命令

 

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
-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://francs3.blog.163.com/blog/static/40576727201262193649255/
   


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值