linux文件權限chmod

linux的文件權限經過用戶,組和其它組來實現。一個文件只能屬於一個用戶和組, 若是其它的用戶想有這個文件的權限,則能夠將該用戶加入這個組,一個用戶能夠同時屬於多個組。通常來講一個應用下不要有太多的文件組和用戶,最好不要用 ROOT執行角本,這樣權限都放放大,比較不安全html

 

Linux下很重視權限,權限包括讀,寫,執行。因此即便Linux下染了病毒,也不必定中病毒,其實就是這個權限的問題。初學者在Linux執行 命令是會感受比較累,每次都是要用su來切換用戶,其實這也是Linux保護數據的一種模式。固然建議,用戶登入是不要直接用root用戶登入。若是知道 root登陸命令的話。linux

Linux下有用戶跟羣組的觀念。每每分爲三個部分,持該文件的用戶(user),跟持該文件同組的用戶(group),剩下的其餘用戶(other)。一個用戶能夠屬於不少個羣組。Linux下表示權限有兩種方式:shell

一種是八進制表示法(十位表示法,不是說八進制有十位,而是三個八進制位,再加一個最高位共十位),安全

另一種十二位二進制表示法(十二個二進制位)。socket

先介紹第一種:ui

是三種模式,三個屬組,就構成了9位。-表明無權限,r表明只讀,w表明寫的權限,x則表明執行。因此就有下面的組合。將-視爲0,x視爲1,w視 爲2,r視爲4.這種組合根據該位是否有這個數來肯定,就肯定以下的9種組合方式。恰好,總的權值0-7對應於八進制的所有。因此也能夠說權限是能夠用八 進制來表示的。最高的權限就是7,表明可讀,可寫,可執行。3就是表明只有寫跟執行的權限。其餘數字類推。spa

 

 模式 數字
  rwx 7
  rw- 6
  r-x 5
  r-- 4
  -wx 3
  -w- 2
  --x 1
  --- 0htm

每一個八進制數其實能夠轉化爲三位的二進制數,進程

r=100,w=010,x=001,-=000ip

r=4,      w=2,      x=1,     -=0

這個關係在第二種表示方法中是有用的。因爲r是出如今三位中的最高位,就至關於最高位纔有效,可忽略0位。在這種方法中,你能夠相似的在出現的地方對它置1,不出現的地方置0,而後三個三個的轉化就出來三位的八進制數了。

仍是舉幾個例子吧:

-rw-rw-r-- 1 samuel samuel 6479 07-08 08:46 Christians.pls
根據上面對應關係爲664.

-rwxr-xr-x  1 samuel samuel   0 Jan 9 17:44 scriptfile.sh
這個對應關係算出來就是755.

因此根據數字也能夠推出來777就是指-rwxrwxrwx的模式。

指定權限Linux的命令爲chmod,比較自由能夠用數字來表示也能夠用英文形象的表示。

如chmod 777 samuel.sh全部用戶取得最高的權限

chmod o+w samuel.sh其餘用戶被賦予了寫的權限

chmod go-rw samuel.sh組跟其餘用戶被刪去讀跟寫的權限

chmod的行爲規範:

+ 表示添加權限

- 表示刪除權限

= 表示使之成爲惟一的權限

只有這樣,本身寫的shell腳本才能夠被Linux執行。不然是不可能運行的,這個就是Linux有別於Windows的機制,也是採用這個方法能夠防止病毒自我運行,由於運行的條件是必需要有運行的權限,而這個權限在Linux是用戶所賦予的。

關於第一位最高位的解釋:

第一位表明是文件的類型,類型能夠是下面幾個中的一個:

  • d表明的是目錄(directroy)
  • -表明的是文件(regular file)
  • s表明的是套字文件(socket)
  • p表明的管道文件(pipe)或命名管道文件(named pipe)
  • l表明的是符號連接文件(symbolic link)
  • b表明的是該文件是面向塊的設備文件(block-oriented device file)
  • c表明的是該文件是面向字符的設備文件(charcter-oriented device file)

還有一個也是涉及到權限的,就是suid,sgid跟sticky。suid/sgid是爲了適應「沒有取得特權用戶要完成一項必需要有特權才能夠執行的任務」才產生的。

suid(set User ID,set UID)的意思是進程執行一個文件時一般保持進程擁有者的UID。然而,若是設置了可執行文件的suid位,進程就得到了該文件擁有者的UID。

sgid(set Group ID,set GID)意思也是同樣,只要把上面的進程擁有者改爲進程組就行了。

若是一個文件被設置了suid或sgid位,會分別表如今全部者或同組用戶的權限的可執行位上。

若是還設置了x位,則相應的位表示爲s(小寫)。可是,若是沒有設置x位,它將表示爲S(大寫)。以下例:

一、-rwsr-xr-x 表示suid和全部者權限中可執行位被設置

二、-rwSr--r-- 表示suid被設置,但全部者權限中可執行位沒有被設置

三、-rwxr-sr-x 表示sgid和同組用戶權限中可執行位被設置

四、-rw-r-Sr-- 表示sgid被設置,但同組用戶權限中可執行位沒有被社置。

再介紹第二種:

在UNIX的實現中,文件權限還能夠用十二個二進制位表示,具體方法是在這十二位的每一位上都置值。若是該位置上的值是1,表示有相應的權限,而0表示沒有此權限。

