Linux中的一切都是檔案,它的檔案分為以下幾類:
普通檔案:分為純文字檔案(ASCII檔案,一般可以直接讀取的檔案,比如設定檔)、二進位檔案(比如可執行檔),資料格式檔案(比如登陸檔案);
目錄檔案:就是目錄
串連檔案:類似windows的捷徑
裝置檔案:通常在/dev中,又分為塊裝置檔案和字元裝置檔案,塊裝置是以字元塊為傳輸單位,而字元裝置是以單個字元為傳輸單位。
通訊端: 這類檔案通常作用於網路資料連線中,通常放在/var/run目錄中
管道檔案:用於多個進程間的通訊,它是指上是一個檔案緩衝區
當我們使用ls –al這條命令列出目錄中的檔案資訊時,我們可以看到它的檔案屬性是以下格
式:-rwxrwxrwx,其中’-’這個表示檔案類型:
【d】表示目錄;【-】表示檔案;【l】表示串連檔案;【b】表示塊裝置檔案;【c】表示字元設
備檔案;
而後面的9個屬性又分為三組,沒三個一組,分別表示使用者,群組和其它。其中【r】表示
可讀;【w】表示可寫;【x】表示可執行。同時,這三種屬性可以分別用數字來表示:
【r】:4;【w】:2;【x】:1
以上所述是檔案的基本許可權,此外,linux下的檔案還有三個特殊的許可權:SUID/SGID/Sticky Bit
SUID:當s許可權取代user的x時,也就是類似-r-s—x—x,稱為set UID,簡稱為SUID,這時,當
使用者執行這個檔案時,就會暫時得到這個檔案擁有者的許可權。
setGID:與SUID類似,只不過它的s是取代群組的x。
SBIT:當t許可權取代其它的x時,就表示SBIT,它只對目錄有效,對檔案沒有任何效果。在具
有SBIT的目錄下,使用者若再該目錄下具有w及x的許可權,則當使用者在該目錄下建立檔案或
目錄時,只有檔案擁有者與root才有許可權刪除。
檔案許可權的更改
Chgrp:改變檔案所屬群組
用法:chgrp [-R] dirname/filename;//下列的-R參數統一為目錄下檔案的遞迴
例:chgrp users install.log
Chown:改變檔案擁有者
用法:chown [-R] 擁有者檔案或目錄
Chown [-R] 擁有者:群組 檔案或目錄
例:chown huli install.log
Chown huli:usersinstall.log
注意:當我們使用cp將自己的檔案拷貝給另一個使用者時,該檔案的擁有者和群組並沒有改
變,因此,要讓這個檔案徹底地屬於這個使用者,還必須修改該檔案的擁有者和群組。
Chmod:變更檔屬性
前面已經提到過,r,w,x三個屬性分別對應的數字是4、2、1。而9個屬性又分為三組,那麼
一組的屬性就是這三個屬性的的累加。
例如,當屬性為【-rwxr-x---】時,可知
Owner=rwx=4+2+1=7;group=r-x=4+1=5;others=---=0+0+0=0;
這個檔案的許可權就為750
用法:chmod [-R] xyz 檔案或目錄
其中xyz就是剛剛提到的檔案許可權,如上面的750
例:chmod 777 ~/.bashrc
還有一種變更檔許可權的方法。可以使用u,g,o分別表示三組的屬性,a表示all,文法如下:
Chmod [ugoa][+-=] [rwx] 檔案或目錄
參數:
其中u表示使用者,g表示群組,o表示其他,a表示所有,+表示加入屬性,-表示減去屬性
=表示設定屬性。
例:chmod u=rwx,go=rx ~.bashrc
Chmod a+w~/.bashrc
Chmod a-x~/.bashrc
注意:目錄屬性有一個特別之處,那就是能否進入它與x這個屬性有關
例:cd /tmp
Mkdir testing
Chmod 766testing
Su huli
Cd testing;//permissiondenied
可以看到,在上面的例子中,我在/tmp下建立了一個目錄,並將目錄的許可權更改為【rwxrw-rw-】
然後將切換到huli這個使用者下,可以看到,該使用者對於這個目錄有讀寫的許可權,但是沒有執
行許可權,這時,我使用cd命令進入這個目錄,會看到permission denied的提示資訊,表示
沒有許可權進入該目錄。這時,如果你將x許可權補上,chmod o+x testing,再使用cd命令,便
可以順利進入該目錄。
由此可知,能否進入該目錄是與x屬性息息相關的。
前面提到過SUID/SGID/SBIT這幾個許可權,那麼這裡就理所當然地要涉及到這幾個許可權的設定。
與普通屬性相似,SUID/SGID/SBIT所對應的數字也為4、2、1
例:將檔案的許可權更改為【-rwsr-xr-x】
chmod 4755 test
將檔案的許可權更改為【-rwxr-sr-t】
Chmod 3755 test
由此可知,這三個許可權是設定在最前面。
注意:當一個檔案的許可權為【-rw-rw-rw-】時,我們再來更改這幾個特殊許可權試試看
Chmod 7666 test;ls –l test
可看到,列印出的結果為【rwSrwSrwT】,為什麼是大寫的S和T呢,這是因為檔案原來的基礎屬性中,使用者,群組和其它中都沒有x這個屬性,而SUID表示“該檔案在執行時,具有檔案擁有者的許可權”,但檔案擁有者都無法執行了,又哪來的許可權給別人呢,因此,大寫的S和T都表示空的意思。
檔案與目錄的預設許可權
當我們建立立一個檔案或者目錄時,它的預設屬性是什麼呢?這就與umask相關。umask就是“檔案或者目錄的屬性預設值要減掉的許可權”。如果查看umask值和檔案或者目錄的屬性預設值呢?
Umask有兩種方式來查看。
第一種是直接使用umask
0022
第一組數字就是指剛才講到的特殊屬性
第二種是以符號的形式列印unmask -S
U=rwx,g=rx,o=rx
檔案與目錄的屬性預設值也是不一樣的。預設許可權下,檔案是沒有可執行許可權的,也就是
666,【-rw-rw-rw-】;
而由於x與是否進入此目錄有關,因此預設為所有許可權開放,即為777,【drwxrwxrwx】;
當建立立一個檔案或者目錄時,它們的屬性就是上面的預設屬性減去umask的值。
檔案的隱藏屬性
檔案有隱藏屬性,在系統安全性方面,該隱藏屬性非常的重要
Chattr:設定檔案隱藏
用法:chattr [+-=] [ASacdistu] 檔案或者目錄名
所有的參數就不一一列舉了,這裡只列舉兩個比較重要的參數
a:設定了a之後,這個檔案只能增加資料,而不能刪除,只有root才能設定這個屬性。
i:它的作用很大,它可以讓一個檔案“不能被刪除、改名、設定串連,也無法寫入或者增加資料”
注意:這兩個屬性是較常用的屬性,而且只有root才能設定
lsattr:顯示檔案的隱藏屬性
格式:lsattr [-aR] 檔案或者目錄
-a表示將隱藏檔案的屬性也顯示出來,而-R連同子目錄的屬性也一併列出來。