linux中,常常涉及到權限的問題。文件的權限有3組,owner,group,other,每一組都有rwx三種設置。r(4):可讀;w(2):可寫;x(1):可執行。我們在執行shell命令ls -l時,就會顯示出文件的所有信息,第一組就是文件屬性中的高級屬性,權限。這一組總共有10格,每一格是一個bit。
第一個是特殊位:
d表示目錄;
l表示連接文件;
-表示文件;
b表示為裝置(device)文件中可供存儲的接口設備;
c表示為裝置文件中的串行端口設備(如鍵盤,鼠標);
s表示該文件是存放socket信息的,一般是給 process 之前用來進行 network socket 存取溝通使用的檔案;
p表示數據輸送文件(FIFO,pipe),它的主要目的是為了解決多個程序同時存取一個文件時所造成的錯誤。
以后的9個格子按照之前所說的3個組依次分配,給每個組設置讀,寫,執行權限。
在這里要注意:如果你想開放一個目錄,一定要確定X即可執行權限已經賦予了該用戶或群,否則是不可以讀寫的,也就是說,你給的r,w是沒意義的。
文件權限的修改:
chmod:改變檔案的屬性、SUID等特性
用法:chmod [-R] 777 dir/filename (注:7=r+w+x;6=r+w;5=r+x;3=w+x)
chmod [-R] a+rwx dir/filename
chmod [-R] u-r dir/filename
chmod [-R] u=rwx,go=rx dir/filename
(注:a:所有用戶和組;u:所有者;g:組;o:其他。+:添加權限;-刪除權限;=賦予權限)
chgrp:改變檔案的所屬群組
用法:chgrp [-R] group dir/filename
chown:改變檔案所屬人
用法:chown [-R] user dir/filename;
順便還可以改變群組
chown [-R] user:group dir/filename
除了這些一般權限外,我們還可以設置高級權限,也可以說是特殊權限:
SUID/SGID/Sticky Bit (檔案特殊權限):
SUID (Set UID): 會制作出 s 的權限,權限數字是 4 。這個權限只能作用於可執行文件,不可作用於目錄,shell script也不行。使一般使用者在執行文件時,暫時具有該文件擁有者的權限。
SGID (Set GID): 制作出 s 權限,權限數字是 2 。這個權限可以作用於目錄和文件。作用於目錄時,在該目錄下建立的所有文件和目錄的group都會是該目錄的group;作用於文件時,則不論使用者是誰,在執行該程序的時候, 他的有效群組 (effective group) 將會變成該程序的群組所有人 (group id)。
Sticky Bit: 制作出 t 權限,權限數字是 1 。這個權限只能作用於目錄。在該權限作用的目錄里,如果使用者具有w,x權限,那么他所創建的文件和目錄,只有檔案的擁有者和root才能刪除。
注意:在字符表示權限時,s和t是出現在x的位置的,意思是在可執行的文件和目錄時,它們才是有意義的。如果文件或目錄本身u、g或o就沒有可執行權限,那么它所在的權限組出現的是S或者T,表示空的意思。用數字表示權限,就是在rwx前面加上4、2、1的組合就是了,如1777。
第一個是特殊位:
d表示目錄;
l表示連接文件;
-表示文件;
b表示為裝置(device)文件中可供存儲的接口設備;
c表示為裝置文件中的串行端口設備(如鍵盤,鼠標);
s表示該文件是存放socket信息的,一般是給 process 之前用來進行 network socket 存取溝通使用的檔案;
p表示數據輸送文件(FIFO,pipe),它的主要目的是為了解決多個程序同時存取一個文件時所造成的錯誤。
以后的9個格子按照之前所說的3個組依次分配,給每個組設置讀,寫,執行權限。
在這里要注意:如果你想開放一個目錄,一定要確定X即可執行權限已經賦予了該用戶或群,否則是不可以讀寫的,也就是說,你給的r,w是沒意義的。
文件權限的修改:
chmod:改變檔案的屬性、SUID等特性
用法:chmod [-R] 777 dir/filename (注:7=r+w+x;6=r+w;5=r+x;3=w+x)
chmod [-R] a+rwx dir/filename
chmod [-R] u-r dir/filename
chmod [-R] u=rwx,go=rx dir/filename
(注:a:所有用戶和組;u:所有者;g:組;o:其他。+:添加權限;-刪除權限;=賦予權限)
chgrp:改變檔案的所屬群組
用法:chgrp [-R] group dir/filename
chown:改變檔案所屬人
用法:chown [-R] user dir/filename;
順便還可以改變群組
chown [-R] user:group dir/filename
除了這些一般權限外,我們還可以設置高級權限,也可以說是特殊權限:
SUID/SGID/Sticky Bit (檔案特殊權限):
SUID (Set UID): 會制作出 s 的權限,權限數字是 4 。這個權限只能作用於可執行文件,不可作用於目錄,shell script也不行。使一般使用者在執行文件時,暫時具有該文件擁有者的權限。
SGID (Set GID): 制作出 s 權限,權限數字是 2 。這個權限可以作用於目錄和文件。作用於目錄時,在該目錄下建立的所有文件和目錄的group都會是該目錄的group;作用於文件時,則不論使用者是誰,在執行該程序的時候, 他的有效群組 (effective group) 將會變成該程序的群組所有人 (group id)。
Sticky Bit: 制作出 t 權限,權限數字是 1 。這個權限只能作用於目錄。在該權限作用的目錄里,如果使用者具有w,x權限,那么他所創建的文件和目錄,只有檔案的擁有者和root才能刪除。
注意:在字符表示權限時,s和t是出現在x的位置的,意思是在可執行的文件和目錄時,它們才是有意義的。如果文件或目錄本身u、g或o就沒有可執行權限,那么它所在的權限組出現的是S或者T,表示空的意思。用數字表示權限,就是在rwx前面加上4、2、1的組合就是了,如1777。