chmod [選項] mode file.....
chmod先來開道。
chmod選項常用選項-R,--recursive 遞歸操作,作用目錄以及目錄下的所有文件(..目錄除外)
Linux將分成三類人進行權限管理:擁有者、所屬組以及其他人。擁有者有哪些權限?(其實擁有者可以對文件為所欲為)所屬組有哪些權限?其他人有哪些權限?
擁有者、所屬組可以使用chown、chgrp命令進行修改,這里不做解釋。
Linux將權限分成九列,如上圖的rw-r--r--,rw-r--r--之前的-表示該文檔是普通文件,如果是d,表示為目錄,c表示塊設備等等
rw- r-- r--其中前三列表示擁有者的權限,中三列表示所屬組的權限,后三列表示其他人所擁有的權限。
r(read):對於目錄和文件都表示可讀
w(write):對於目錄表示可創建文件,也可刪除文件;對於文件表示可以對文件內容進行寫操作
x(execute):執行;對於目錄表示可以進入目錄內,如cd /home ; 對於文件表示可執行,如shell腳本
一、chmod對文件權限操作
u表示擁有者;g表示所屬組;o表示其他人。a表示對上述三者都進行操作
利用+加號給擁有者或所屬組或其他人添加一個或幾個權限:u+x,g+wx 給擁有者添加一個可執行的權限,給所屬組添加了寫和執行的權限;
利用-減號給擁有者或所屬組或其他人減掉一個或幾個權限:o-r 將其他人對該文件讀的權限減掉
所以chmod u+x,g+wx,o-r log2010.log 表示對log2010.log文件,擁有者添加可執行權限,變成擁有者既可以對該文件執行,也可以對該文件讀和寫;所屬組添加寫和執行的權限,那么所屬組對該文件有讀寫和執行的權限,其他人。。。。(注意,u、g、o用逗號分割開)
=等號表示直接設置u、g、o為什么權限。例如chmod u=rwx,g=rwx log2011.log 表示對log2011.log文件擁有者、所屬組都擁有讀寫和執行權限,o其他人保持不動,因為沒有對其他人操作
首先創建空白文件log1919.log,修改擁有者和所屬組為tel和tel2,修改權限為r--rw-r--,這時候切換到tel用戶,vim log1919.log編輯該文件,提示readonly,寫進入內容后,可以使用wq!強制保存,然后使用cat log1919.log 可以看到雖然擁有者對該文件只有讀權限,但是擁有者tel依然對他進行了寫操作,下面在測試一下其他者是否可讀可寫?
讀取log1919.log文件沒問題,但是寫操作提示沒有權限,無論是否wq!
二、chmod對目錄權限操作
chmod也可以對目錄設置任何權限,比如r--------、rw-r--r--、rwx-rw-rw等等,但實際上只有三種權限是有意義的:---、rwx、r-x
舉例:
rw-權限,對目錄能讀,能創建和刪除,但是卻不可以進入目錄,當然你可以利用絕對路徑ls -l /home/log來查看該目錄下有什么文件,也可以通過絕對路徑創建文件目錄,但是你不覺得怪異嗎?
再比如:--x,沒有讀和寫的權限,但是有進入目錄的權限。
你切換到其他用戶tel,雖然cd /home/log目錄下,但是無法查看,也不能創建刪除,能干什么?
所以基本上目錄只有---、rwx、r-x三種權限有意義
三、文件的特殊權限
文件特殊權限分為suid、sgid和sticky
suid對應數字權限4,sgid對應數字權限2,sticky對應數字權限1
如何設置呢?
兩種設置姿勢:一種采用數字權限設置:chmod 4464 log1919.log 數字4464的第一個數字4表示s,第二個4表示r,第三個6表示rw,第四個4表示r
chmod g+s log2010.log 如同前文設置的模式一樣
對於普通文件SUID與SGID的作用是類似的:
在Unix中,進程在訪問資源的時候,需要四種有效id,分別是uid、gid、euid、egid,內核通過對這四個id的識別來進行資源權限訪問,實質應該說是內核對euid、egid的識別。
之所以說四個id是因為當進程沒有設置SUID、SGID時,euid=uid,egid=gid,比如:
假設log1919.log有執行權限,同時log1919.log的擁有者所屬組為tel,uid=1000,gid=1000,在用戶tel2 uid=1001,gid=1001 運行log1919.log時,進程形成的euid=1001(tel2)、egid=1001(tel2),針對euid、egid內核判斷tel2對log1919.log有哪些權限。
當可執行文件log1919.log設置SUID、SGID權限,那么tel2 uid=1001,gid=1001將獲得可執行文件擁有者或者所屬組的權限,這時候tel2運行log1919.log時,進程形成的euid=1000(tel)、egid=1000(tel),也就是tel2將臨時獲得文件log1919.log的擁有者或者所屬組的權限。
passwd就是一個典型的例子
首先普通用戶對/etc/shadow是沒有任何權限的,也可以看到root用戶給tel設置的密碼列是mkkb37開始的。照理來說,tel對/etc/shadow沒有任何權限,那么tel是沒辦法修改密碼的,因為沒辦法修改/etc/shadow的內容的。
但是切換到tel用戶,利用passwd命令卻給tel自己重新設置了一個密碼,重新切換到root用戶,也可以看到tel的密碼列變成了Avz4開頭了,說明/etc/shadow被普通用戶tel修改了,這就可怕了。原因是passwd命令,我們可以ls -l看到passwd命令的擁有者是root,同時passwd是設置了SUID,擁有者權限rws,其他用戶有r-x權限,所以tel可以執行passwd,同時tel在執行passwd命令的時候,進程形成的euid=0(root),egid=1000(tel),也就是tel用戶臨時獲得了root權限,因為root在linux里是無所不能的上帝,利用root權限將/etc/shadow修改了(在這里注意tel passwd命令只能修改自己的密碼,后面不能緊跟用戶,因為passwd username是無法執行的,執行不到,被設置了)
同樣SGID也可以臨時獲得可執行文件所屬組的權限
以上總結:對於可執行二進制文件,SUID、SGID可讓不具備權限的用戶在執行可執行文件時,臨時獲得可執行文件的擁有者權限或者所屬組的權限
對於目錄文件:
SUID對目錄時無意義的,而對目錄設置了SGID,可以讓用戶在目錄下創建的所有文件擁有者為用戶本身,所屬組為目錄的所屬組
注意原則上創建目錄也應該不可以,因為log目錄的所屬組是root,權限太大了,可以將log擁有者所屬組設置為普通用戶測試。
sticky 沾着位權限
chmod u+t log 或者 chmod 1xxx log
sticky只對目錄有意義:表示在該目錄下,只能刪除自己創建的文件,其他的文件是沒有權限刪除的。t權限主要就是為了對沒有目錄文件的保護,因為如果目錄沒有t權限,那么只要該用戶對目錄有讀寫的權限,那么就可以將該目錄下的所有文件都可以刪除,不論該目錄下的文件是否在自己創建的,還是root'用戶創建的。
這里tel用戶就沒辦法刪除/tmp目錄下root創建的ifcfg.log文件,因為/tmp設置了t權限,而/home/log目錄未設置t權限,所以在log目錄下刪除了root創建的log2010.log文件
t權限就是為了保護而存在,用戶只能刪除擁有者是自己的文件,其他的文件卻沒有權限刪除
最后,可能有時候文件的權限是rwSrwSrwT,而不是rwsrwsrwt,S與s,T與t的區別就是原本屬於x權限位,是否有x執行權限,S表示該位原本沒有x執行權限,s表示該位置原本是x執行權限,t表示該位置原本有x執行權限,T則沒有。
END