linux上的文件的權限
linux的哲學思想之一就是一切皆文件。這樣說來,每臺安裝了linux的主機上,就會有大量的文件。而另一方面,linux在安全方面有著極為出色的表現。眾所周知,linux是一個多用戶的系統,因此為一個文件加上合適的權限為顯得非常有必要了。linux上的基本權限我就不一一介紹了,請不熟悉的同學自行百度腦補。我們來說說linux上文件和目錄的特殊權限。
這是linux上一個文件的長格式說明:
-rw-r--r-- 1 root root 1187 Mar 19 16:30 /etc/passwd -rw------- 1 root root 2.9K Mar 20 05:29 .bash_history drwx------. 2 root root 4.0K Mar 19 16:08 .ssh
我們拿第一個文件/etc/passwd來做說明:
-rw-r--r-- 1 root root 1187 Mar 19 16:30 /etc/passwd
這里我們只說第一部分,第一個“-”說是這是一個普通文件, 后面的”rw——-“又以分為三個部分, 第一部分”rw-“是說這個文件的擁有者對這個文件有讀寫的權限, 第二部分“r–”是說這個文件的所屬組對這個文件只有讀的權限, 第三個“r–”是指系統上除了文件所有者和文件所屬組之外所有人只能夠擁有的可讀的權限了。
在linux上,每一個文件都有一種類型,它們的表示方式為: -:表示這是一個普通文件 d:表示這是一個目錄 p:表示這是一個管道符文件 s:表示這是一個套接字文件 b:表示這是一個塊設備 l:表示這是一個鏈接文件 c:表示這是一個字符設備
在linux上,我們可以看到新建一個文件和新建一個目錄后,這個文件和目錄對應的權限是不一樣的,其原因就是因為有umask的存在。 umask是指定用戶新建文件或目錄時默認權限的一個東東。我們可以在bash中輸入umask來查看系統上umask的值。
[root@localhost mageedu]# umask 0022
linux上默認的,新建一個文件時就有如rwxrw-rw-權限,而新建一個目錄則有rwxrwxrwx等權限,可以通過改變umask來改變新建文件和目錄的默認的權限。 linux上除了最基本的所有者,所屬組和其他人的讀,寫和執行權限之外,還有其他的特殊權限. 我們可以輸入lsattr和chattr來為文件和目錄設置隱藏權限,其用法如下:
lsattr:顯示文件特殊屬性
用法: lsattr [選項] 文件
常用選項:
-R 遞歸顯示文件夾及其內容的的屬性 -a 顯示文件的所有屬性 -d 只顯示目錄本身的屬性
chattr:設置文件特殊屬性
用法:chattr [選項] [模式] 文件
常用選項:
+ 增加某一特殊權限 - 移除某一特殊權限 = 設定某一特殊權限 -R 遞歸改變目錄及其子目錄的屬性
常用模式:
a 文件只能增加,不能修改和刪除(root也不能刪除這個文件,但是可以先把這個屬性去掉,然后刪除) c 保存文件時,自動壓縮文件,讀取時自動解壓縮 d 設置這個屬性后,打包時這個文件將不會被告打包 i 設置這個屬性后,文件內容將不會被更改 s 刪除文件時,完全刪除(刪除后不可恢復) u 刪除文件時,數據內容還在磁盤里(刪除后還可以恢復) A 保存文件時,文件的atime不改變
下面我們再來說下linux上的特殊權限。
針對可執行文件,可以設置suid權限。對一個文件設置suid權限后,任何用戶執行這個可執行文件時,不再以用戶自己的身份當作進程的屬主,而是以文件的屬主當作進程的屬主。拿/etc/shadow這個文件來說吧。我們可以看到這個文件的權限:
[root@localhost mageedu]# ll /etc/shadow ---------- 1 root root 878 Mar 20 11:58 /etc/shadow
可以看到,任何人都沒有修改這個文件的權限,那么有一天當一個普通用戶不想用自己現在使用的權限,想更換一個密碼的時候,那怎么辦呢。答案就在這個/etc/shadow這個文件身上。/etc/shadow這個文件就設置了suid權限,這樣一個普通用戶更改自己的密碼,輸入passwd那一刻,普通用戶臨時調用/etc/shadow這個文件的用戶所有者root的權限,然后修改自己的密碼,修改完之后,就又恢復到普通用戶自己的權限了。 對于設置了suid權限的文件來說: 1.suid權限僅對二進制程序有效 2.執行者對于該程序需要有執行權限 3.本權限僅在執行該權限的過程中有效 4.執行者將具有該程序擁有者的權限
suid表現為文件屬主執行權限位上顯示為s或S,文件原來有執行權限時為s,文件原來沒有執行權為S 為文件設置suid權限可以使用chmod u+s file命令,取消則用chmod u-s file命令。
說完了針對普通文件的特殊權限,再來說下針對目錄的特殊權限。對于具有sgid權限的目錄,用戶在此目錄下創建文件時,新建文件的屬組不再是用戶所屬的基本組,而是目錄的屬組。 對于一個設置了sgid的普通文件來說,其表現形式為: 1.sgid對二進制程序有用 2.程序執行者對于該程序需要有執行權限 3.執行者在執行過程中將會獲得該程序群組的支持 對于一個設置了sgid的目錄來說,其表現形式為: 1.用戶對此目錄有可讀寫權限時,該用戶能夠進入此目錄 2.用戶在此目錄下的有效群組將會變成該目錄的群組 3.用戶在此目錄下有寫權限時,建立的新文件屬組為此文件夾的屬組
為目錄設置sgid權限,可以使用chmod g+s dir這個命令,取消這個特殊權限則用chmod g-s dir這個命令。 sgid表現在文件屬組執行權限位上的s或S,對于有執行權限的目錄,其表現在權限位上為s,對于沒有執行權限的目錄,其表現在權限位上為S。
除了這兩個特殊的權限之外,linux上還有一個很特殊的權限,那就是sticky了。如下圖所示:
[root@localhost ~]# ll -d /tmp drwxrwxrwt. 3 root root 4096 Mar 20 21:43 /tmp
其在linux上的表現為t,對于有執行權限的目錄,其表現在權限位上為t,對于沒有執行權限的目錄,其表現在權限位上為T。sticky對于目錄的作用就在于:對于公共可寫的目錄,用戶可創建文件,可以刪除自己創建的文件,但無法刪除別人的文件。 為目錄設置sticky權限可以使用chmod o+t dir這個命令,取消可以用chmod o-t dir這個命令。
注意:以上的權限設置或取消都要有管理員的權限才可以。
祝大家工作學習愉快!
原創文章,作者:renpingsheng,如若轉載,請注明出處:http://www.www58058.com/73118
主要寫了linux下特殊權限位,內容寫的很詳細,排版也很好,繼續努力!