gaohan 发表于 2018-5-20 09:26:28

Linux基础(14)Linux的特殊权限

  Linux下除了r,w,x的权限之外,还有SUID SGID SBIT三种特殊权限

[*]  SUID
  如果某个文件具有SUID权限的时候,运行某程序时,执行者暂时拥有文件所有者的权限;只能作用在二进制程序文件上
  对于shell脚本是无效的。
  chmod u+s FILE#注意,必须添加文件的所有者身上。
  chmod u-s FILE
  如果FILE本身原来就有执行权限,则SUID显示为s;否则显示S;

  对于passwd文件,它具有SUID权限,当一个非root用户试图执行passwd修改自己密码时候,启动的进程的属主是root,而非这个用户,由于passwd是通过修改/etc/shadow下的文件来修改自己密码的,因此尽管该用户对/etc/shadow文件没有读写权限,他还是可以修改文件的,因为进程的属主是root.

  2.SGID:
  SGID表现为在文件的用户组执行权限上为s
  SGID既可以作用于文件上,也可以作用在目录上。
  作用于文件时,仅对二进制程序有效,用户在执行程序的时候具有改程序用户组的支持。
  作于与目录时(常见),用户在此目录下的基本组变为此目录的用户组,即用户在这个目录下创建的文件的属组与该目录的属组相同,而不是用户的基本组。这个特性常用在项目开发上的权限配置上。
  修改方式
  chmod g+s DIR|FILE
  chmod g-s DIR|FILE
  

  3.SBIT: 如果某个目录具有SBIT权限,那么用户在这个目录下,只能删除,移动,重命名自己创建的文件,而不能删除其他人的文件。
  修改方式
  chmod o+t DIR
  chmod o-t DIR
  ========================================================
  下面我们来进行一个小实验,来巩固一下SGID,SBIT.
  情景:假设存在一个项目目录test,该目录的属组是develop,要使tom和joe两个用户可以在test下面创建文件,并且可以彼此查看,修改对方的文件,但是不允许删除对方的文件,对于其他人来说,对于test目录没有权限。要如何配置?
  很简单,只需要将tom和joe的附加组设置为develop,并且将为test目录添加SGID,SBIT权限即可。
  具体步骤如下
  groupadd develop
  cd /tmp
  mkdir test
  chmod 770 test
  chown root.develop test
  chmod g+s test
  chmod o+t test
  useradd -G develop joe
  useradd -G develop tom
  

  

  
  
页: [1]
查看完整版本: Linux基础(14)Linux的特殊权限