文件除了常规的权限r, w, x 还有一些特殊的权限,s与t权限,具体的用处如下

  1 SetUID

  当s 这个标志出现在文件所有者的x权限上时, 例如/usr/bin/passwd,

[root@oracledb ~]# ll -d /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd

这个文件的权限状态为 -rwsr-xr-x 此时被称作Set UID 简称SUID 的特殊权限。 那么SUID的权限对于一个文件的特殊功能是什么呢?

SUID 仅对二进制程序有效;

执行者对于该程序需要具有x的可执行权限;

本权限仅在执行程序过程中有效;

执行者将具有该程序所有者的权限;

举个例子,我们linux系统中, 所有账号的密码都记录在/etc/shadow 这个文件中,这个文件的权限为---------- 1 root root 1401 Jun 27 16:17 /etc/shadow, 意思是这个文件仅有root可以强制写入。 既然这个文件只有root 可以修改, 那么其他账户能否自己修改自己的密码呢? 显然是可以的,结果不是很冲突麽!

表面上 /etc/shadow  明明只能root强制修改,一般用户不能访问,为什么一般用户还能够修改这个文件内的密码呢?这就是SUID的功能,

  • 普通用户对于/usr/bin/passwd具有x 权限的,它能够执行passwd这个命令;
  • passwd这个命令的拥有者是root;
  • 普通用户执行passwd的过程中,会“暂时”获得root权限;
  • 普通用户执行passwd命令时暂时获得root权限时就可以修改/etc/shadow

如果普通用户执行cat命令去读取/etc/shadow时,能够读取吗?显然不能,因为cat 不具有SUID权限。

此外SUID仅可用在二进制程序上,不能够用在shell script上。

2 Set GID

当s 标志在文件所有者的x 项目为SUID, 那 s 在用户的 x 时称为Set GID即 SGID. 举个例子来说明

[root@oracledb ~]# ls -l /usr/bin/locate
-rwx--s--x. 1 root slocate 38464 Oct 10 2012 /usr/bin/locate

/usr/bin/locate 这个程序可以去查询 /var/lib/mlocate/mlocate.db 这个文件的内容,因为他们属于同一个用户组,如果我们使用普通账号执行locate时, 那这个账号就可以取得slocate 用户组的支持,因此它就可以访问mlocate.db的内容

[root@oracledb ~]# ll /usr/bin/locate /var/lib/mlocate/mlocate.db
-rwx--s--x. 1 root slocate 38464 Oct 10 2012 /usr/bin/locate
-rw-r----- 1 root slocate 4028188 Jun 27 03:13 /var/lib/mlocate/mlocate.db

与SUID不同的是,SGID可以针对文件或者目录来设置。如果是针对文件,SGID与SUID类似

  • SGID 仅对二进制程序有用;
  • 程序执行者对于该程序需要具备 x 的权限;
  • 执行者在执行的过程中获得该程序用户组的支持;

  除了二进制程序之外,SGID能够用在目录上, 当一个目录设置了SGID之后具有如下功能:

  • 用户若对于此目录具有 x 与 r 的权限时,该用户能够进入此目录;
  • 用户在此目录下的有效用户组将会变成该目录的用户组;
  • 若用户在此目录下具有w权限, 则用户所创建的新文件的用户组与此目录的用户组相同;

  3 Sticky Bit

  Sticky Bit 仅针对目录有效, 它对于目录的作用是:

  • 当用户对于此目录具有 w, x 权限时;
  • 当用户在该目录下创建文件或目录时,仅有自己与root 才有权利删除该文件;

  举例来说, /tmp 本身的权利是 drwxrwxrwt 这样的权限下任何人都可以在 /tmp 内添加、修改文件,但仅有该文件/目录创建者与root 能够删除自己的目录或者文件,这个特性非常重要。

  4 SUID/SGUID/SBIT 权限设置

  如何配置文件或者目录使其具有SUID与SGID的权限呢,我们在之前的配置r, w, x的数字前面加上一个数字就可以配置权限了

  • 4 为SGUID
  • 2 为SGID
  • 1 为 SBIT

  举例,如果将一个文件权限改为 "-rwsr-xr-r" 时,由于s 在用户权限中,所以是SUID,在原来的基础755之前加上4即可, chmod 4755 filename

 5  实际应用

