2007-06-22

SetUID,SetGID,Sticky bit与file指令

关键字: Linux学习
       以普通用户帐号登录,使用如下命令: ls -l   /usr/bin/passwd。可以看到/usr/bin/passwd文件前面的属性是-r-s--x--x。发现了吗?在原来x的位置有一个s属性,这个就是所谓的SUID。如果是-r-xr-s--x,那么s就成为所谓的SGID。当一个文件具有SUID时,同时others群组具有可以执行权限,那么当others群组执行改程序时,others将拥有改文件的owner权限。

       下面以帐号的密码文件说明。/etc/shadow的权限是“只有root才能存取”,
修改密码一定会和/etc/shadow有关。那为什么我们一般用户可以修改密码?这就涉及到SUID了。一般的,/usr/bin/passwd文件具有SUID属性,当用户使用/usr/bin/passwd这个执行文件时,用户就暂时具备了root权限,因此可以修改/etc/shadow文件。由此可知Set UID(SUID)的主要功能就是在某个文件的执行其间具有文件拥有者的权限,因此s可以代替上面提到的x可执行属性的位置。如果改文件没有x属性,文件的属性会将小写的s变成大写的S。

       不过SUID与SGID的问题是不太安全。所以,在变更一个文件使之具有SUID或者SGID时,必须特别小心。

       Sticky bit
       既然有SUID与SGID,为什么没有在最末为用s取代x的情况呢?这当然没必要,因为那是属于others的权限,一个文件如果是任何人都可以执行,那么本来就已经具备权限了。不过这里还有另一个属性,就是Sticky bit属性(t),这个属性的最大用处就是:具有sticky bit属性的目录,其下的文件或者目录只有文件拥有者和root才有权删除。系统中的/tmp目录就是一个具备改属性的目录。在目录中你可以建立与修改任何文件,但是却只能删除自己建立的文件,除非你是root。可以这样试试:
  1. 以root登入系统,并且进入/tmp目录中;
  2. touch test,并且更改test权限为777;
  3. 以一般用户身份登入,并进入/tmp;
  4. 尝试删除test文件。
file命令
语法:
file   [文件名]
      
       file可以用来查看这个文件的类型,例如ascii文档或二进制文件等,还可以查看文件是否被加入SUID等信息,相当好用。
 
评论
发表评论

您还没有登录,请登录后发表评论

yanshiyi
搜索本博客
最近加入圈子
存档
最新评论