引言
這篇文章介紹Linux文件系統(tǒng)三個(gè)特殊權(quán)限suid,sgid,sticky。
文章目錄
- 0×1.如何查看當(dāng)前用戶創(chuàng)建文件默認(rèn)權(quán)限
- 0×2.如何給文件添加suid權(quán)限
- 0×3.如何給文件夾添加sgid權(quán)限
- 0×4.如何給文件夾添加sticky權(quán)限
0×1.如何查看當(dāng)前用戶創(chuàng)建文件默認(rèn)權(quán)限
Linux在創(chuàng)建文件和文件夾時(shí)會(huì)默認(rèn)分配一組權(quán)限,這個(gè)權(quán)限是根據(jù)系統(tǒng)的umask值來(lái)確定的,請(qǐng)看下面的實(shí)例:
#查看普通用戶的umask值
qing@qingsword.com:~$ umask
22
#使用普通用戶創(chuàng)建一個(gè)文件夾和文件,查看它們的屬性
qing@qingsword.com:~$ touch qingfile
qing@qingsword.com:~$ mkdir qingdir
qing@qingsword.com:~$ ls -a
drwxr-xr-x qingdir/
-rw-r--r-- qingfile
#文件的默認(rèn)權(quán)限等于666減去umask查看到的值的后三位
# 666-022=644轉(zhuǎn)換成權(quán)限就是-rw-r--r--
#文件夾的默認(rèn)權(quán)限等于777減去umask查看到的值的后三位
# 777-022=755轉(zhuǎn)換成權(quán)限就是drwxr-xr-x
#umask值決定了當(dāng)前用戶創(chuàng)建文件或文件夾時(shí)默認(rèn)的權(quán)限分配,如果想修改umask值,在命令后面輸入umask值的后三位,如下
qing@qingsword.com:~$ umask 002
qing@qingsword.com:~$ umask
2
0×2.如何給文件添加suid權(quán)限
首先簡(jiǎn)單的介紹一下suid權(quán)限的作用,被分配了suid權(quán)限的文件在執(zhí)行的時(shí)候,將以文件所屬用戶的權(quán)限來(lái)運(yùn)行。為了讓大家更好的理解,請(qǐng)看下面的實(shí)例:
#Linux系統(tǒng)保存密碼的shadow文件只有root用戶擁有讀寫權(quán)限
qing@qingsword.com:~$ ls -l /etc/shadow
-rw-r----- 1 root shadow /etc/shadow
#既然這樣,普通用戶使用passwd命令是如何修改密碼的呢?
#通過(guò)查看passwd文件的權(quán)限"-rwsr-xr-x"發(fā)現(xiàn)這個(gè)文件被分配了suid權(quán)限,這樣,當(dāng)普通用戶使用這個(gè)文件來(lái)更改密碼時(shí),文件將以文件所屬用戶root的權(quán)限來(lái)運(yùn)行,而root用戶是能夠?qū)?etc/shadow做出修改的
qing@qingsword.com:~$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root /usr/bin/passwd
給一個(gè)文件添加suid權(quán)限的方法:
#方法一
qing@qingsword.com:~$ sudo chmod u+s qingfile
qing@qingsword.com:~$ ls -l
drwxr-xr-x 2 qing qing qingdir
-rwSr--r-- 1 qing qing qingfile
#方法二,千位4代表了suid權(quán)限,后面的744對(duì)應(yīng)了ugo
qing@qingsword.com:~$ sudo chmod 4744 qingfile
qing@qingsword.com:~$ ls -l
drwxr-xr-x 2 qing qing qingdir
-rwsr--r-- 1 qing qing qingfile
#在上面這個(gè)實(shí)例中,如果對(duì)應(yīng)的權(quán)限是4644那么看到的權(quán)限位中的s就會(huì)大寫成"-rwSr--r--",這就表明在S位沒(méi)有x權(quán)限,如果S位有x權(quán)限,那么S會(huì)小寫
0×3.如何給文件夾添加sgid權(quán)限
sgid權(quán)限用于文件夾,當(dāng)一個(gè)文件夾設(shè)置sgid權(quán)限后,所有在這個(gè)文件夾下新建的文件,無(wú)論是哪個(gè)用戶創(chuàng)建的,都被自動(dòng)分配到設(shè)置了sgid權(quán)限的父文件夾所屬組中,請(qǐng)看下面的實(shí)例:
#新建一個(gè)測(cè)試組testgroup,調(diào)整qingdir權(quán)限所屬組為testgroup
qing@qingsword.com:~$ sudo groupadd testgroup
qing@qingsword.com:~$ sudo chgrp testgroup qingdir
#給qingdir添加sgid權(quán)限
qing@qingsword.com:~$ sudo chmod g+s qingdir
qing@qingsword.com:~$ ls -l
drwxr-sr-x 2 qing testgroup qingdir
#進(jìn)入qingdir新建一個(gè)文件和文件夾*/
qing@qingsword.com:~$ cd qingdir/
qing@qingsword.com:~$ touch subtestfile
qing@qingsword.com:~$ mkdir subdir
#新建的文件夾和文件都被自動(dòng)分配到了testgroup組中
qing@qingsword.com:~$ ls -l
drwxr-sr-x 2 qing testgroup subdir
-rw-r--r-- 1 qing testgroup subtestfile
#方法二,千位2代表sgid權(quán)限,755對(duì)應(yīng)了ugo
qing@qingsword.com:~$ chmod 2755 qingdir
0×4.如何給文件夾添加sticky權(quán)限
如果一個(gè)用戶對(duì)一個(gè)目錄擁有rwx的權(quán)限,就意味著這個(gè)用戶對(duì)這個(gè)目錄擁有完全控制權(quán),他可以刪除這個(gè)目錄下的所有文件及文件夾,而如果這個(gè)目錄設(shè)置了sticky權(quán)限(Sticky Bit簡(jiǎn)稱SBIT權(quán)限),對(duì)這個(gè)目錄擁rwx權(quán)限的用戶在這個(gè)目錄下,只能刪除和更改自己創(chuàng)建的文件和文件夾,不能刪除和更改其他用戶創(chuàng)建的文件和文件夾。
假設(shè)有兩個(gè)用戶bob和steven,他們被分配到ceo組,現(xiàn)在有一個(gè)testdir的文件夾屬于ceo組,ceo組中的成員對(duì)這個(gè)文件夾擁有rwx權(quán)限,使用sticky權(quán)限對(duì)這個(gè)文件夾進(jìn)行控制,讓bob和steven在對(duì)自己創(chuàng)建的文件有完全控制權(quán)的同時(shí),只能查看其他人在這個(gè)目錄創(chuàng)建的文件,但不能修改和刪除,請(qǐng)看下面的實(shí)例:
#創(chuàng)建ceo組
qing@qingsword.com:~$ sudo groupadd ceo
#創(chuàng)建bob和steven并將他們分配到ceo組中
qing@qingsword.com:~$ sudo useradd -g ceo bob
qing@qingsword.com:~$ sudo useradd -g ceo steven
#分別給bob和steven配置密碼
qing@qingsword.com:~$ sudo passwd bob
qing@qingsword.com:~$ sudo passwd steven
#創(chuàng)建testdir文件夾并將它的所屬組更改為ceo,給這個(gè)組添加rwx權(quán)限,現(xiàn)在ceo組中成員對(duì)這個(gè)目錄擁有完全控制權(quán)
qing@qingsword.com:~$ sudo mkdir testdir
qing@qingsword.com:~$ sudo chgrp ceo testdir/
qing@qingsword.com:~$ sudo chmod g+rwx testdir/
#給testdir目錄添加sticky權(quán)限(注意sticky權(quán)限是添加在others上的)
qing@qingsword.com:~$ sudo chmod o+t testdir/
#查看當(dāng)前testdir目錄的權(quán)限
qing@qingsword.com:~$ ls -ld testdir/
drwxrwxr-t 2 root ceo testdir/
#切換到用戶bob,切換到testdir目錄中(假設(shè)testdir目錄路徑為/home/qing/testdir),touch一個(gè)文件
qing@qingsword.com:~$ su - bob
bob@qingsword.com:~$ cd /home/qing/testdir
bob@qingsword.com:~$ touch bobfile
#退出bob,使用steven登錄,切換到testdir文件夾中,嘗試刪除bob創(chuàng)建的文件*/
bob@qingsword.com:~$ exit
qing@qingsword.com:~$ su - steven
steven@qingsword.com:~$ cd /home/qing/testdir
steven@qingsword.com:~$ ls
bobfile
steven@qingsword.com:~$ rm -rf bobfile
rm: 無(wú)法刪除"bobfile": 不允許的操作
#此時(shí)steven只有查看bob創(chuàng)建的文件或文件夾內(nèi)容的權(quán)限,但無(wú)法刪除和修改它們
#退出steven,使用root權(quán)限刪除testdir的sticky權(quán)限,再次測(cè)試使用steven刪除bob創(chuàng)建的文件,成功
steven@qingsword.com:~$ exit
qing@qingsword.com:~$ sudo chmod o-t testdir/
qing@qingsword.com:~$ su - steven
steven@qingsword.com:~$ cd /home/qing/testdir
steven@qingsword.com:~$ ls
bobfile
steven@qingsword.com:~$ rm -rf bobfile
#方法二,千位1代表sticky權(quán)限,775對(duì)應(yīng)ugo
qing@qingsword.com:~$ sudo chmod 1775 testdir/