linux下粘滞位引出的SUID和SGID
2017-04-10 10:28
288 查看
在使用int open(const char *pathname, int flags, mode_t mode)在进行文件打开操作时,其中的第三个参数就是linux下的权限模式,以前也没有很在意这个东西,不就是r,w,x之间的组合吗?后来才发现,这个mode_t并不是我想得那么简单,通过查看内核代码,在types.h文件当中找到了这样的定义:typedef __mode_t mode_t;__STD_TYPE __MODE_T_TYPE __mode_t; /* Type of file attribute bitmasks. */ “Type of file attribute bitmasks”,说的就是文件属性当中位屏蔽码的类型,这个类型在许多的结构体当中都有所包含,比如struct stat结构体当中就有。到这里我们搞清楚了mode_t指的是什么了,下面探究一下,有关粘滞位的东东。 对于ls -l显示的权限模式简单介绍一下,比如使用: ls -l /bin/bash显示如下: -rwxr-xr-x 1 root root 818232 2010-04-19 09:51 /bin/bash
其中第一列即表示该文件的权限属性。
第一个字母"-",表示文件类型。可选的文件类型标识有:
"-":普通文件
"d":目录
"l":符号链接
"c":字符专门设备文件
"b":块专门设备文件
"p":先进先出
"s":套接字
余下的9位每三位划分为一组分别表示所有者权限、所属组权限、其他用户权限。
于是可知普通文件/bin/bash的权限集合为:
所有者(root):rwx;所属组(root):r-x;其他用户:r-x 权限字母表示:
r:读权限(查看文件中的数据/查看目录的内容)
w:写/修改权限(修改文件以及删除/在目录内创建或删除对象)
x:执行权限(执行程序/进入目录) 权限数字表示:
---: 0
--x: 1
-w-: 2
-wx: 3
r--: 4
r-x: 5
rw-: 6
rwx: 7
故/bin/bash的权限集合的数字表示为:755。 但是在mode_t(比如0022)当中的话,它还有一个最高的为,就是我们所说的粘滞位。 粘滞位(sticky bit)的功能是这样的,当某一个文件设置了这一位的时候,这个可执行程序退出后,操作系统会在内存当中保存该程序的内存映像,这样做是为了节约大型程序的启动时间,但是也要占用系统资源。因此,设置这个粘滞位,到不如把自己的程序写得更好些。这一位可以理解为防止删除位,设置了这一位之后,就算用户对目录具有读写的权限,但也只能添加文件而不能删除文件。 由此引出的两个位是SUID和SGID。 当设置了SUID的文件被执行时,该文件将以所有者的身份运行,也就是说无论谁来执行这个文件,他都有文件所有者的所有权限。如果所有者是root的话,那么执行人就有超级用户的权限了,这样的话,其实是不太安全的,因此不要轻易这么来设置这一位。 下面来说一说SGID,这一位和SUID是类似的,当文件运行的时候,文件执行者就具有文件所属组的权限了。 我们继续来讨论一下这些位的简单使用。 1.粘滞位的应用:^_^[sunny@sunny-laptop ~/test]55$ ls -l
总用量 4
-rw-r--r-- 1 sunny sunny 58 2011-07-08 21:17 fan.c
^_^[sunny@sunny-laptop ~/test]56$ gcc fan.c -o fan.out
^_^[sunny@sunny-laptop ~/test]57$ ls -l
总用量 12
-rw-r--r-- 1 sunny sunny 58 2011-07-08 21:17 fan.c
-rwxr-xr-x 1 sunny sunny 7101 2011-07-08 21:18 fan.out
^_^[sunny@sunny-laptop ~/test]58$ chmod o+t fan.c
^_^[sunny@sunny-laptop ~/test]59$ chmod o+t fan.out
^_^[sunny@sunny-laptop ~/test]60$ ls -l
总用量 12
-rw-r--r-T 1 sunny sunny 58 2011-07-08 21:17 fan.c
-rwxr-xr-t 1 sunny sunny 7101 2011-07-08 21:18 fan.out
^_^[sunny@sunny-laptop ~/test]61$
说明:粘滞位只对文件有效,而且只能使用与文件其他使用者的最后一个x位的修改,也就是说只能进行chmod o+t或者chmod o-t这样的操作(这一点不太确定,但我认为是正确的)。如果文件的其他用户没有x权限,那么进行chmod o+t的话,最后一位就变成了T,而不是t。 2.SUID位的应用:
root@sunny-laptop:/home/sunny/test# gcc fan.c -o fan.out
root@sunny-laptop:/home/sunny/test# ls -l
总用量 12
-rw-r--r-- 1 root root 45 2011-07-08 21:29 fan.c
-rwxr-xr-x 1 root root 7101 2011-07-08 21:29 fan.out
root@sunny-laptop:/home/sunny/test# chmod u+s fan.out
root@sunny-laptop:/home/sunny/test# chmod u+s fan.c
root@sunny-laptop:/home/sunny/test# ls -l
总用量 12
-rwSr--r-- 1 root root 45 2011-07-08 21:29 fan.c
-rwsr-xr-x 1 root root 7101 2011-07-08 21:29 fan.out
root@sunny-laptop:/home/sunny/test# exit
exit
^_^[sunny@sunny-laptop ~/test]67$ whoami
sunny
^_^[sunny@sunny-laptop ~/test]68$ ls -l
总用量 12
-rwSr--r-- 1 root root 45 2011-07-08 21:29 fan.c
-rwsr-xr-x 1 root root 7101 2011-07-08 21:29 fan.out
^_^[sunny@sunny-laptop ~/test]69$ ./fan.out
hello world
^_^[sunny@sunny-laptop ~/test]70$
说明:首先,我切换到了root用户下,创建了一个fan.c文件(内容为hello world程序),然后编译生成了fan.out文件。并将这两个文件的suid位进行了设置。退出root用户,执行fan.out文件,结果正确运行(其实/usr/bin/passwd也就是样的)。这个SUID位只对文件有效,并且只修改文件的所有者的权限,关于小s和大S(s和S)的区别就是,当文件所有者开始有x权限时,执行chmod u+x之后就会成为小s,否则就是大S。 3.SGID的应用: 相信弄懂了SUID的人,对这个也是能够理解的。SGID只针对用户组和目录适用。但是当我在测试的时候,发现了一个问题惊人的问题:用root创建的一个空目录,居然用普通用户就可以删除了。经过研究,发现原来是ubuntu搞的鬼,因为我用的是ubuntu,而ubuntu为了方便用户,故意这么设置的。呵呵,这个可不是我的错了。有关SGID的测试以后补上来。 小结:如果本来在x位上设置了x的时候,设置这些位将会显示小写的(s,s,t),否则会显示为大写的(S,S,T)。这三位如果转化为8进制表示的话,分别对应的是4(SUID),2(SGID),1(sticky bit),0(什么也不是),这样的话,就解决了我开始的疑问了。 4000:set uid on execution 2000:set gid on execution 1000:set sticky bit
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(1907) | 评论(0) | 转发(0) |
0
上一篇:Ubuntu10.04下C连接mysql数据库
下一篇:静默安装Oracle数据库10g篇
相关热门文章
欢迎xiaoyu_linux在ChinaUnix...
linux设备驱动之USB数据传输分...
浅析usb转serial串口设备在lin...
[原创]到目前为止,Linux下最...
Red Hat Linux 的主要系统目录...
linux 常见服务端口
xmanager 2.0 for linux配置
【ROOTFS搭建】busybox的httpd...
openwrt中luci学习笔记
什么是shell
linux dhcp peizhi roc
关于Unix文件的软链接
求教这个命令什么意思,我是新...
sed -e "/grep/d" 是什么意思...
谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
其中第一列即表示该文件的权限属性。
第一个字母"-",表示文件类型。可选的文件类型标识有:
"-":普通文件
"d":目录
"l":符号链接
"c":字符专门设备文件
"b":块专门设备文件
"p":先进先出
"s":套接字
余下的9位每三位划分为一组分别表示所有者权限、所属组权限、其他用户权限。
于是可知普通文件/bin/bash的权限集合为:
所有者(root):rwx;所属组(root):r-x;其他用户:r-x 权限字母表示:
r:读权限(查看文件中的数据/查看目录的内容)
w:写/修改权限(修改文件以及删除/在目录内创建或删除对象)
x:执行权限(执行程序/进入目录) 权限数字表示:
---: 0
--x: 1
-w-: 2
-wx: 3
r--: 4
r-x: 5
rw-: 6
rwx: 7
故/bin/bash的权限集合的数字表示为:755。 但是在mode_t(比如0022)当中的话,它还有一个最高的为,就是我们所说的粘滞位。 粘滞位(sticky bit)的功能是这样的,当某一个文件设置了这一位的时候,这个可执行程序退出后,操作系统会在内存当中保存该程序的内存映像,这样做是为了节约大型程序的启动时间,但是也要占用系统资源。因此,设置这个粘滞位,到不如把自己的程序写得更好些。这一位可以理解为防止删除位,设置了这一位之后,就算用户对目录具有读写的权限,但也只能添加文件而不能删除文件。 由此引出的两个位是SUID和SGID。 当设置了SUID的文件被执行时,该文件将以所有者的身份运行,也就是说无论谁来执行这个文件,他都有文件所有者的所有权限。如果所有者是root的话,那么执行人就有超级用户的权限了,这样的话,其实是不太安全的,因此不要轻易这么来设置这一位。 下面来说一说SGID,这一位和SUID是类似的,当文件运行的时候,文件执行者就具有文件所属组的权限了。 我们继续来讨论一下这些位的简单使用。 1.粘滞位的应用:^_^[sunny@sunny-laptop ~/test]55$ ls -l
总用量 4
-rw-r--r-- 1 sunny sunny 58 2011-07-08 21:17 fan.c
^_^[sunny@sunny-laptop ~/test]56$ gcc fan.c -o fan.out
^_^[sunny@sunny-laptop ~/test]57$ ls -l
总用量 12
-rw-r--r-- 1 sunny sunny 58 2011-07-08 21:17 fan.c
-rwxr-xr-x 1 sunny sunny 7101 2011-07-08 21:18 fan.out
^_^[sunny@sunny-laptop ~/test]58$ chmod o+t fan.c
^_^[sunny@sunny-laptop ~/test]59$ chmod o+t fan.out
^_^[sunny@sunny-laptop ~/test]60$ ls -l
总用量 12
-rw-r--r-T 1 sunny sunny 58 2011-07-08 21:17 fan.c
-rwxr-xr-t 1 sunny sunny 7101 2011-07-08 21:18 fan.out
^_^[sunny@sunny-laptop ~/test]61$
说明:粘滞位只对文件有效,而且只能使用与文件其他使用者的最后一个x位的修改,也就是说只能进行chmod o+t或者chmod o-t这样的操作(这一点不太确定,但我认为是正确的)。如果文件的其他用户没有x权限,那么进行chmod o+t的话,最后一位就变成了T,而不是t。 2.SUID位的应用:
root@sunny-laptop:/home/sunny/test# gcc fan.c -o fan.out
root@sunny-laptop:/home/sunny/test# ls -l
总用量 12
-rw-r--r-- 1 root root 45 2011-07-08 21:29 fan.c
-rwxr-xr-x 1 root root 7101 2011-07-08 21:29 fan.out
root@sunny-laptop:/home/sunny/test# chmod u+s fan.out
root@sunny-laptop:/home/sunny/test# chmod u+s fan.c
root@sunny-laptop:/home/sunny/test# ls -l
总用量 12
-rwSr--r-- 1 root root 45 2011-07-08 21:29 fan.c
-rwsr-xr-x 1 root root 7101 2011-07-08 21:29 fan.out
root@sunny-laptop:/home/sunny/test# exit
exit
^_^[sunny@sunny-laptop ~/test]67$ whoami
sunny
^_^[sunny@sunny-laptop ~/test]68$ ls -l
总用量 12
-rwSr--r-- 1 root root 45 2011-07-08 21:29 fan.c
-rwsr-xr-x 1 root root 7101 2011-07-08 21:29 fan.out
^_^[sunny@sunny-laptop ~/test]69$ ./fan.out
hello world
^_^[sunny@sunny-laptop ~/test]70$
说明:首先,我切换到了root用户下,创建了一个fan.c文件(内容为hello world程序),然后编译生成了fan.out文件。并将这两个文件的suid位进行了设置。退出root用户,执行fan.out文件,结果正确运行(其实/usr/bin/passwd也就是样的)。这个SUID位只对文件有效,并且只修改文件的所有者的权限,关于小s和大S(s和S)的区别就是,当文件所有者开始有x权限时,执行chmod u+x之后就会成为小s,否则就是大S。 3.SGID的应用: 相信弄懂了SUID的人,对这个也是能够理解的。SGID只针对用户组和目录适用。但是当我在测试的时候,发现了一个问题惊人的问题:用root创建的一个空目录,居然用普通用户就可以删除了。经过研究,发现原来是ubuntu搞的鬼,因为我用的是ubuntu,而ubuntu为了方便用户,故意这么设置的。呵呵,这个可不是我的错了。有关SGID的测试以后补上来。 小结:如果本来在x位上设置了x的时候,设置这些位将会显示小写的(s,s,t),否则会显示为大写的(S,S,T)。这三位如果转化为8进制表示的话,分别对应的是4(SUID),2(SGID),1(sticky bit),0(什么也不是),这样的话,就解决了我开始的疑问了。 4000:set uid on execution 2000:set gid on execution 1000:set sticky bit
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(1907) | 评论(0) | 转发(0) |
0
上一篇:Ubuntu10.04下C连接mysql数据库
下一篇:静默安装Oracle数据库10g篇
相关热门文章
欢迎xiaoyu_linux在ChinaUnix...
linux设备驱动之USB数据传输分...
浅析usb转serial串口设备在lin...
[原创]到目前为止,Linux下最...
Red Hat Linux 的主要系统目录...
linux 常见服务端口
xmanager 2.0 for linux配置
【ROOTFS搭建】busybox的httpd...
openwrt中luci学习笔记
什么是shell
linux dhcp peizhi roc
关于Unix文件的软链接
求教这个命令什么意思,我是新...
sed -e "/grep/d" 是什么意思...
谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
相关文章推荐
- 深入理解linux的权限设置和SUID,SGID以及粘滞位
- 深入理解linux的权限设置和SUID,SGID以及粘滞位
- 深入理解linux的权限设置和SUID,SGID以及粘滞位
- 由Android的fastboot no permissions而引出的Linux特殊权限管理之:SUID、SGID、SBIT
- Linux权限:SUID,SGID以及粘滞位
- Linux 权限设置和 SUID, SGID 以及粘滞位
- [Linux]:Linux文件特殊权限 SUID/SGID/Sticky Bit
- 关于UNIX和Linux系统下SUID、SGID的解析
- UNIX和Linux系统下SUID、SGID的解析
- linux unix 特殊权限SUID/SGID/Sticky Bit
- 关于UNIX和Linux系统下SUID、SGID的解析
- 关于UNIX和Linux系统下SUID、SGID的解析
- Linux文件特殊权限 SUID/SGID/Sticky Bit
- linux 三种特殊权限简介 s suid sgid sticky-bit
- SUID,SGID和sticky粘滞位
- 关于UNIX和Linux系统下SUID、SGID的解析
- linux特殊文件权限 suid、sgid和sticky-bit的作用
- 关于UNIX和Linux系统下SUID、SGID的解析
- Linux文件特殊权限 SUID/SGID/Sticky Bit
- 关于UNIX和Linux系统下SUID、SGID的解析