特殊权限的介绍

Set UID

当s这个标志出现在文件所有者的x权限上时,如/usr/bin/passwd这个文件的权限状态:“-rwsr-xr-x.”,此时就被称为Set UID,简称为SUID。那么这个特殊权限的特殊性的作用是什么呢?
1、SUID权限仅对二进制程序(binary program)有效;
2、执行者对于该程序需要具有x的可执行权限;
3、本权限仅在执行该程序的过程中有效(run-time);
4、执行者将具有该程序拥有者(owner)的权限。
SUID的目的就是:让本来没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源。passwd就是一个很鲜明的例子,下面我们就来了解一下这相passwd执行的过程。
我们知道,系统中的用户密码是保存在/etc/shadow中的,而这个文件的权限是----------.
(这个权限和以前版本的RHEL也有差别,以前的是-r--------)。其实有没有r权限不重要,因为我们的root用户是拥有最高的权限,什么都能
干了。关键是要把密码写入到/etc/shadow中。我们知道,除了root用户能修改密码外,用户自己同样也能修改密码,为什么没有写入权限,还能修
改密码,就是因为这个SUID功能。

下面就是passwd这个命令的执行过程
1、因为/usr/bin/passwd的权限对任何的用户都是可以执行的,所以系统中每个用户都可以执行此命令。
2、而/usr/bin/passwd这个文件的权限是属于root的。
3、当某个用户执行/usr/bin/passwd命令的时候,就拥有了root的权限了。
4、于是某个用户就可以借助root用户的权力,来修改了/etc/shadow文件了。
5、最后,把密码修改成功。

注:这个SUID只能运行在二进制的程序上(系统中的一些命令),不能用在脚本上(script),因为脚本还是把很多的程序集合到一起来执行,而不是脚本自身在执行。同样,这个SUID也不能放到目录上,放上也是无效的。

Set GID

我们前面讲过,当s这个标志出现在文件所有者的x权限上时,则就被称为Set UID。那么把这个s放到文件的所属用户组x位置上的话,就是SGID。如开头的/usr/bin/wall命令。
那么SGID的功能是什么呢?和SUID一样,只是SGID是获得该程序所属用户组的权限。
这相SGID有几点需要我们注意:
1、SGID对二进制程序有用;
2、程序执行者对于该程序来说,需具备x的权限;
3、SGID主要用在目录上;
理解了SUID,我想SGID也很容易理解。如果用户在此目录下具有w权限的话,若使用者在此目录下建立新文件,则新文件的群组与此目录的群组相同。

Sticky Bit

这个就是针对others来设置的了,和上面两个一样,只是功能不同而已。
SBIT(Sticky Bit)目前只针对目录有效,对于目录的作用是:当用户在该目录下建立文件或目录时,仅有自己与 root才有权力删除。
最具有代表的就是/tmp目录,任何人都可以在/tmp内增加、修改文件(因为权限全是rwx),但仅有该文件/目录建立者与 root能够删除自己的目录或文件。

注:这个SBIT对文件不起作用。

SUID/SGID/SBIT权限设置

和我们前面说的rwx差不多,也有两种方式,一种是以字符,一种是以数字。
4 为 SUID = u+s
2 为 SGID = g+s
1 为 SBIT = o+t
下面我们就来看看如何设置,并看看达到的效果。

先看SUID的作用及设置

[root@japie ~]# cd /tmp/
[root@
japie
tmp]# cp /usr/bin/passwd ./
[root@
japie
tmp]# mkdir testdir

上面两步是在/tmp目录下创建passwd文件和testdir目录
下面看看这两个的权限
[root@
japie
tmp]# ls -l passwd ; ls -ld testdir/
-rwxr-xr-x. 1 root root 26968 Jan 20 23:27 passwd
drwxr-xr-x. 2 root root 4096 Jan 20 19:25 testdir/

我们切换到yufei
用户,然后修改自己的密码
[root@
japie
tmp]# su yufei
[yufei@
japie
i tmp]$ ./passwd
Changing password for user
japie
.
Changing password for yufei.
(current) UNIX password:
New password:            
Retype new password:
passwd: Authentication token manipulation error

发现上面的yufei改不了自己的密码,为什么呢?就是因为没有权限把密码写入到/etc/shadow中。想让普通用户能修改/etc/shadow的话,那就需要用到SUID了。
[yufei@
japie
tmp]$ su root
Password:
[root@
japie
tmp]# chmod u+s passwd
[root@
japie
tmp]# ls -l passwd
-rwsr-xr-x. 1 root root 26968 Jan 20 23:27 passwd