系统中有两个用户,分别是latiny1 与latiny2,这两个用户除了自己的用户组还共同支持另外一个用户组project,如果这两个用户需要共同拥有/srv/ahome目录开发权限,且该目录不允许其他人进入查阅。此时我们该如何设置该目录的权限?

1) 创建用户

[root@oracledb srv]# useradd -G project latiny1
[root@oracledb srv]# useradd -G project latiny2
[root@oracledb srv]# id latiny1
uid=503(latiny1) gid=504(latiny1) groups=504(latiny1),501(project)
[root@oracledb srv]# id latiny2
uid=504(latiny2) gid=505(latiny2) groups=505(latiny2),501(project)

  2) 创建目录

[root@oracledb srv]# mkdir ahome
[root@oracledb srv]# ls -l
total 4
drwxr-xr-x 2 root root 4096 Jul 3 11:10 ahome
[root@oracledb srv]# chgrp project ahome/
[root@oracledb srv]# ls -l
total 4
drwxr-xr-x 2 root project 4096 Jul 3 11:10 ahome
[root@oracledb srv]# chmod 770 ahome
[root@oracledb srv]# ls -l
total 4
drwxrwx--- 2 root project 4096 Jul 3 11:10 ahome

3) 测试两个账户能否互相编辑对方在目录ahome下的创建的文件

[root@oracledb srv]# su - latiny1
[latiny1@oracledb ~]$ cd /srv/ahome
[latiny1@oracledb ahome]$ touch lainty1;
[latiny1@oracledb ahome]$ ls -l
total 0
-rw-rw-r-- 1 latiny1 latiny1 0 Jul 3 11:13 lainty1
[latiny1@oracledb ahome]$ su - lainty2
su: user lainty2 does not exist
[latiny1@oracledb ahome]$ su - latiny2
Password:
[latiny2@oracledb ~]$ cd /srv/ahome/
[latiny2@oracledb ahome]$ ls -l
total 0
-rw-rw-r-- 1 latiny1 latiny1 0 Jul 3 11:13 lainty1
[latiny2@oracledb ahome]$ vim lainty1

测试结果显示latiny1创建的文件对应的用户组是latiny1, latiny2不能修改,显然目录/srv/ahome没有达到这两个用户共同开发的目的.

我们加入SGID权限试试

latiny2@oracledb ahome]$ su - root
Password:
[root@oracledb ~]# chmod 2770 /srv/ahome/
[root@oracledb ~]# cd /srv
[root@oracledb srv]# ls -l
total 4
drwxrws--- 2 root project 4096 Jul 3 11:13 ahome

由于目录/srv/ahome被添加了SGID权限,latiny2在此目录下创建的文件用户组为project,并且lainty1可以编辑latiny2创建的文件,而之前latiny1创建的文件用户组为latiny1,latiny2不能编辑。

[latiny2@oracledb ahome]$ touch latiny2
[latiny2@oracledb ahome]$ su - latiny1
Password:
[latiny1@oracledb ~]$ cd /srv/ahome/
[latiny1@oracledb ahome]$ ls -l
total 0
-rw-rw-r-- 1 latiny1 latiny1 0 Jul 3 11:13 lainty1
-rw-rw-r-- 1 latiny2 project 0 Jul 3 11:19 latiny2
[latiny1@oracledb ahome]$ vim latiny2

