SUID, SGID, SBIT
基本上SUID有这样的限制与功能:
SUID权限仅对二进位程序(binaryprogram)有效,不能用在shellscript上面;
运行者对於该程序需要具有x的可运行权限;
本权限仅在运行该程序的过程中有效(run-time);
运行者将具有该程序拥有者(owner)的权限。
这里举个栗子。Linux系统中默认的被赋予suid权限的文件是passwd。
root@VMS001:~#ll/usr/bin/passwd
-rwsr-xr-x1rootroot42824Sep132012/usr/bin/passwd*
passwd的拥有者是root用户。假定有某个用户叫hackstoic,他要修改自己的密码,即执行passwd命令,这时候hackstoic就会被临时赋予root的权限来执行passwd命令文件,passwd就会去修改/etc/shadow文件中对应的记录,从而修改用户自己的密码。这就解释了为什么可以执行passwd命令的缘由。
但是你可以会问,既然我可以临时获得root的权限,我为什么不能使用passwd命令来修改别人的密码呢?
这是因为passwd在修改密码之前会查看当前用户是否匹配要修改的用户,否则就不会往下执行。
会显示“您不能查看或更改xxx的密码信息。”之类的提示。这个提示是passwd修改密码之前的判断,而不是在修改shadow的时候系统提示的权限不足。这就解释了为什么普通用户不能修改他人的密码的原因。
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的权限去掉),我们用数字方式来设置
[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权限,根据我们上面讲的内容,其实,这个特 殊的权限就相当于一个空的权限,没有意义。也就是说,如果你看到特殊权限位置上变成了大写的了,那么,就说明,这里有问题,需要排除。
SUID, SGID, SBIT的更多相关文章
- suid sgid sbit chattr lsattr
suid 一般用于二进制可执行文件,suid代表当用户执行此二进制文件时,暂时具有此文件所有者的权限 chmod 4xxx binfile sgid 一般用于目录,sgid代表当其他用户在此目录下创建 ...
- Linux之特殊权限(SUID/SGID/SBIT)
特殊权限的介绍 Set UID 当s这个标志出现在文件所有者的x权限上时,如/usr/bin/passwd这个文件的权限状态:“-rwsr-xr-x.”,此时就被称为Set UID,简称为SUID.那 ...
- Linux文件与目录的默认权限与隐藏权限 - umask, chattr, lsattr, SUID, SGID, SBIT, file
文件默认权限:umask [root@www ~]# umask 0022 <==与一般权限有关的是后面三个数字! [root@www ~]# umask -S u=rwx,g=rx,o=rx ...
- 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 ...
- CentOS 文件特殊权限SUID,SGID,SBIT
1.SUID ,是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有所有者的权限(仅对拥有执行权限的二进制程序有效). (1)SUID权限仅对二进制程序有效: (2)本权限仅在执行该 ...
- 文件的特殊权限(SUID,SGID,SBIT)
文件的一般权限:r w x 对应 421 文件的特殊权限:SUID SGID SBIT对应 421 文件的隐藏权限:chattr设置隐藏权限,lsattr查看文件的隐藏权限. 文件访问控制列表: ...
- suid sgid sbit chattr lsattr find
suid 一般用于二进制可执行文件不可用于shell脚本和目录,suid代表当用户执行此二进制文件时,暂时具有此文件所有者的权限 chmod 4xxx binfile sgid 一般用于目录,sgid ...
- SUID,SGID,SBIT这些到底是什么
SUID,SGID,SBIT这些都是文件的特殊权限. SUID(Set UID)文件执行过程中,用户拥有文件的root权限. SGID(Set GID)文件执行过程中,执行者拥有该文件的用户组的权限. ...
- Linux 文件特殊权限 SUID SGID SBIT
文件除了常规的权限r, w, x 还有一些特殊的权限,s与t权限,具体的用处如下 1 SetUID 当s 这个标志出现在文件所有者的x权限上时, 例如/usr/bin/passwd, [root@or ...
随机推荐
- 【java】之 apache commons-codec 与Apache Digest demo实例,支持md5 sha1 base64 hmac urlencode
使用commons-codec 进行加密的一些操作 package com.jiepu.ApacheDigest; import java.io.FileInputStream; import org ...
- MYSQL-用户权限的验证过程
知识点 因为MySQL是使用User和Host两个字段来确定用户身份的,这样就带来一个问题,就是一个客户端到底属于哪个host. 如果一个客户端同时匹配几个Host,对用户的确定将按照下面的优先级来排 ...
- 【MySQL】分页优化
前段时间由于项目的原因,对一个由于分页而造成性能较差的SQL进行优化,现在将优化过程中学习到关于分页优化的知识跟大家简单分享下. 分页不外乎limit,offset,在这两个关键字中,limit其实不 ...
- RAID磁盘阵列笔记
磁盘阵列RAID是服务器维护的必备知识,以前不太关心服务器维护方面的知识.目前要负责维护机房里的几台服务器,所以要关注这方面的内容. 磁盘阵列是用多块独立磁盘组成,提供两个方面的作用:数据安全冗余 和 ...
- Oracle Merge备忘示例
Oracle的merge语法非常实用,用于Insert.Update判断情况.以下是自己书写的一个示例,以免时间长了语法形式忘记了. MERGE INTO T_FR_GUOSZX T USING (S ...
- 如何自定义Flask中的响应类
http://codingpy.com/article/customizing-the-flask-response-class/
- sql查询语句如何解析成分页查询?
我们公司主要mysql存储数据,因此也封装了比较好用mysql通用方法,然后,我们做大量接口,在处理分页查询接口,没有很好分查询方法.sql查询 语句如何解析成“分页查询”和“总统计”两条语句.可能, ...
- [DFNews] Elcomsoft 发布EPPB 2.00.233
Elcomsoft Phone Password Breaker 是俄罗斯Elcomsoft公司推出的手机取证工具,能够针对黑莓.苹果等手机的备份文件进行多种方式破解,支持远程获取iCloud数据. ...
- 【解决】SharePoint 2013 当鼠标悬停在用户名称上时页面会崩溃
参考下面文章,此问题是由于IE中的Office插件版本不正确所致,只需在 控制面板 > 程序和功能 中修复 Office 的安装即可. http://sympmarc.com/2013/11/2 ...
- 黑马程序员_ Objective-c 之Foundation笔记(一)
结构体 NSRange: 用来表示范围 创建 NSRange r1 = {2, 4} NSRange r2 = {.location = 2, .length = 4} NSRange r3 = N ...