到目前為止我們所了解到的權限位只有三位為一段饺律,其實還有一位權限,那就是set_uid伦籍、set_gid蓝晒、stick_bit。
*set_uid:該權限針對二進制可執(zhí)行文件帖鸦,芝薇,使文件在執(zhí)行階段具有文件所有者的權限。比如passwd這個命令就具有該權限作儿。當普通用戶執(zhí)行passwd命令時洛二,可以臨時得獲得root權限,從而可以改密碼攻锰。
*set_gid:該權限可以作用在文件上(二進制可執(zhí)行文件)晾嘶,也可以作用在目錄上。當作用在文件上時娶吞,其功能和set_uid一樣垒迂,它會使文件在執(zhí)行階段具有文件所屬組的權限。目錄被設置這個權限后妒蛇,任何用戶在此目錄下創(chuàng)建的文件都具有和該目錄所屬的組相同的組机断。
*stick_bit:可以理解為防刪除位。文件是否可以被某用戶刪除绣夺,主要取決于該文件所在的目錄是否對該用戶具有寫權限吏奸。如果沒有寫權限,則這個目錄下的所有文件都不能刪除陶耍,同時也不能添加新的文件奋蔚,如果希望用戶能夠添加文件但不能刪除該目錄下其他用的文件,則可以對父目錄增加該權限烈钞。設置該權限后泊碑,就算用戶對目錄具有寫權限,也不能刪除其他用戶的文件毯欣。
下面我們看下示例蛾狗,比如passwd命令就設置了set_uid權限,而/tmp/目錄則設置了stick_bit權限
[root@localhost ~]# ls -lh /usr/bin/passwd
-rwsr-xr-x. 1 root root 28K 6月? 10 2014 /usr/bin/passwd
[root@localhost ~]# ls -ld /tmp/
drwxrwxrwt. 10 root root 4096 12月 22 08:30 /tmp/
這里看到passwd顯示的是rws而非傳統(tǒng)的rwx仪媒,用數(shù)字表示為4755沉桌。/tmp/顯示的是rwt而非rwx,用數(shù)字表示為1777算吩,這里4跟1是怎么算的呢留凭,第一位數(shù)字可以是0、1(--t)偎巢、2(-s-)蔼夜、3(-st)、4(s--)压昼、5(s-t)求冷、6(ss-)瘤运、7(sst),這時我們再看passwd它是s--匠题,所以是4拯坟。
配置這些特殊權限的方法和之前一樣,我們想給文增加set_uid韭山,那么命令格式為:chmod u+s filename郁季,而去掉這個權限的命令則為chmod u+s filename,同理set_gid就是chmod g+s filename钱磅,stick_bit是:chmod o+t dirname梦裂。
有時候你會發(fā)現(xiàn)set_uid權限為大寫S,而不是小寫s盖淡,比如rwS年柠,這時因為該文件沒有x權限所致,不管是大寫的S還是小寫的s褪迟,都表示它存在set_uid或者set_gid權限彪杉,同理sticky bit也已一樣。
軟鏈接文件/硬連接文件
鏈接文件分為兩種牵咙,一種是軟鏈接派近,一種是硬鏈接,現(xiàn)在我們就來認識一下這兩種鏈接洁桌。
*軟連接:軟連接是一個獨立存在的文件渴丸,它相當于windows上的快捷方式,另凌,當讀取這個鏈接文件時谱轨,它會把讀取的行為轉發(fā)到該文件所鏈接的文件上。例如吠谢,現(xiàn)在有一個文件a土童,我們做了一個軟連接文件b(一個很小的鏈接文件),b指向了a工坊,當讀取b時献汗,b就會把讀取的動作轉發(fā)到a上,這樣就讀取了a文件王污。當我們刪除文件a時罢吃,文件b不會被刪除,但是再次打開b文件的時候昭齐,會提示無法打開文件尿招。然而在我們刪除b文件的時候,a文件是不會受到影響。
*硬鏈接:當系統(tǒng)要讀取一個文件時就谜,會先讀inode的信息怪蔑,然后根據(jù)inode中的信息到塊區(qū)域將數(shù)據(jù)取出,而硬鏈接是直接再建立一個inode鏈接到文件放置的區(qū)域丧荐,既進行硬鏈接時該文件內容沒有任何變化缆瓣,只有增加了一個指向這個文件的inode,并不會額外占用磁盤空間篮奄,硬鏈接有兩個限制:(1)不能跨文件系統(tǒng)捆愁,因為不用的文件系統(tǒng)有不同的inode table割去;(2)不能鏈接目錄窟却。
這樣看來,似乎硬鏈接更為安全呻逆,因為刪除任何一個硬鏈接文件夸赫,還會有其他文件指向那個inode,既然inode存在咖城,那文件的數(shù)據(jù)塊也就存在茬腿,可是因為硬鏈接限制太多了,所以用途上比較受限宜雀,而軟連接的使用方向較廣∏衅剑現(xiàn)在我們可以學習怎么創(chuàng)建軟硬鏈接,這里我們需要使用的命令為:ln(link)
ln命令的格式為:ln [-s][來源文件][目的文件]辐董,該命令常用的參數(shù)是-s悴品,如果不加-s選項就是建立硬鏈接,加-s就是軟連接简烘。示例
[root@localhost ~]# mkdir /home/hch/
[root@localhost ~]# cp /etc/passwd /home/hch/
[root@localhost ~]# cd /home/hch/
[root@localhost hch]# ll
總用量 4
-rw-r--r--. 1 root root 885 12月 22 08:35 passwd
[root@localhost hch]# ln passwd passwd-herd
[root@localhost hch]# ll
總用量 8
-rw-r--r--. 2 root root 885 12月 22 08:35 passwd
-rw-r--r--. 2 root root 885 12月 22 08:35 passwd-herd
[root@localhost hch]# du -sk
4 .
ll命令等于ls -l苔严。一開始目錄下面只有一個passwd文件,目錄總大小為4KB孤澎,做了硬鏈接后届氢,雖然兩個文件的大小都為1088B,但目錄的總大小并沒有變化覆旭。我們不妨先刪除源文件退子,然后比較一下。
[root@localhost hch]# rm -f passwd
[root@localhost hch]# ll
總用量 4
-rw-r--r--. 1 root root 885 12月 22 08:35 passwd-herd
[root@localhost hch]# !du
du -sk
4 .
上例中型将,刪除源文件passwd后絮供,文件大小依舊不變。這說明硬鏈接文件并不會復制數(shù)據(jù)塊茶敏,額外占用磁盤空間壤靶。
接下來我們看下軟鏈接的一些特性。
[root@localhost hch]# ln -s passwd passwd-soft
[root@localhost hch]# ll
總用量 4
-rw-r--r--. 1 root root 885 12月 22 08:35 passwd-herd
lrwxrwxrwx. 1 root root? 6 12月 22 08:39 passwd-soft -> passwd
[root@localhost hch]# head -n1 passwd-soft
head: 無法打開"passwd-soft" 讀取數(shù)據(jù): 沒有那個文件或目錄
[root@localhost hch]# ll
上例中惊搏,如果刪除源文件贮乳,則不能讀取軟鏈接文件忧换,而且使用命令ll查看,發(fā)現(xiàn)顏色也有所變化向拆,這說明目錄不可以做硬鏈接亚茬,但可以做軟鏈接