Linux 文件特殊权限 SUID SGID SBIT的更多相关文章

  1. CentOS 文件特殊权限SUID,SGID,SBIT

    1.SUID ,是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有所有者的权限(仅对拥有执行权限的二进制程序有效). (1)SUID权限仅对二进制程序有效: (2)本权限仅在执行该 ...

  2. chmod 4777? 文件特殊权限 SUID SGID StickyBit

    故事引入 今天碰到了一条指令, test 怎么在777前还有一位,颠覆了我的认知啊,这时候必须翻鸟哥神书了,找到一个链接<7.4.3 文件特殊权限:SUID/SGID/Sticky Bit> ...

  3. Linux 特殊权限 SUID,SGID,SBIT

    setuid 和 setgid 分别是 set uid ID upon execution 和 set group ID upon execution 的缩写.我们一般会再次把它们缩写为 suid 和 ...

  4. 【Linux】文件特殊权限 SUID/SGID/Sticky Bit

    linux中除了常见的读(r).写(w).执行(x)权限以外,还有3个特殊的权限,分别是setuid.setgid和stick bit 1.setuid.setgid 先看个实例,查看你的/usr/b ...

  5. linux 文件三大特殊权限(SUID SGID SBIT)

    SGID(这个应该是文件共享里面最常用权限管理手段) 作用于目录或可执行程序,作用于目录代表在此目录创建的文件或目录,默认的属组继承此目录的属组.例如 我这个testgroup 没有设置SGID .我 ...

  6. Linux 特殊用户权限 suid,sgid, sticky

    每个进程会维护有如下6个ID: 真实身份 : real UID, readl GID --> 登录 shell 使用的身份 有效身份 : effective UID, effective GID ...

  7. Linux文件与目录的默认权限与隐藏权限 - umask, chattr, lsattr, SUID, SGID, SBIT, file

    文件默认权限:umask [root@www ~]# umask 0022 <==与一般权限有关的是后面三个数字! [root@www ~]# umask -S u=rwx,g=rx,o=rx ...

  8. 文件的特殊权限(SUID,SGID,SBIT)

    文件的一般权限:r w x  对应 421  文件的特殊权限:SUID SGID SBIT对应 421  文件的隐藏权限:chattr设置隐藏权限,lsattr查看文件的隐藏权限. 文件访问控制列表: ...

  9. Linux之特殊权限(SUID/SGID/SBIT)

    特殊权限的介绍 Set UID 当s这个标志出现在文件所有者的x权限上时,如/usr/bin/passwd这个文件的权限状态:“-rwsr-xr-x.”,此时就被称为Set UID,简称为SUID.那 ...

随机推荐

  1. Codeforces Round #542 C. Connect 搜索

    C. Connect time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  2. Java面试知识点之线程篇(三)

    前言:这里继续对java线程相关知识点进行总结,不能间断. 1.yield()方法 yield()的作用是让步.它能让当前线程由“运行状态”进入到“就绪状态”,从而让其它具有相同优先级的等待线程获取执 ...

  3. C. Nice Garland

    题意: 就是有一串灯分别颜色是R,G,B.要求将每种颜色的灯相隔2个不同的灯.比如,RGR变成RGB才叫好看. 分析: RGB有6种排列,分别是:"RGB", "RBG& ...

  4. 【转】JS中setTimeout和setInterval的最大延时值详解

    前言 JavaScript提供定时执行代码的功能,叫做定时器(timer),主要由setTimeout()和setInterval()这两个函数来完成.而这篇文中主要给大家介绍的是关于JS中setTi ...

  5. 【移动端】icon中ng-cordova使用

    cordova介绍 Cordova提供了一组设备相关的API,通过这组API,移动应用能够以JavaScript访问原生的设备功能,如摄像头.麦克风等. Cordova支持如下7种移动操作系统:iOS ...

  6. 仿照wtform自定义Form组件

    仿照wtforms自定义Form组件 1.wtforms 点击查看源码分析及使用方法 2.自定义Form组件 #!usr/bin/env python # -*- coding:utf-8 -*- f ...

  7. nginx之七:nginx path(root)文件路径配置

    nginx指定文件路径有两种方式root和alias,这两者的用法区别,使用方法总结了如下,方便大家在应用过程中,快速响应.root和alias主要区别在于如何解释location后面的uri,这会使 ...

  8. python:unittest之跳过测试和预期失败的用例

    在利用单元测试框架执行测试用例的过程中,有时只需要执行一部分用例,或者跳过某些暂不需要执行的用例,python的unittest框架就内置这样的功能. 前面的博客介绍了unittest框架的测试用例加 ...

  9. 算法相关——Java排序算法之希尔排序(五)

    个子块,即{3,5},{1,0},{5,2},{9,4},{6,12},将每个子块进行插入排序(即第i位与第i+5位进行比较交换),初步排序结果为{3,0,2,4,6,5,1,5,9,12}.希尔排序 ...

  10. web路径问题相对路径和绝对路径,计算机相对路径和绝对路径

    **首先得明白相对路径和绝对路径的概念和区别:****相对路径:**相对路径就是指由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系.使用相对路径可以为我们带来非常多的便利.([百度百科])* ...