歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 靈活運用Linux中的文件/目錄訪問控制機制

靈活運用Linux中的文件/目錄訪問控制機制

日期:2017/2/28 15:53:35   编辑:Linux教程

  文件/目錄訪問控制是Linux操作系統安全的重要組成部分。傳統的Linux操作系統支持用戶-用戶組-其它用戶的訪問控制機制,來限定系統用戶對文件/目錄的訪問權限,該機制已經廣泛為用戶所接受和應用。而在實際的使用過程中,用戶意識到在很多應用場景該機制並不能靈活、高效地滿足訪問控制需求,因而自Linux內核2.6版本開始便支持更為靈活的ACL(訪問控制列表)機制。本文將通過實例來詳細介紹這兩種機制的原理及使用。

  1、傳統的用戶-用戶組-其他用戶(UGO)訪問控制機制

  UGO(user,group,other)模式原理

  Linux系統中的每個文件和目錄都有訪問許可權限,通過其確定誰可以通過何種方式對文件和目錄進行訪問和操作。文件或目錄的訪問權限分為只讀,只寫和可執行三種。以文件為例,只讀權限表示只允許讀其內容,而禁止對其做任何的更改操作;只寫權限允許對文件進行任何的修改操作;可執行權限表示允許將該文件作為一個程序執行。文件被創建時,文件所有者自動擁有對該文件的讀、寫和可執行權限,以便於對文件的閱讀和修改。用戶也可根據需要把訪問權限設置為需要的任何組合。

  有三種不同類型的用戶可對文件或目錄進行訪問:文件所有者,同組用戶、其他用戶。所有者一般是文件的創建者。它可以允許同組用戶有權訪問文件,還可以將文件的訪問權限賦予系統中的其他用戶。在這種情況下,系統中的每一位用戶都能訪問該用戶擁有的文件或目錄。

  每一個文件或目錄的訪問權限都有三組,每組用三位表示,分別為文件屬主的讀、寫和執行權限;與屬主同組的用戶的讀、寫和執行權限;系統中其他用戶的讀、寫和執行權限。當用ls -l命令顯示文件或目錄的詳細信息時,最左邊的一列為文件的訪問權限。例如:

  # ls -l
  總計 76
  -rw------- 1 root root 797 11-06 20:41 anaconda-ks.cfg
  drwxr-xr-x 2 root root 4096 11-06 13:50 Desktop
  -rw-r--r-- 1 root root 44843 11-06 20:40 install.log
  -rw-r--r-- 1 root root 7513 11-06 20:35 install.log.syslog

  橫線代表空許可(即表示不具有該權限)。r代表只讀,w代表寫,x代表可執行。注意:這裡共有10個位置。第1個字符指定了文件類型。在通常意義上,一個目錄也是一個文件。如果第1個字符是橫線,表示是一個非目錄的文件。如果是d,表示是一個目錄。後面的9個字符每三個構成一組,依次表示文件主、組用戶、其他用戶對該文件的訪問權限。

  確定了一個文件的訪問權限後,用戶可以利用Linux系統提供的chmod命令來重新設定不同的訪問權限。也可以利用chown命令來更改某個文件或目錄的所有者。

  2、擴展的訪問控制列表(ACL)方式

  為什麼要采用ACL

  UGO訪問控制機制在很多情況下難以滿足實際文件/目錄訪問授權的需求,比如,要設定一個組中的部分用戶對特定的文件/目錄具有讀取和訪問權限(rw-),而另外一部分用戶只能具備讀權限(r--);這在傳統的Linux訪問控制中無法通過單純地建立新的組和用戶來實現。因此,為了解決這些問題,人們提出了一種新的訪問控制方法,也就是訪問控制列表(ACL,Access Control List)。


  ACL是一個POSIX(可移植操作系統接口,Portable Operating System Interface)標准。目前,支持ACL需要內核和文件系統的支持。現在2.6內核配合EXT2/EXT3, JFS, XFS, ReiserFS等文件系統都是可以支持ACL的。在目前主流的發行套件,如Red Hat Enterprise Linux (RHEL)5、RHEL 6、Fedora 16等等,都已經支持ACL。

  ACL的類型及權限位

  ACL 是由一系列的Access Entry所組成的。每一條Access Entry定義了特定的類別可以對文件擁有的操作權限。Access Entry主要包括6個,可分為兩大類:一類包括owner、owning group和other,對應傳統UGO機制中的user、group和other;一類則包括named user、named group和mask。這六類的主要說明如下:

  user:相當於Linux裡文件所有者的permission
  named user:定義了額外的用戶可以對此文件擁有的permission
  group:相當於Linux裡group的permission
  named group:定義了額外的組可以對此文件擁有的permission
  mask:定義了named user, named group和group的最大權限
  other:相當於Linux裡other的permission

  舉個簡單的例子,對於如下的ACL Entry的定義:

  # file: example.xml
  # owner: liyang
  # group: operation
  user::rwx
  user:shengping:rw-
  group::rw-
  group:dev:r-x
  mask::rwx
  other::r—

  其中,前面三個以#開頭的定義了文件名、文件的所有者和所有者所在的組。後面緊跟著的六行則說明了如下的問題:

  user::rwx說明文件所有者擁有讀寫和執行權限
  user:shengping:rw-定義了用戶shengping擁有對文件的讀寫權限
  group::rw-說明文件的group擁有讀寫權限
  group:dev:r-x 定義dev組擁有對文件的讀和執行權限
  mask::rwx 定義了mask的權限為讀
  other::r-- 定義了other用戶的權限為讀

  值得特別注意的是:mask的rwx權限定義,決定了user:shengping,group和group:dev對文件的最大權限分別是rw、rw和rx。這也是mask這個ACL Entry的用途所在,可以用它來批量控制權限。當然,在實際的使用過程中,並不需要用戶對該Entry直接進行操作,而只需要使用相應的setfacl命令即可,系統將會根據該命令的執行來自動生成上述Entry項,這其中就包含了mask這個Entry項。

Copyright © Linux教程網 All Rights Reserved