看到有SUID权限了,下面再来修改yufei自己的密码
[yufei@
japie
tmp]$ ./passwd
Changing password for user yufei.
Changing password for yufei.
(current) UNIX password:
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

我们发现已经成功了。
我想这一下,你对SUID的作用已经了解了吧。
如果想把这个改回来(就是把SUID的权限去掉),我们用数字方式来设置
[root@
japie
tmp]# chmod 0755 passwd
[root@
japie
tmp]# ls -l passwd
-rwxr-xr-x. 1 root root 26968 Jan 20 23:27 passwd

OK这样就改过来了,这个数字的原理和我们前面讲的rwx是一样的,只是在最前面设置相应的数字而已。

注:在普通用户修改自己的密码是,密码要设置的复杂点,否则的话,通过不了认证,普通用户和root用户的权限是不同的。

再看SGID的作用及设置

我们以前面建立的/tmp/testdir为例子
[root@
japie
tmp]# ls -ld testdir/
[root@
japie
tmp]# chmod 757 testdir/
[root@
japie
tmp]# ls -ld testdir/
drwxr-xrwx. 2 root root 4096 Jan 20 19:25 testdir/

这时候,任何用户对此目录都有写入权限,那么我们就在这个目录里面创建文件与目录,并看看他们的权限如何
[root@
japie
tmp]# su
japie

[yufei@
japie
tmp]$ touch testdir/file1
[yufei@
japie
tmp]$ mkdir testdir/dir1
[yufei@
japie
tmp]$ ls -l testdir
total 0
drw-rw-r--. 1
japie

japie
0 Jan 21 10:33 dir1
-rw-rw-r--. 1
japie

japie
0 Jan 21 10:33 file1

这时候的文件与目录权限都是创建者的本身
下面我们就来看看,把这个目录加上SGID权限后,再创建文件与目录,会是什么样的效果
[
japie
@
japie
tmp]$ su root
Password:
[root@
japie
tmp]# chmod g+s testdir/
[root@
japie
tmp]# ls -ld testdir/
drwxr-srwx. 2 root root 4096 Jan 21 10:33 testdir/
[root@
japie
tmp]# su yufei
[yufei@
japie
tmp]$ touch testdir/file2
[yufei@
japie
tmp]$ mkdir testdir/dir2
[yufei@
japie
tmp]$ ls -l testdir/
total 0
drw-rw-r--. 1
japie

japie
0 Jan 21 10:33 dir1
drw-rw-r--. 1
japie
root  0 Jan 21 10:36 dir2
-rw-rw-r--. 1
japie
i
japie
0 Jan 21 10:33 file1
-rw-rw-r--. 1
japie
root  0 Jan 21 10:35 file2
[yufei@
japie
tmp]$ ls -ld testdir/
drwxr-srwx. 2 root root 4096 Jan 21 10:36 testdir/

这时候我们就发现,file2和dir2的用户组变成了root了,也就是他们上层目录testdir这个目录的所属用户组。
这个应用,应用在一个项目的共同开发上,是很方便的。
[yufei@
japie
tmp]$ su root
Password:
[root@
japie
tmp]# chmod g-s testdir/
[yufei@
japie
tmp]$ ls -ld testdir/
drwxr-xrwx. 2 root root 4096 Jan 21 10:36 testdir/

这样就还原了

最后我们来看SBIT的作用及设置

[root@
japie
tmp]# rm -fr testdir/*
[root@
japie
tmp]# ls -ld testdir/
drwxr-xrwx. 2 root root 4096 Jan 21 11:42 testdir/

清空/tmp/testdir/目录里面的全部内容。
我们切换成普通用户,然后再里面创建文件,至少需要两个普通用户来测试这个,如果没有的话,就自己建立。
[root@
japie
tmp]# su
japie

[yufei@
japie
tmp]$ touch testdir/
japie
_file
[yufei@
japie
i tmp]$ ls -l testdir/
total 0
-rw-rw-r-- 1
japie

japie
0 Jan 21 11:45
japie
_file

这时候我们建立了一个文件,我们换成另外一个用户
[yufei@
japie
tmp]$ su opsers
Password:
[opsers@
japie
tmp]$ ls -ld testdir/
drwxr-xrwx. 2 root root 4096 Jan 21 11:45 testdir/

