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

落叶清风L的博客

努力向前

 
 
 

日志

 
 
 
 

Linux 下文件的特殊权限  

2015-01-20 23:46:57|  分类: linux基础 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
        文件的权限 : rwx rwx rwx uid gid     
        文件的特殊权限 , set uid , set gid , sticky bit . . .    
        特殊权限 sticky bit :
        对于设置了粘着位的的目录:  设置了粘着位的目录, 典型的如/tmp    /var/tmp , 这个目录的特点是, 每个用户都可以在其下建立文件 , 目录的权限 .但在不能删除除自己建立外的其它文件 , 当然这样的权限存在是有理由的 , 我们的服务会产生中间文件 , 每个用户开启的服务不同, 身份也不同,  虽然都是临时文件, 但是服务期间可能会用到临时文件, 所以不允许其它用户更改.中间文件开机会清除 , 就根这个据原因 , 有了tmp 这样的一个目录, 统一放置服务(进程)的临时文件 , 开机时统一清除. 所以给这个目录赋予 t 权限 , 就很合理了.      
       
        有人说 , 那我可不可以强行删除别人的文件呢? 只能说 ! 不行 , 因为你没有权限 , 删除或者新建一个文件必须要对这个文件所在目录有写权限. 有人想用chmod改文件目录或者文件的权限,可惜这个文件或者目录不是属于你或者你不在人家的组里, 所以 , 这个办法行不通啊 .      rm 这个命令对文件 我们运行的时候是以普通用户身份运行的 , 想删除文件必须要提权 , 提权的话 , 需要暂时借用root 权限 , sudo 就可以了 , 我们给rm 命令设置一个位 set uid , 设置用户id 位(很危险 , 改了一定记得再改回来!!!)  先试试正常的rm 删除一个不能写的目录下的文件:
Linux 下文件的特殊权限 - 萧然AND落叶清风L - 落叶清风L的博客

Linux 下文件的特殊权限 - 萧然AND落叶清风L - 落叶清风L的博客
 
         我们给rm 加上u+s 权限再试试 :
         sudo chmod u+s /usr/bin/rm
Linux 下文件的特殊权限 - 萧然AND落叶清风L - 落叶清风L的博客
 
现在来试试删除一个你对目录没有写权限的文件吧!
Linux 下文件的特殊权限 - 萧然AND落叶清风L - 落叶清风L的博客
我们赶紧改回来权限 sudo chmod u-s /usr/bin/rm
 Ok , 为什么呢 , 写个程序看看什么原因 :
Linux 下文件的特殊权限 - 萧然AND落叶清风L - 落叶清风L的博客

看看这个程序对应的可执行文件设置u+s 位时候的情况 !
gcc b.c
sudo chown root a.out ;
sudo chmod u+s a.out ;
注意执行的顺序 , 确保a.out 所属用户为root, 组不用管 , 而且a.out 用户有s 位
./a.out
再开一个终端 ... 敲下面这个
ps aux | grep a.out
Linux 下文件的特殊权限 - 萧然AND落叶清风L - 落叶清风L的博客
 
原来是这样 ... a.out 的运行用户为root .
所以说可以删除掉文件 , 因为超级用户不受权限的限制.

对于set git 位需要验证的时间稍长. 耐心一下, 还是很有趣的.  写了一个简单的程序测试之 :
Linux 下文件的特殊权限 - 萧然AND落叶清风L - 落叶清风L的博客
编译我们的程序 , 不做任何添加操作 , 仅仅编译它 (文件名 a.c ) 
gcc a.c 直接运行可执行文件 , 看看是什么情况 :
Linux 下文件的特殊权限 - 萧然AND落叶清风L - 落叶清风L的博客
./a.out
Linux 下文件的特殊权限 - 萧然AND落叶清风L - 落叶清风L的博客
没有权限新建文件 , 因为作为普通用户 , rightTest 目录的其它用户权限中没有可写权限(图在最上面), 所以 tutu 这个用户不能在目录下新建文件 .
我们看到 , rightTest 目录的所属组有可写权限 , 我们可以将a.out 文件的所属组改为 root , 并设置gid bit , 即a.out 的 g+s . 试试看 ...
sudo chgrp root a.out ;
sudo chmod g+s a.out ;
./a.out
Linux 下文件的特殊权限 - 萧然AND落叶清风L - 落叶清风L的博客
再来运行a.out 试试能不能在rightTest 下新建文件 :
./a.out
Linux 下文件的特殊权限 - 萧然AND落叶清风L - 落叶清风L的博客
没有错误信息 !!! 再 看看rightTest 目录下吧 .
Linux 下文件的特殊权限 - 萧然AND落叶清风L - 落叶清风L的博客
 
成功了 , 折腾这么久 . 好了, 来总结一下吧 .

  套用APUE 上经典, 我们的进程访问文件是根据有效用户ID 和有效组ID访问的 , 一般情况下 , 我们的实际用户ID/实际组ID 和有效用户ID/有效组ID 是相同的, 不同的话 , 就是由于 这些个 u+s 或者 g+s 的情况存在 . 当用户的设置权限位被设置 , 即u+s , 那么进程在运行时 ,内核看到这个进程对应的可执行文件设置了用户ID , 自动将用户身份提权位root , 即有效用户为文件的所有者ID , 同理, 若文件的所属组权限位被设置, 即g+s , 那么进程在运行时 , 有效组ID 为文件所属组ID , 当且仅对, 可执行文件有效 . 设置组ID对目录也有效 , 当一个目录组ID 位被设置 , 即g+s , 那么在此目录下新建的文件都具有该组的身份.    
        Linux 在判断的时候遵循一下步骤: 摘自APUE
1.若进程的有效用户ID 是0 (超级用户)  则允许访问 . 给予了超级用户对整个文件系统进行处理的最充分的自由 .
2. 若进程的有效用户ID 等于文件所有者ID (也就是进程拥有此文件) , 那么所有者适当的访问权限位被设置,则允许访问;否则拒绝访问 .
3. 若进程的有效组ID或进程的附属组ID之一等于文件的组ID , 那么如果适当的权限位被设置, 则允许访问; 否则拒绝访问.
4. 若其它用户适当的访问权限位被设置 , 则允许访问; 否则拒绝访问.

       按顺序执行这4步 , 注意, 如果进程拥有此文件,(第二步), 则按用户访问权限批准或拒绝改进程对文件的访问---不查看组访问权限. 类似的, 若进程并不拥有该文件.但进程属于某个适当的组, 则按组访问权限批准或拒绝该进程对文件的访问 --- 不查看其他用户的访问权限 .

参考 <<APUE>>
IRC #osdev 频道
                                                                                          ---windleaves
                                                                                          2015-1-20:23:39
  评论这张
 
阅读(43)| 评论(0)
推荐 转载

历史上的今天

评论

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

页脚

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