歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

ea/acl訪問控制系統介紹

摘要   在眾多的Linux訪問控制系統中,Andreas Gruenbacher的Linux ACL工程(http://acl.bestbits.at/)是比較有影響力的一個,也是最容易使用的一個。它依賴於文件系統的擴展屬性(Extended Attribute)。  簡介      作為一種自由的操作系統,Linux的發展極為迅速,也出現了很多改進傳統UNIX系統缺點的工程。這些工程通過不同的方式幫助系統管理員提高系統的安全性,例如:進程的能力,更細粒度的權限等。在上期我們介紹了Linux的能力特性,本文將介紹Linux的ACL系統。      傳統UNIX系統的訪問控制方法是非常簡單的,它把用戶分成三類:文件的擁有者、組成員和其他用戶。很顯然,這種訪問控制模型過於簡陋了。隨著對Linux系統安全性要求的提高,需要一種更細粒度的訪問控制模型來代替傳統UNIX系統的訪問控制模型。使用ACL(Access Control List,訪問控制列表)系統,系統管理員能夠為每個用戶(包括root用戶在內)對文件和目錄的訪問提供更好的訪問控制。在POSIX中定義了一種訪問控制叫做POSIX ACL,可以實現基於單獨用戶的控制,目前的大多數Linux訪問控制工程都是以此為基礎。      在眾多的工程中,Andreas Gruenbacher的Linux ACL工程(http://acl.bestbits.at/)是比較有影響力的一個。它依賴於文件系統的擴展屬性(Extended Attribute)。當前,Linux能夠在ext2/ext3和SGI的XFS文件系統中支持POSIX ACL。其它類型的文件系統,例如:ReiserFS文件系統也很快會支持ACL。在網絡文件系統中,Linux能夠通過Samba共享支持ACL,不過目前的NFS還不能支持ACL。需要指出的是,目前使用磁盤限額的ext3文件系統對ACL的支持不是很好。    1.安裝EA/ACL系統    1.1.下載ACL/EA內核補丁以及相關工具      安裝ACL/EA系統,首先需要下載相關的內核補丁、工具以及輔助庫。所有所需的軟件包都可以從http://acl.bestbits.at/download.Html下載。      本文將討論如何在RedHat7.3(內核使用編寫本文時的最新版本2.4.19,在本文完成時linux-2.4.20剛剛發布,不過相關的ea/acl的補丁還不太穩定)中安裝ACL系統。需要指出的是,最新版的RedHat 8中已經廣泛使用了ea/acl。為了系統維護的方便,建議除了內核補丁使用源代碼包之外,其余軟件都是用RPM包進行安裝。整個安裝過程需要用到以下的軟件包:     acl-2.0.18-0.src.rpm   attr-2.0.10-0.src.rpm   e2fsprogs-1.27ea-26.4.src.rpm   star-1.5a03-2.src.rpm   fileutils-4.1.18acl65.5.src.rpm   linux-2.4.19-xattr-0.8.50.diff.gz   linux-2.4.19-acl-0.8.50.diff.gz    1.2.安裝內核      在下在了所需的軟件之後,就可以進入實際的安裝了。我們首先需要一個支持ACL的內核,以下是具體的操作步驟:    1)進入內核源代碼所在的目錄,使用EA/ACL補丁升級內核源代碼:    $ cd linux-2.4.19  $ zcat ../linux-2.4.19-xttr-0.8.50.diff.gz patch -p1  $ zcat ../linux-2.4.19-acl-0.8.50.diff.gz patch -p1    2)執行如下命令進入內核選項配置界面    # make xconfig    3)選擇File systems進入文件系統的配置界面(如下圖)    點擊查看大圖   4)打開POSIX Access Control List選項,然後根據需要打開ext2/ext3文件系統的支持選項(如下圖)。    點擊查看大圖    點擊查看大圖   5)完成配置之後,執行如下命令編譯支持ACL的內核:  [[The No.4 Picture.]]   #make dep  #make bzImage  #make modules  #make modules_install  #cp arch/i386/boot/bzImage /boot/ACLKernel    6)最後使用自己喜歡的編輯器編輯/boot/grub/menu.lst文件,使我們剛才編譯的內核能夠啟動。    1.3.安裝輔助工具    完成內核的安裝之後,我們還需要安裝用戶空間的工具和庫以便對ACL進行日常維護。    1)安裝attr庫    # rpm --rebuild attr-2.0.10-0.src.rpm  # rpm -ihv /usr/src/redhat/RPMS/i386/attr-2.0.10-0.i386.rpm  # rpm -ihv /usr/src/redhat/RPMS/i386/attr-devel-2.0.10-0.i386.rpm  # rpm -ihv /usr/src/redhat/RPMS/i386/libattr-2.0.10-0.i386.rpm    2)安裝acl庫    # rpm --rebuild acl-2.0.18-0.src.rpm  # rpm -ihv /usr/src/redhat/RPMS/i386/acl-2.0.18-0.i386.rpm  # rpm -ihv /usr/src/redhat/RPMS/i386/acl-devel-2.0.18-0.i386.rpm  # rpm -ihv /usr/src/redhat/RPMS/i386/libacl-2.0.18-0.i386.rpm    3)安裝支持ACL的fileutils軟件包。它比原始的fileutils軟件包增加了維護ACL的工具。    # rpm --rebuild fileutils-4.1.18acl65.5.src.rpm  # rpm -Uhv /usr/src/redhat/RPMS/i386/fileutils-4.1.8acl-65.5.i386.rpm    4)安裝支持文件系統的擴展屬性(Extended Attribute)的e2fsprogs軟件包。    # rpm --rebuild e2fsprogs-1.27ea-26.4.src.rpm  # rpm -Uhv /usr/src/redhat/RPMS/i386/e2fsprogs-1.27ea-26.4.i386.rpm    5)安裝star。Star是一個類似於tar,支持ACL的快速歸檔工具。    # rpm --rebuild star-1.5a03-2.src.rpm  # rpm -Uhv /usr/src/redhat/RPMS/i386/    1.4.安裝完成之後的設置      如果使用0.8.50版本的EA/ACL內核補丁,內核重新啟動之後不會自動打開ACL功能,我們需要使用acl或者user_xattr選項mount文件系統才能使ACL生效。例如,筆者系統的/home目錄位於/dev/hda7分區,我可以使用如下命令使/home分區支持訪問控制列表:    # mount -o remount,acl /dev/hda7      為了方便使用(畢竟每次重新啟動系統都是用手工打開ACL是很麻煩的),可以直接修改/etc/fstab文件,還是以筆者的系統為例,下面/etc/fstab文件的節選:    LABEL=/ / ext2 defaults 1 1  LABEL=/boot /boot ext2 defaults    1 2  LABEL=/home /home ext3 defaults    1 2  LABEL=/usr /usr ext3 defaults    1 2      如果需要使這幾個分區支持文件系統的擴展屬性和訪問控制列表,只要在選項欄加入acl選項,然後執行#mount -remount -a命令即可:    LABEL=/ / ext2 defaults,acl   1 1  LABEL=/boot /boot ext2 defaults,acl    1 2  LABEL=/home /home ext3 defaults,acl    1 2    LABEL=/usr /usr ext3 defaults,acl    1 2    2.Linux EA/ACL的語法      安裝了ACL系統之後,系統中的每個對象(文件和目錄)都有一個ACL項目控制對這個目標的訪問。每個目錄之內所有對象的初始訪問控制由目錄的默認ACL項目決定。      每個ACL項目由一系列ACL規則組成,這些規則設置單獨用戶或者一組用戶對目標的訪問權限,包括:讀、寫和搜索/執行。每個ACL條目被冒號分為三個部分:規則標簽類型(tag type)、規則限制符(qualifier)和訪問權限(access permission)。規則標簽類型包括以下關鍵詞:    user--以user關鍵詞開頭的ACL規則設置對象擁有者或者其他用戶對對象的訪問權限。例如:   user::rw- 表示對象擁有者的訪問權限;  user:nixe0n:r-- 表示用戶nixe0n擁有讀對象的權限。    group--設定某個用戶組對對象的訪問權限。例如:   group::rw- 表示用戶所在用戶組擁有讀寫權限;  group:linuxaid:r-- 表示屬於linuxaid組的用戶擁有讀權限。    mask--以mask關鍵詞開頭的ACL規則用來限制賦予用戶的最大訪問權限,對象擁有者除外。例如:   user::rw-   user:nixe0n:rw-   #有效的是user:nixe0n:r--  group::rw-      #有效的是group:r--  group:linuxaid::rw- #有效的是group:linuxaid:r--  mask::r--  other::r--    other--指定其他用戶對對象的訪問權限。        每條ACL規則的第二部分是包含用戶或者用戶組識別符。用戶識別符可以是用戶名或者十進制的用戶ID號;用戶組識別符可以是用戶組名或者十進制的用戶組ID號。空白表示對象的擁有者或者擁有者所在的用戶組。      第三部分是對對象的訪問權限。讀、寫和搜索(目錄)/執行(文件)分別由x、w和x代表,和通常使用的權限表示方法完全相同。對應的權限被-代替表示不具有此權限。      除了以上的關鍵詞之外,還有一個只用於目錄的關鍵詞default。由default關鍵詞修飾的ACL條目表示目錄下所有子目錄和文件的默認訪問控制列表。      為了方便,還有一種簡化的ACL規則表示方式。user可以用u代替;g表示group;m表示mask;o表示other。簡化方式的訪問控制列表,條目之間使用逗號分割。這種表示方式為命令行設置訪問控制列表提供了很大的便利。例如:    $setfacl -m u::rw-,u:floatboat:rw-,g::r--,g:nixe0n:rw-,m::r--,o::r-- foo.txt    3.訪問控制列表的維護      ACL生效之後,在使用ls -l命令羅列文件時,你會看到具有訪問控制規則的目錄或者文件的權限域會有一個加號(+)。例如,在打開ACL功能之前的文件如下所示:    [nixe0n@nixe0n nixe0n]$ ls -l  -rw-rw-r--  1 nixe0n  nixe0n   11331 09-12 20:02 exam.txt      使ACL功能生效之後,ls -l命令得到如下結果:     [nixe0n@nixe0n nixe0n]$ ls -l  -rw-rw-r--+  1 nixe0n  nixe0n   11331 09-12 20:02 exam.txt    3.1.setfacl      setfacl工具設置文件和目錄的訪問控制列表,支持對ACL規則的設置(-s/-S)、修改(-m/-M)和刪除(-x/-X)。我們可以使用自己喜歡的編輯器按照ACL語法事先編寫好某個對象的訪問控制列表,然後使用大寫的命令行選項進行設置或者修改操作;我們也可以使用小寫命令行選項直接修改對象的訪問控制規則,例如:    [nixe0n@nixe0n nixe0n]$ setfacl -m -m u::rw-,u:floatboat:rw-,g::r--, - exam.txt    3.2.getfacl      ls命令能夠獲得某個對象的訪問權限,與之類似,getfacl命令可以獲得文件和目錄的訪問控制列表規則,其輸出格式如下所示:    [nixe0n@nixe0n nixe0n]$ getfacl doc  # file: doc/  # owner: nixe0n  # group: linuxaid  user::rwx  user:floatboat:rwx          group::rwx              group:cool:r-x  mask:r-x  other:r-x  default:user::rwx  default:user:flatboat:rwx      default:group::r-x  default:mask:r-x  default:other:---    總結      以上,我們討論了EA/ACL訪問控制系統的安裝和使用。相對於其它類似的系統,如:lids、grsecurity等,EA/ACL非常容易使用,和Linux內核的結合也好的多。而且,ea/acl已經合並到了2.5內核中。合理地利用訪問控制列表對提高系統的安全性很有幫助。




 



Copyright © Linux教程網 All Rights Reserved