linux檔案許可權chmod

來源:互聯網
上載者:User

linux的檔案許可權通過使用者,組和其它組來實現。一個檔案只能屬於一個使用者和組, 如果其它的使用者想有這個檔案的許可權,則可以將該使用者加入這個組,一個使用者可以同時屬於多個組。一般來說一個應用下不要有太多的檔案組和使用者,最好不要用ROOT執行角本,這樣許可權都放放大,比較不安全

 

Linux下很重視許可權,許可權包括讀,寫,執行。所以即使Linux下染了病毒,也不一定中病毒,其實就是這個許可權的問題。初學者在Linux執行命令是會感覺比較累,每次都是要用su來切換使用者,其實這也是Linux保護資料的一種模式。當然建議,使用者登入是不要直接用root使用者登入。如果知道root登入命令的話。

Linux下有使用者跟群組的觀念。往往分為三個部分,持該檔案的使用者(user),跟持該檔案同組的使用者(group),剩下的其他使用者(other)。一個使用者可以屬於很多個群組。Linux下表示許可權有兩種方式:

一種是八進位標記法(十位標記法,不是說八進位有十位,而是三個八進位位,再加一個最高位共十位),

另外一種十二位二進位標記法(十二個二進位位)。

先介紹第一種:

是三種模式,三個屬組,就構成了9位。-代表無許可權,r代表唯讀,w代表寫的許可權,x則代表執行。所以就有下面的組合。將-視為0,x視為1,w視為2,r視為4.這種組合根據該位是否有這個數來確定,就確定如下的9種組合方式。剛好,總的權值0-7對應於八進位的全部。所以也可以說許可權是可以用八進位來表示的。最高的許可權就是7,代表可讀,可寫,可執行。3就是代表只有寫跟執行的許可權。其他數字類推。

 

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

每個八位元其實可以轉化為三位的位元,

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

這個關係在第二種表示方法中是有用的。由於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(大寫)。如下例:

1、-rwsr-xr-x 表示suid和所有者許可權中可執行位被設定

2、-rwSr--r-- 表示suid被設定,但所有者許可權中可執行位沒有被設定

3、-rwxr-sr-x 表示sgid和同組使用者權限中可執行位被設定

4、-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.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.