這十二位分別對應關係以下:
11 10 9 8 7 6 5 4 3 2 1 0
S G T r w x r w x r w x

第11位爲SUID位,第10位爲SGID位,第9位爲sticky位,第8-0位對應於上面的三組rwx位。
-rwsr-xr-x的值爲: 1 0 0 1 1 1 1 0 1 1 0 1
-rw-r-Sr--的值爲: 0 1 0 1 1 0 1 0 0 1 0 0

其實兩種方法都是互通的。

給文件加suid和sgid的命令以下(相似於上面chmod賦予通常權限的命令):
chmod u+s filename   設置suid位
chmod u-s filename    去掉suid設置
chmod g+s filename   設置sgid位
chmod g-s filename    去掉sgid設置

可是在許多環境中,suid 和 suid 很管用,可是不恰當地使用這些位可能使系統的安全遭到破壞。最好儘量地少用「suid」程序。passwd 命令是爲數很少的必須使用「suid」的命令之一。

如今介紹sticky:

通常來講,只要對一個目錄有寫訪問權,任何人均可以重命名或刪除該目錄中的文件。對於個別用戶使用的目錄,這種行爲是很合理的。可是,對於不少用戶 使用的目錄來講,尤爲是 /tmp 和 /var/tmp,這種行爲可能會產生麻煩。由於任何人均可以寫這些目錄,任何人均可以刪除或重命名任何其餘人的文件,即便是不屬於他們的!顯然,當任何 其餘用戶在任什麼時候候均可以輸入「rm -rf /tmp/*」並損壞每一個人的文件時,很難把 /tmp 用於任何有意義的文件。所幸,Linux 有叫作「粘滯位」(sticky bit)的東西。當給 /tmp 設置了粘滯位(用 chmod +t),惟一可以刪除或重命名 /tmp 中文件的是該目錄的全部者(一般是 root 用戶)、文件的全部者或 root 用戶。事實上,全部 Linux 分發包都缺省地啓用了 /tmp 的粘滯位,而您還能夠發現粘滯位在其它狀況下也很管用。

總結:

正如上面所說的,其實兩種方法能夠互通。對於第二種,咱們也能夠三位三位的轉化爲4個八進制數。最高的一位八進制數就是suid,sgdi,sticky的值一個反應。777就是他們都設爲了1.

語法爲:chmod abc file

其中a,b,c各爲一個數字,分別表示User、Group、及Other的權限。

r=4,w=2,x=1
若要rwx屬性則4+2+1=7;
若要rw-屬性則4+2=6;
若要r-x屬性則4+1=7。

範例:
chmod a=rwx file


chmod 777 file

效果相同
chmod ug=rwx,o=x file


chmod 771 file

效果相同

若用chmod 4755 filename可以使此程式具備root的權限
指令名稱 : chown
使用權限 : root

使用方式 : chmod [-cfhvR] [--help] [--version] user[:group] file...

說明 : Linux/Unix 是多人多工做業系統,全部的檔案皆有擁有者。利用 chown 能夠將檔案的擁有者加以改變。通常來講,這個指令只有是由系統管理者(root)所使用,通常使用者沒有權限能夠改變別人的檔案擁有者,也沒有權限能夠自 己的檔案擁有者改設爲別人。只有系統管理者(root)纔有這樣的權限。

把計 :

user : 新的檔案擁有者的使用者 IDgroup : 新的檔案擁有者的使用者羣體(group)-c : 若該檔案擁有者確實已經更改,才顯示其更改動做-f : 若該檔案擁有者沒法被更改也不要顯示錯誤訊息-h : 只對於連結(link)進行變動,而非該 link 真正指向的檔案-v : 顯示擁有者變動的詳細資料-R : 對目前目錄下的全部檔案與子目錄進行相同的擁有者變動(即以遞迴的方式逐個變動)--help : 顯示輔助說明--version : 顯示版本

範例 :
將檔案 file1.txt 的擁有者設爲 users 羣體的使用者 jessie :
chown jessie:users file1.txt

將目前目錄下的全部檔案與子目錄的擁有者皆設爲 users 羣體的使用者 lamport :
chmod -R lamport:users *
-rw------- (600) -- 只有屬主有讀寫權限。

-rw-r--r-- (644) -- 只有屬主有讀寫權限;而屬組用戶和其餘用戶只有讀權限。

-rwx------ (700) -- 只有屬主有讀、寫、執行權限。

-rwxr-xr-x (755) -- 屬主有讀、寫、執行權限;而屬組用戶和其餘用戶只有讀、執行權限。

-rwx--x--x (711) -- 屬主有讀、寫、執行權限;而屬組用戶和其餘用戶只有執行權限。

-rw-rw-rw- (666) -- 全部用戶都有文件讀、寫權限。這種作法不可取。

-rwxrwxrwx (777) -- 全部用戶都有讀、寫、執行權限。更不可取的作法。

如下是對目錄的兩個普通設定:


drwx------ (700) - 只有屬主可在目錄中讀、寫。

drwxr-xr-x (755) - 全部用戶可讀該目錄,但只有屬主才能改變目錄中的內容
suid的表明數字是4,好比4755的結果是-rwsr-xr-x sgid的表明數字是2,好比6755的結果是-rwsr-sr-x sticky位表明數字是1,好比7755的結果是-rwsr-sr-thttp://www.linuxso.com/command/chmod.html

相關文章
相關標籤/搜索