我们看到,虽然其他用户对yufei_file只有只读权限,但由于japie
_file所在的目录,对其他人是全部的权限,所以,我们换其他用户还是可以删除这个文件的,看操作
[opsers@
japie
tmp]$ rm -f testdir/
japie
_file
[opsers@
japie
tmp]$ ls testdir/

发现我们已经删除了这个不属于我们的权限。
下面我们就给这个目录加上SBIT权限,再来看看效果
[opsers@
japie
tmp]$ su root
Password:
[root@
japie
tmp]# chmod o+t testdir
[root@
japie
tmp]# ls -ld testdir/
drwxr-xrwt. 2 root root 4096 Jan 21 11:49 testdir/

再一次切换普通用户,创建文件
[root@
japie
tmp]# su
japie

[yufei@
japie
tmp]$ touch testdir/
japie
_file
[yufei@
japie
tmp]$ ls -l testdir/
japie
_file
-rw-rw-r-- 1
japie

japie
0 Jan 21 11:51 testdir/
japie
_file

这个文件的权限还是和第一次创建的时候是一样的,我们再换成其他的用户,看看能不能再次删除这个文件
[yufei@
japie
tmp]$ su opsers
Password:
[opsers@
japie
tmp]$ rm -f testdir/
japie
_file
rm: cannot remove `testdir/
japie
_file': Operation not permitted

看到提示,说权限不够了,只能由这个文件的创建者或root用户才能删除。这个我们就不演示了。
如果要还原权限的话,
[opsers@
japie
tmp]$ su root
Password:
[root@
japie
tmp]# chmod o-t testdir
[root@
japie
tmp]# ls -ld testdir/
drwxr-xrwx. 2 root root 4096 Jan 21 11:51 testdir/

两个需要注意的问题

OK,关于SUID/SGID/SBIT这些特殊权限的应用和作用我们已经讲完了。但如果你仔细一点的话,会发现,我并没有用数字方式来更改这个特殊的权限,为什么呢?且看下面的分析。

问题1:用数字改变目录的特殊权限,不起作用。

我们把/tmp/下面,我们自己建立的实验文件删除
[root@
japie
tmp]# rm -fr testdir/
[root@
japie
tmp]# rm -fr passwd

然后再重新创建一个文件和目录,
[root@
japie
tmp]# cp /usr/bin/passwd ./
[root@
japie
tmp]# mkdir testdir
[root@
japie
tmp]# ls -l passwd ;ls -ld testdir/
-rwxr-xr-x 1 root root 26968 Jan 21 12:00 passwd
drwxr-xr-x 2 root root 4096 Jan 21 12:00 testdir/

下面我们就来用数字方式来更改这三个特殊的权限,看看会有什么样的结果
[root@yufei tmp]# chmod 4755 passwd
[root@yufei tmp]# chmod 3755 testdir/
[root@yufei tmp]# ls -l passwd ;ls -ld testdir/
-rwsr-xr-x 1 root root 26968 Jan 21 12:00 passwd
drwxr-sr-x 2 root root 4096 Jan 21 12:00 testdir/

发现用这种方式增加这三个特殊权限没有问题,那么我们再把权限改回去看看
[root@
japie
tmp]# chmod 0755 passwd
[root@
japie
tmp]# chmod 0755 testdir/
[root@
japie
tmp]# ls -l passwd ;ls -ld testdir/
-rwxr-xr-x 1 root root 26968 Jan 21 12:00 passwd
drwxr-sr-x 2 root root 4096 Jan 21 12:00 testdir/

我们发现,对文件,权限是改回去了,而对于目录,只改回去了SBIT的权限,对SUID和SGID改不回去。这是RHEL6上的实验结果,可能是出于安全性的考虑吗?这个我就不清楚了,也找不到相关的资料。如果各位网友,有知道什么原因的,欢迎与我联系。在此先谢过了。
所以说,建议大家还是用最明了的方式,直接用+-来更改,无论方法如何,最终能得到结果就OK了。哈哈……

问题2:为什么会有大写的S和T。

还是用上面的文件和目录
[root@
japie
tmp]# ls -l passwd ;ls -ld testdir/
-rwxr-xr-x 1 root root 26968 Jan 21 12:00 passwd
drwxr-sr-x 2 root root 4096 Jan 21 12:00 testdir/

我们把passwd和testdir的x权限去掉
[root@
japie
tmp]# chmod u-x passwd
[root@
japie
tmp]# chmod o-x testdir/
[root@
japie
tmp]# ls -l passwd ;ls -ld testdir/
-rw-r-xr-x 1 root root 26968 Jan 21 12:00 passwd
drwxr-sr-- 2 root root 4096 Jan 21 12:00 testdir/

再给他们加上SUID和SBIT权限
[root@
japie
tmp]# chmod u+s passwd
[root@
japie
tmp]# chmod o+t testdir/
[root@
japie
tmp]# ls -l passwd ;ls -ld testdir/
-rwSr-xr-x 1 root root 26968 Jan 21 12:00 passwd
drwxr-sr-T 2 root root 4096 Jan 21 12:00 testdir/

我们看到,这时候的小s和小t已经变成了大S和大T了,为什么呢?因为他们这个位置没有了x权限,如果没有了x权限,根据我们上面讲的内容,其实,这个特
殊的权限就相当于一个空的权限,没有意义。也就是说,如果你看到特殊权限位置上变成了大写的了,那么,就说明,这里有问题,需要排除。

来源:http://cjjwzs.iteye.com/blog/1035777

Linux之特殊权限(SUID/SGID/SBIT)的更多相关文章

  1. Linux 文件特殊权限 SUID SGID SBIT

    文件除了常规的权限r, w, x 还有一些特殊的权限,s与t权限,具体的用处如下 1 SetUID 当s 这个标志出现在文件所有者的x权限上时, 例如/usr/bin/passwd, [root@or ...

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

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

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

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

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

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

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

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

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

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

  7. centos 特殊权限 各种搜索命令 lsattr ,chattr,suid,sgid,sbit,file,type是否是内置命令,stat文件属性 ,whereis,locate,find,ln 内部命令和外部命令 第五节课

    centos 特殊权限 各种搜索命令 lsattr ,chattr,suid,sgid,sbit,file,type是否是内置命令,stat文件属性 ,whereis,locate,find,ln   ...

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

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

  9. SUID, SGID, SBIT

    基本上SUID有这样的限制与功能: SUID权限仅对二进位程序(binaryprogram)有效,不能用在shellscript上面: 运行者对於该程序需要具有x的可运行权限: 本权限仅在运行该程序的 ...

随机推荐

  1. 5.1 timestamp数据类型默认值

    5.1 不支持同一张表中有多个tmiestamp类型字段的默认值为current_time,  5.6版本无此问题

  2. adodb.stream对象的方法/属性

    Cancel 方法      使用方法如下      Object.Cancel      说明:取消执行挂起的异步 Execute 或 Open 方法的调用.Close   方法      使用方法 ...

  3. 直接用postman测试api ,服务器端没提供跨域也可以访问。

    1. 直接用postman测试api ,服务器端没提供跨域也可以访问. 但是,如果用本地的 sever 搭的server, 然后去访问api的话,浏览器会提示 跨域错误.

  4. EL表达式处理字符串 是否 包含 某字符串 截取 拆分...............

    EL表达式处理字符串 是否 包含 某字符串 截取 拆分............... JSP页面页头添加<%@ taglib uri="/WEB-INF/taglib/c.tld&qu ...

  5. Android自动化测试之环境搭建

    Android自动化测试之环境搭建 一.Android-sdk介绍 SDK(Software development kit)软件开发工具包.被软件开发工程师用于为特定的软件包.软件框架.硬件平台. ...

  6. java数组的引用

    数组属于应用型变量,因此两个相投类型的数组如果具有相同的引用,它们就有完全相同的元素 如: int a[]={1,2,3},b[]={4,5} 如果a=b;则a[]={4,5} public clas ...

  7. apache-tomcat-7.0.70无法进入Manager管理App项目

    在tomcat文件夹找到conf文件夹中的tomcat-user.xml文件,用记事本打开,在最下面可以看到tomcat默认把用户注释掉了,也就是说打开tomcat主页是进不去管理页面的.方法如下:找 ...

  8. html base1

    标题: 标题(Heading)是通过 <h1> - <h6> 等标签进行定义的. <h1> 定义最大的标题.<h6> 定义最小的标题. 段落: < ...

  9. PAT (Advanced Level) 1108. Finding Average (20)

    简单模拟. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #i ...

  10. java项目中使用guava的工具包的心得

    原文:http://www.   zuidaima.com/blog/3182745969511424.htm 以前只是听过这个工具包,但是真正用的话还是在D75需求中.我要实现把前台传入的list集 ...