Linux檔案的存取權限及其控制
前面我們曾經說過,檔案系統要實現對檔案的保護,那麼它是如何?的呢?
它主要是通過對使用者存取權限的控制。
現在我們再來看一下我們上次所說的通過shell命令" ls" 來查看檔案的屬性時所出現的一串字元代表什麼意思。
drwxr-xr-x 3 root root 4096 2010-08-02 14:18 .
drwxr-xr-x 48 ryan ryan 4096 2010-08-20 17:04 ..
drwxr-xr-x 2 root root 4096 2010-08-19 21:05 tiger
[屬性] [ 檔案數] [ 擁有者 ] [ 使用者組 ] [ 檔案大小 ] [ 修改日期 ] [ 檔案名稱 ]
1>第一項檔案屬性總共由10位構成,第一位表示檔案類型。剩下的九位都是表示檔案的存取權限,可以按照每3個一組分為3組,從左至右,第一組表示檔案所有者對該檔案的操作許可權,第二組表示與檔案所有者同組(group)的使用者對該檔案的操作許可權,第三組表示其他使用者對該檔案的操作許可權。每組只可能出現3種字母。
2>第二項表示檔案個數。對於檔案,這一項的值是1;對於目錄這一項的值就是該目錄中的目錄檔案個數(如果是空目錄則系統只有預設的兩個目錄項:.(當前母錄)和 ..(目前的目錄的子目錄))
3>第三項表示該檔案或目錄的所有者
4>第四項表示檔案所有者所屬的組(group)
5>第五項表示檔案的大小,預設為位元組
6>第六項是最後一次的修改時間。以“月,日,時間“的格式表示。
7>最後一項表示檔案名稱
--------------------------------------------
現在我們具體來說明第一項中的檔案許可權
一.檔案許可權
1. 先看一個執行個體
d rwx r-x r-x
[ 檔案類型] [owner許可權] [group許可權] [other許可權]
1>第一個屬性,檔案類型 :[d]表示目錄
[-]表示檔案
[l]表示連結檔案
[b]表示裝置檔案中可供儲存的介面裝置(塊裝置)
[c]表示裝置檔案中的序列埠裝置
2>接下來的屬性中,3個為一組,且群為rwx三個參數的組合:
[r]表示可讀
[w]表示可寫
[x]表示執行
3>可以用八位元字表示每個屬性,每個屬性對應的數字是
r對應 4,w 對應 2 ,x 對應 1
我們可以將同一組的三個屬性進行累加,例如當屬性為 [-rwxrwxrwx] 則為 777.
2.那麼如何通過shell 命令來變更檔許可權呢
1> chgrp :改變檔案所屬使用者組。
2> chown :改變檔案擁有者。
3> chmod :改變檔案的屬性 , SUID 等屬性。
a.chgrp [-r] groupname dirname/filename
需要注意的是,你要改成的使用者組的名稱,必須在 /etc/group 裡存在,否則就會顯示錯誤。(-r表示遞迴執行)
函數的執行個體:
sudo chgrp root 1
把1的使用者組許可權該成root
b.chown [-r] groupname dirname/filename
函數的執行個體:
sudo chown root 1
把1的[owner許可權]該為root
c.還有一種方法也可以修改檔案許可權
u(使用者) + (加入) r/w/x
chmod g(組) -(除去) w/r/x +file/dir
o(other) =(設定) x/r/w
a(所用使用者組) + r/w/x
我們一般比較常用chmod 來該檔案的許可權
現在我們來體驗一下:
首先 :touch tiger(建立一個tiger檔案)
然後用:ls -l tiger(查看一下它的屬性)
具體實現:
think@ubuntu:~/test$ touch tiger
think@ubuntu:~/test$ ls -l tiger
運行結果:
-rw-r--r-- 1 think think 0 2010-11-16 14:39 tiger
可以看到檔案的屬性是:使用者具有讀和寫的許可權
那麼我們讓使用者具有執行的許可權可以通過命令:chmod u+x 檔案名稱來實現
具體實現:
think@ubuntu:~/test$ sudo chmod u+x tiger
think@ubuntu:~/test$ ls -l tiger
運行結果:
-rwxr--r-- 1 think think 0 2010-11-16 14:39 tiger
從顯示的結果可以看出現在的使用者具有了rwx的許可權.
Tiger-John說明:
我們也可以通過8進位數子來實現檔案許可權的修改例如:我們輸入命令: sudo chmod 777 tiger
執行完後所有的使用者都具有了讀寫執行的許可權(其中 7=4+2+1,4表示r,2表示w,1表示x)所以就表示它即有讀,寫,執行的許可權。
3.下面對setuid ,setgid,stickybit的三個許可權進行說明:
1>一個檔案都有一個所有者, 表示該檔案是誰建立的。同時, 該檔案還有一個組編號, 表示該檔案所屬的組, 一般為檔案所有者所屬的組。如果是一個可執行檔, 那麼在執行時, 一般該檔案只擁有調用該檔案的使用者具有的許可權。
而setuid, setgid 可以來改變這種設定.
2>setuid ,setgid,stickybit的用法
a.setuid: 設定使檔案在執行階段具有檔案所有者的許可權. 典型的檔案是 /usr/bin/passwd. 如果一般使用者執行該檔案, 則在執行過程中, 該檔案可以獲得root許可權, 從而可以更改使用者的密碼.
b.setgid: 該許可權只對目錄有效。目錄被設定該位後,任何使用者在此目錄下建立的檔案都具有和該目錄所屬的組相同的組。
c.sticky bit: 該位可以理解為防刪除位元. 一個檔案是否可以被某使用者刪除, 主要取決於該檔案所屬的組是否對該使用者具有寫入權限. 如果沒有寫入權限, 則這個目錄下的所有檔案都不能被刪除, 同時也不能添加新的檔案. 如果希望使用者能夠添加檔案但同時不能刪除檔案, 則可以對檔案使用sticky bit位. 設定該位後, 就算使用者對目錄具有寫入權限, 也不能刪除該檔案.
3>那麼如何操作這些標誌操作這些標誌與操作檔案許可權的命令是一樣的, 都是用 chmod命令。
有兩種方法來操作
a.
chmod u+s tiger 表示為tiger檔案加上setuid標誌. (setuid 只對檔案有效)
chmod g+s tigerdir 表示為tigerdir目錄加上setgid標誌 (setgid 只對目錄有效)
chmod o+t tiger 表示為tiger檔案加上sticky標誌 (sticky只對檔案有效)
Tiger-John說明:
setuid 只對檔案有效
setgid 只對目錄有效
sticky只對檔案有效
b.採用八進位方式。
對一般檔案通過上面所說的方法用三組八位元字來置標誌, 如 666, 777, 644等. 如果設定這些特殊標誌,則在這組數字之外外加一組八位元字。如 4666, 2777等. 這一組八位元字三位的意義如下
abc
a - setuid位, 如果該位為1, 則表示設定setuid
b - setgid位, 如果該位為1, 則表示設定setgid
c - sticky位, 如果該位為1, 則表示設定sticky
設定完這些標誌後, 可以用 ls -l 來查看。如果有這些標誌, 則會在原來的執行標誌位置上顯示。
如 rwsrw-r-- 表示有setuid標誌
rwxrwsrw- 表示有setgid標誌
rwxrw-rwt 表示有sticky標誌
Tiger-John說明:
那麼原來的執行標誌x到哪裡去了呢? 系統是這樣規定的, 如果本來在該位上有x, 則這些特殊標誌顯示為小寫字母 (s, s, t). 否則, 顯示為大寫字母 (S, S, T)