pengpenglin
人,必須選擇一種生活方式并有勇氣堅(jiān)持下去
BlogJava
首頁
新隨筆
新文章
聯(lián)系
聚合
管理
posts - 262, comments - 221, trackbacks - 0
【Linux學(xué)習(xí)筆記】特殊權(quán)限
【1.SUID與SGID】
前面我們知道了Linux中文件、目錄一般有rwx三種權(quán)限,但是請看下面命令的結(jié)果,我們可以發(fā)現(xiàn)了多了2個權(quán)限: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權(quán)限當(dāng)出現(xiàn)于用戶的x位置時被稱為SUID,當(dāng)s權(quán)限出現(xiàn)于組用戶的x位置時被稱為SGID (而SGID又分為作用于文件還是目錄,SUID僅對文件有用)
那么這兩個權(quán)限有什么作用呢?簡單的概括起來:
①SUID允許執(zhí)行該文件的用戶在運(yùn)行時暫時擁有所有者的權(quán)限
②SGID允許執(zhí)行該文件的用戶在運(yùn)行時暫時擁有用戶組的權(quán)限
③如果SGID作用于目錄,則使用者在該目錄下創(chuàng)建的文件,其用戶組都和該目錄一樣
Example 1:修改passwd文件中用戶paul的密碼
我們知道/usr/bin/passwd文件的用戶是root,用戶組也是root,如果沒有s權(quán)限,那么光憑用戶paul的x權(quán)限我們只能執(zhí)行而不能看到,更改這個文件的內(nèi)容。但是實(shí)際上我們完全可以通過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權(quán)限,卻能夠修改這個文件呢?原因就在于我們前面提到的s權(quán)限--SUID。從描述可以知道當(dāng)paul用戶執(zhí)行該文件時(x權(quán)限),可以暫時地獲得用戶root對這個文件的權(quán)限,用戶root對passwd是rwx權(quán)限,所以我們當(dāng)然可以修改自己的密碼了。
但一旦我們執(zhí)行完畢時這個權(quán)限就還回去了,如果我們cat這個文件我們會發(fā)現(xiàn)沒有權(quán)限顯示
[
paul@localhost ~
]
$ cat /usr/bin/passwd
cat: /usr/bin/passwd: 權(quán)限不夠
[
paul@localhost ~
]
$
不過SUID和SGID也不是隨便那個人,那個文件都可以用的,必須滿足下面兩個條件
①用戶對要執(zhí)行的文件必須具備x權(quán)限
②SUID,SGID僅對二進(jìn)制文件起作用
【2.SBIT】
SBIT權(quán)限就是前面我們看到的t權(quán)限,它只能作用于目錄,它的作用是:但用戶在該目錄下建立文件或目錄時,僅有用戶自己或root用戶有權(quán)刪除。其他人無法刪除,而用戶也無法刪除他人的目錄或文件。
[
paul@localhost ~
]
$ ls -ld /tmp
drwxrwxrw
t
11
root root
4096
1月
5
22
:
34
/tmp
[
paul@localhost ~
]
$
我們看到/tmp目錄的x位置被替換成t了,這意味著這個目錄下的內(nèi)容只有root用戶和創(chuàng)建者有權(quán)刪除。
Example 1:試驗(yàn)SBIT權(quán)限
首先我們以paul用戶身份在/tmp目錄下建立一個文件test,并設(shè)置成為777權(quán)限。讓所有人可以修改文件。
[
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
]
$
然后我們以O(shè)racle用戶身份分別嘗試刪除該文件和修改該文件
[
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
經(jīng)過試驗(yàn)我們發(fā)現(xiàn)兩個結(jié)果:
①我們不能以O(shè)racle身份刪除test文件,即便/tmp目錄對其他用戶開放w權(quán)限
②我們可以O(shè)racle身份修改test文件,因?yàn)槲覀儗est文件設(shè)置了777權(quán)限
這就是SBIT權(quán)限的好處,即不會限制正常的刪除,又可以防止意外或惡意的刪除。
【3.如何設(shè)置特殊權(quán)限】
如何設(shè)置權(quán)限我們已經(jīng)在前面提到過了,設(shè)置特殊權(quán)限也是同樣的。只是特殊權(quán)限在設(shè)置時是位于普通權(quán)限的前面,而且4代表SUID權(quán)限,2代表SGID權(quán)限,1代表SBIT權(quán)限。見下面例子:
[
root@www ~
]
# cd /tmp
[
root@www tmp
]
# touch test <
==
建立一個測試用空檔
[
root@www tmp
]
# chmod
4755
test
;
ls -l test <==加入具有 SUID 的權(quán)限
-rwsr-xr-x
1
root root
0
Sep
29
03
:
06
test
[
root@www tmp
]
# chmod
6755
test
;
ls -l test <==加入具有 SUID/SGID 的權(quán)限
-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 權(quán)限
-rwSrwSrwT
1
root root
0
Sep
29
03
:
06
test
注意最后一個7666權(quán)限的例子,大寫S和T和上面小寫的s和t不同,這是空的特殊權(quán)限的表示。因?yàn)楸旧?66已經(jīng)斷絕了所有人的執(zhí)行權(quán)限,所以特殊權(quán)限也就沒有意思了。
(來自《鳥哥的私房菜》的例子)
-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
posted on 2009-01-05 22:03
Paul Lin
閱讀(877)
評論(0)
編輯
收藏
所屬分類:
Unix / Linux
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發(fā)表評論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關(guān)文章:
【Linux學(xué)習(xí)筆記】壓縮和打包命令
【Linux學(xué)習(xí)筆記】特殊權(quán)限
【Linux學(xué)習(xí)筆記】文件的尋找
【Linux學(xué)習(xí)筆記】文件和目錄的默認(rèn)權(quán)限與隱藏權(quán)限
【Linux學(xué)習(xí)筆記】文件操作命令
【Linux學(xué)習(xí)筆記】目錄操作命令
【Linux學(xué)習(xí)筆記】分區(qū)與目錄
【Linux學(xué)習(xí)筆記】文件類型與擴(kuò)展名
【Linux學(xué)習(xí)筆記】文件權(quán)限學(xué)習(xí)要點(diǎn)
Unix基本概念及入門技術(shù)【四】:Solaris下cp命令的若干注意點(diǎn)
Copyright ©2025 Paul Lin Powered by:
博客園
模板提供:
滬江博客
<
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基礎(chǔ)(4)
J2SE(43)
Java 工具(5)
Oracle Concept(4)
Oracle SQL/PLSQL(9)
Oracle 開發(fā)(13)
Oracle 管理(4)
Oracle 調(diào)優(yōu)
Oracle 錯誤診斷
RoR(19)
UML(3)
Unix / Linux(13)
Web基礎(chǔ)(19)
其它技術(shù)(7)
感悟(3)
雜項(xiàng)(7)
架構(gòu)與性能(8)
模式與重構(gòu)(19)
灌水(8)
電影與音樂(16)
走過的路(1)
軟件過程與軟件方法(3)
陽光戶外(2)
項(xiàng)目管理(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熱點(diǎn)博客
BeanSoft
Jack.Wang
如坐春風(fēng)
詩特林
鄭暉
銀河使者
阿密果
隔葉黃鶯
好友博客
無羽蒼鷹
搜索
最新評論
1.?re: 【Java基礎(chǔ)專題】編碼與亂碼(01)---編碼基礎(chǔ)[未登錄]
666666666666666666666這幾天正在做個類似工程編碼出現(xiàn)錯誤
--李
2.?re: 【Java基礎(chǔ)專題】IO與文件讀寫---使用Apache commons IO簡化文件讀寫
不錯
--阿斯蘭
3.?re: 【Java基礎(chǔ)專題】編碼與亂碼(03)----String的toCharArray()方法
多謝分享
--thx
4.?re: 【Java基礎(chǔ)專題】編碼與亂碼(05)---GBK與UTF-8之間的轉(zhuǎn)換
評論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
--karl
5.?re: 【Java基礎(chǔ)專題】編碼與亂碼(01)---編碼基礎(chǔ)[未登錄]
謝謝,幫了我大忙!
--小龍
閱讀排行榜
1.?Oracle中如何插入特殊字符:& 和 ' (多種解決方案)(48466)
2.?getOutputStream() has already been called for this response的解決方法(43363)
3.?【Java基礎(chǔ)專題】編碼與亂碼(05)---GBK與UTF-8之間的轉(zhuǎn)換(37053)
4.?360安全衛(wèi)士誤刪audiosrv.dll文件造成系統(tǒng)無聲的解決方案(21298)
5.?Java中讀取字節(jié)流并按指定編碼轉(zhuǎn)換成字符串的方法(17325)
評論排行榜
1.?360安全衛(wèi)士誤刪audiosrv.dll文件造成系統(tǒng)無聲的解決方案(33)
2.?【原】Oracle開發(fā)專題之:時間運(yùn)算(11)
3.?【Java基礎(chǔ)專題】編碼與亂碼(05)---GBK與UTF-8之間的轉(zhuǎn)換(11)
4.?getOutputStream() has already been called for this response的解決方法(10)
5.?【原】Oracle開發(fā)專題之:分析函數(shù)(OVER)(8)
主站蜘蛛池模板:
巢湖市
|
中阳县
|
中西区
|
渑池县
|
莱州市
|
松桃
|
格尔木市
|
康保县
|
沾益县
|
高青县
|
广汉市
|
天水市
|
镇江市
|
鹿泉市
|
晋城
|
招远市
|
浙江省
|
西乌珠穆沁旗
|
余姚市
|
长治县
|
旬邑县
|
吴堡县
|
晴隆县
|
新津县
|
武鸣县
|
长沙县
|
二连浩特市
|
上犹县
|
乡宁县
|
松桃
|
松阳县
|
宁武县
|
稻城县
|
扶沟县
|
龙胜
|
上饶县
|
镇康县
|
格尔木市
|
青岛市
|
丰顺县
|
甘洛县
|