pengpenglin
人,必须选择一种生活方式并有勇气坚持下去
BlogJava
首页
新随笔
新文章
联系
聚合
管理
posts - 262, comments - 221, trackbacks - 0
【Linux学习笔记】特殊权限
【1.SUID与SGID】
前面我们知道了Linux中文件、目录一般有rwx三种权限,但是请看下面命令的结果,我们可以发现了多了2个权限:s,t:
[
root@localhost ~
]
# ls -ld /tmp /usr/bin/passwd
drwxrwxrw
t
11
root root
4096
1月
5
21
:
36
/tmp
-r-
s
--x--x
1
root root
19336
2004
-
09
-
07
/usr/bin/passwd
[
root@localhost ~
]
# ls /usr/bin/passwd
其中s权限当出现于用户的x位置时被称为SUID,当s权限出现于组用户的x位置时被称为SGID (而SGID又分为作用于文件还是目录,SUID仅对文件有用)
那么这两个权限有什么作用呢?简单的概括起来:
①SUID允许执行该文件的用户在运行时暂时拥有所有者的权限
②SGID允许执行该文件的用户在运行时暂时拥有用户组的权限
③如果SGID作用于目录,则使用者在该目录下创建的文件,其用户组都和该目录一样
Example 1:修改passwd文件中用户paul的密码
我们知道/usr/bin/passwd文件的用户是root,用户组也是root,如果没有s权限,那么光凭用户paul的x权限我们只能执行而不能看到,更改这个文件的内容。但是实际上我们完全可以通过passwd命令来修改自己的密码。
[
paul@localhost ~
]
$ passwd
Changing password for user paul.
Changing password for paul
(current) UNIX password:
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
[
paul@localhost ~
]
$
那么为什么我们不具备对passwd这个文件rw权限,却能够修改这个文件呢?原因就在于我们前面提到的s权限--SUID。从描述可以知道当paul用户执行该文件时(x权限),可以暂时地获得用户root对这个文件的权限,用户root对passwd是rwx权限,所以我们当然可以修改自己的密码了。
但一旦我们执行完毕时这个权限就还回去了,如果我们cat这个文件我们会发现没有权限显示
[
paul@localhost ~
]
$ cat /usr/bin/passwd
cat: /usr/bin/passwd: 权限不够
[
paul@localhost ~
]
$
不过SUID和SGID也不是随便那个人,那个文件都可以用的,必须满足下面两个条件
①用户对要执行的文件必须具备x权限
②SUID,SGID仅对二进制文件起作用
【2.SBIT】
SBIT权限就是前面我们看到的t权限,它只能作用于目录,它的作用是:但用户在该目录下建立文件或目录时,仅有用户自己或root用户有权删除。其他人无法删除,而用户也无法删除他人的目录或文件。
[
paul@localhost ~
]
$ ls -ld /tmp
drwxrwxrw
t
11
root root
4096
1月
5
22
:
34
/tmp
[
paul@localhost ~
]
$
我们看到/tmp目录的x位置被替换成t了,这意味着这个目录下的内容只有root用户和创建者有权删除。
Example 1:试验SBIT权限
首先我们以paul用户身份在/tmp目录下建立一个文件test,并设置成为777权限。让所有人可以修改文件。
[
paul@localhost tmp
]
$ touch test
[
paul@localhost tmp
]
$ ls -l test
-rw-rw-r--
1
paul paul
0
1月
5
23
:
26
test
[
paul@localhost tmp
]
$ chmod
777
test
[
paul@localhost tmp
]
$ ls -l test
-rwxrwxrwx
1
paul paul
0
1月
5
23
:
26
test
[
paul@localhost tmp
]
$
然后我们以Oracle用户身份分别尝试删除该文件和修改该文件
[
oracle@localhost ~
]
$ cd /tmp
[
oracle@localhost tmp
]
$ ls -l /tmp/test
-rwxrwxrwx
1
paul paul
0
1月
5
23
:
26
/tmp/test
[
oracle@localhost tmp
]
$ rm test
rm: 无法删除‘test’: 不允许的操作
[
oracle@localhost tmp
]
$ vi test
[
oracle@localhost tmp
]
$ cat test
Modify this file
经过试验我们发现两个结果:
①我们不能以Oracle身份删除test文件,即便/tmp目录对其他用户开放w权限
②我们可以Oracle身份修改test文件,因为我们对test文件设置了777权限
这就是SBIT权限的好处,即不会限制正常的删除,又可以防止意外或恶意的删除。
【3.如何设置特殊权限】
如何设置权限我们已经在前面提到过了,设置特殊权限也是同样的。只是特殊权限在设置时是位于普通权限的前面,而且4代表SUID权限,2代表SGID权限,1代表SBIT权限。见下面例子:
[
root@www ~
]
# cd /tmp
[
root@www tmp
]
# touch test <
==
建立一個測試用空檔
[
root@www tmp
]
# chmod
4755
test
;
ls -l test <==加入具有 SUID 的權限
-rwsr-xr-x
1
root root
0
Sep
29
03
:
06
test
[
root@www tmp
]
# chmod
6755
test
;
ls -l test <==加入具有 SUID/SGID 的權限
-rwsr-sr-x
1
root root
0
Sep
29
03
:
06
test
[
root@www tmp
]
# chmod
1755
test
;
ls -l test <==加入 SBIT 的功能!
-rwxr-xr-t
1
root root
0
Sep
29
03
:
06
test
[
root@www tmp
]
# chmod
7666
test
;
ls -l test <==具有空的 SUID/SGID 權限
-rwSrwSrwT
1
root root
0
Sep
29
03
:
06
test
注意最后一个7666权限的例子,大写S和T和上面小写的s和t不同,这是空的特殊权限的表示。因为本身666已经断绝了所有人的执行权限,所以特殊权限也就没有意思了。
(来自《鸟哥的私房菜》的例子)
-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要尽力打好一手烂牌。
posted on 2009-01-05 22:03
Paul Lin
阅读(867)
评论(0)
编辑
收藏
所属分类:
Unix / Linux
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
相关文章:
【Linux学习笔记】压缩和打包命令
【Linux学习笔记】特殊权限
【Linux学习笔记】文件的寻找
【Linux学习笔记】文件和目录的默认权限与隐藏权限
【Linux学习笔记】文件操作命令
【Linux学习笔记】目录操作命令
【Linux学习笔记】分区与目录
【Linux学习笔记】文件类型与扩展名
【Linux学习笔记】文件权限学习要点
Unix基本概念及入门技术【四】:Solaris下cp命令的若干注意点
<
2009年1月
>
日
一
二
三
四
五
六
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(21)
给我留言
查看公开留言
查看私人留言
随笔分类
J2EE 框架(9)
J2EE基础(4)
J2SE(43)
Java 工具(5)
Oracle Concept(4)
Oracle SQL/PLSQL(9)
Oracle 开发(13)
Oracle 管理(4)
Oracle 调优
Oracle 错误诊断
RoR(19)
UML(3)
Unix / Linux(13)
Web基础(19)
其它技术(7)
感悟(3)
杂项(7)
架构与性能(8)
模式与重构(19)
灌水(8)
电影与音乐(16)
走过的路(1)
软件过程与软件方法(3)
阳光户外(2)
项目管理(36)
随笔档案
2012年2月 (3)
2011年11月 (4)
2011年10月 (1)
2011年9月 (2)
2011年8月 (2)
2011年7月 (5)
2011年6月 (3)
2011年5月 (1)
2011年4月 (1)
2011年3月 (3)
2011年1月 (1)
2010年12月 (1)
2010年11月 (5)
2010年10月 (3)
2010年9月 (1)
2010年7月 (1)
2010年6月 (1)
2010年5月 (4)
2010年4月 (9)
2010年3月 (19)
2010年2月 (8)
2010年1月 (3)
2009年12月 (34)
2009年11月 (1)
2009年10月 (2)
2009年7月 (4)
2009年6月 (5)
2009年5月 (3)
2009年4月 (2)
2009年3月 (1)
2009年2月 (5)
2009年1月 (5)
2008年12月 (13)
2008年11月 (4)
2008年10月 (1)
2008年9月 (6)
2008年8月 (5)
2008年7月 (3)
2008年6月 (31)
2008年5月 (10)
2008年4月 (9)
2008年3月 (7)
2008年2月 (4)
2008年1月 (19)
BlogJava热点博客
BeanSoft
Jack.Wang
如坐春风
诗特林
郑晖
银河使者
阿密果
隔叶黄莺
好友博客
无羽苍鹰
搜索
最新评论
1. re: 【Java基础专题】编码与乱码(01)---编码基础[未登录]
666666666666666666666这几天正在做个类似工程编码出现错误
--李
2. re: 【Java基础专题】IO与文件读写---使用Apache commons IO简化文件读写
不错
--阿斯兰
3. re: 【Java基础专题】编码与乱码(03)----String的toCharArray()方法
多谢分享
--thx
4. re: 【Java基础专题】编码与乱码(05)---GBK与UTF-8之间的转换
评论内容较长,点击标题查看
--karl
5. re: 【Java基础专题】编码与乱码(01)---编码基础[未登录]
谢谢,帮了我大忙!
--小龙
阅读排行榜
1. Oracle中如何插入特殊字符:& 和 ' (多种解决方案)(48373)
2. getOutputStream() has already been called for this response的解决方法(43328)
3. 【Java基础专题】编码与乱码(05)---GBK与UTF-8之间的转换(36966)
4. 360安全卫士误删audiosrv.dll文件造成系统无声的解决方案(21211)
5. Java中读取字节流并按指定编码转换成字符串的方法(17301)
评论排行榜
1. 360安全卫士误删audiosrv.dll文件造成系统无声的解决方案(33)
2. 【原】Oracle开发专题之:时间运算(11)
3. 【Java基础专题】编码与乱码(05)---GBK与UTF-8之间的转换(11)
4. getOutputStream() has already been called for this response的解决方法(10)
5. 【原】Oracle开发专题之:分析函数(OVER)(8)