ACL(access Control List)權限的目的是在提供傳統的owner、group、others的read、write、execute權限之外的局部權限設定。ACL可以針對單個用戶,單個文件或目錄進行r、w、x的權限設定。特別適用于需要特殊權限的使用。
1)查看分區的ACL權限是否開啟
查看指定分區詳細文件系統信息的命令為:
dumpe2fs –h 指定分區
其中,-h選項表示只顯示超級塊中的信息,而不顯示磁盤塊組的詳細信息。
例:查看根分區是否開啟ACL權限:
[root@localhost ~]# dump2fs -h /dev/sda5……Default mount options: user_xattr acl
可以看到,sda5分區的ACL權限默認開啟。
2)臨時開啟分區ACL權限
如果分區的ACL權限尚未開啟,可以采用重新掛載根分區,同時加入ACL權限,其命令如下所示:
mount –o remount,acl /
3)永久開啟分區ACL權限
可以通過修改/etc/fstab配置文件來永久開啟ACL權限。具體方法如下:
[root@localhost ~]# vim /etc/fstab#然后將UUID=9288c490-0161-471c-b63a-6e56699065d5 / ext4 defaults 1 1中的defaults后加上",acl",即:UUID=9288c490-0161-471c-b63a-6e56699065d5 / ext4 defaults,acl 1 1(2)查看和設定ACL權限
1)設定ACL權限,其命令格式為:
setfacl [選項] 文件名
其中,選項-m表示修改ACL權限,-x表示刪除指定ACL權限,-b表示刪除所有的ACL權限,-d表示設定默認ACL權限,-k表示刪除默認ACL權限,-R表示遞歸設定ACL權限。
2)查看ACL命令,其命令格式為:
getfacl 文件名
3)給用戶設定ACL權限。
例:新建一個目錄PRoject,用戶名和所屬組分別為root,tgrp。新建一個用戶ws,現在想要對project目錄具有r、x權限,且其所屬組和所屬用戶均為默認創建的ws??梢酝ㄟ^如下方法對ws用戶設定ACL權限:
[root@localhost tmp]# mkdir project[root@localhost tmp]# groupadd tgrp[root@localhost tmp]# chown root:tgrp project/[root@localhost tmp]# chmod 770 project/[root@localhost tmp]# useradd ws[root@localhost tmp]# passwd更改用戶 root 的密碼 。新的 密碼:無效的密碼: WAY 過短無效的密碼: 過于簡單重新輸入新的 密碼:passwd: 所有的身份驗證令牌已經成功更新。[root@localhost tmp]# setfacl -m u:ws:rx project/
注意給用戶ws賦予r-x權限,使用“u:用戶名:權限”格式。
使用getfacl命令查看ACL權限:
[root@localhost tmp]# getfacl project/# file: project/# owner: root# group: tgrpuser::rwxuser:ws:r-xgroup::rwxmask::rwxother::---
隨后使用ws用戶登錄,嘗試在project目錄下新建文件,則會出現如下錯誤:
[root@localhost tmp]# su - ws[ws@localhost ~]$ cd /tmp/project/[ws@localhost project]$ touch filetouch: 無法創建"file": 權限不夠
4)給用戶組設定ACL權限
為組分配ACL權限時,使用“g:組名:權限”格式。
例:新建tgrp2組,并為該組分配ACL權限r、w、x。
[root@localhost tmp]# groupadd tgrp2[root@localhost tmp]# setfacl -m g:tgrp2:rwx project/[root@localhost tmp]# getfacl project/ #使用getfacl查看project目錄的ACL權限:# file: project/# owner: root# group: tgrpuser::rwxuser:ws:r-xgroup::rwxgroup:tgrp2:rwxmask::rwxother::---(3)最大有效權限與刪除ACL權限
1)觀察getfacl命令查詢ACL權限后的結果可以看到有mask字段。mask是用來指定最大有效權限的,如果給用戶賦予了ACL權限,是需要和mask的權限“相與”才能得到用戶的真正權限。因此可以修改最大有效權限,其命令格式為:
setfacl –m m:權限 文件名
注意,設定mask權限時,使用“m:權限”格式。
例:將mask的權限修改為r-x,然后修改ws的ACL權限為rwx,然后查詢ACL權限:
[root@localhost tmp]# setfacl -m m:rx project/[root@localhost tmp]# getfacl project/# file: project/# owner: root# group: tgrp1user::rwxuser:ws:rwx #effective:r-xgroup::rwx #effective:r-xmask::r-xother::---
2)刪除ACL權限
刪除指定用戶的ACL權限,其命令格式為:
setfacl –x u:用戶名 文件名
刪除指定用戶組的ACL權限,其命令格式為:
setfacl –x g:組名 文件名
刪除文件所有的ACL權限,其命令格式為:
setfacl –b 文件名
(4)遞歸ACL權限與默認ACL權限1)遞歸ACL權限是父目錄在設定ACL權限時,所有的子文件和子目錄也會擁有相同的ACL權限,其命令格式為:
setfacl –m u:用戶名:權限 –R 文件名
2)默認ACL權限的作用是:如果給父目錄設定了默認ACL權限,那么父目錄中所有新建的子文件都會繼承父目錄的權限,其命令格式為:
setfacl –m d:u:用戶名:權限 文件名
2 文件特殊權限(1)SetUID1)SetUID需要注意的地方有:只有可以執行的二進制程序才能設定SUID權限;命令執行者(一般為普通用戶)要對該程序擁有x(執行)權限;命令執行者在執行該程序時獲得該程序文件屬主的身份;SetUID權限只在該程序執行過程中有效,也就是說身份改變只在程序過程中有效。
例:passwd命令擁有SetUID權限,所以普通用戶可以修改自己的密碼。
[root@localhost tmp]# ll /usr/bin/passwd-rwsr-xr-x. 1 root root 25980 2月 22 2012 /usr/bin/passwd
其中的s表示具有SUID權限。
cat命令沒有SetUID權限,所以普通用戶不能查看/etc/shadow文件內容。如使用ws登陸。
[ws@localhost ~]$ ll /bin/cat-rwxr-xr-x. 1 root root 47976 11月 22 2013 /bin/cat[ws@localhost ~]$ cat /etc/shadowcat: /etc/shadow: 權限不夠
2)設定SetUID的方法,其命令格式為:
chmod 4755 文件名 或 chmod u+s 文件名
其中數字4代表SUID。
例:新建文件file,然后將其權限設定為SUID:
[root@localhost ~]# touch file[root@localhost ~]# chmod 644 file[root@localhost ~]# chmod u+s file[root@localhost ~]# ls -l file-rwSr--r--. 1 root root 0 1月 28 23:01 file
其中的大寫字母S表示該命令無法正確執行。
3)取消SetUID的方法,其命令格式為:
chmod 755 文件名 或 chmod u-s 文件名
4)SetUID的設定是很危險的,需要注意:關鍵目錄應嚴格控制寫權限,如”/“,”/usr“等;用戶的密碼設置要嚴格遵守密碼的三原則;對系統中默認的應該具有SetUID權限的文件做一列表,定時檢查有沒有除此之外的文件被設置了SetUID權限。
(2)SetGID1)SetGID可作用于文件和目錄。針對文件的作用是:只有可執行的二進制程序才能設置SGID權限;命令執行者要對該程序擁有x(執行)權限;命令執行者在執行程序時,組身份升級為該程序文件的屬組;SetGID權限同樣只在該程序執行過程中有效,也就是說,組身份改變只是在程序執行過程中有效。
例:locate具有SGID權限:
[ws@localhost ~]$ ll /usr/bin/locate-rwx--s--x. 1 root slocate 35548 10月 10 2012 /usr/bin/locate[root@localhost ~]# ll /var/lib/mlocate/mlocate.db-rw-r-----. 1 root slocate 1531226 1月 28 19:40 /var/lib/mlocate/mlocate.db
其主要過程是:/usr/bin/locate是可執行的二進制程序,可以賦予SGID,執行用戶ws對/usr/bin/locate命令具有執行權限。執行/usr/bin/locate命令時,組身份會升級為slocate組,而slocate組對/var/lib/mlocate/mlocate.db數據庫擁有r權限,所以普通用戶ws可以使用locate命令查詢mlocate.db數據庫。命令結束,ws用戶的組身份返回ws組。
針對目錄的作用是:普通用戶必須對此目錄擁有r和x權限,才能進入此目錄;普通用戶在此目錄中的有效組會變成此目錄的屬組;若普通用戶對此目錄擁有w權限時,新建文件的默認屬組是這個目錄的屬組。
2)設定SetGID,其命令格式為:
chmod 2755 文件名 或 chmod g+s 文件名
其中2代表SGID。
例:在/tmp目錄下新建test目錄,然后對其設置SGID權限。然后以ws用戶登錄系統,并在test目錄下新建文件test1,然后查看test1的權限:
[root@localhost tmp]# mkdir test[root@localhost tmp]# chmod 2757 test/[root@localhost tmp]# ll -d test/drwxr-srwx. 2 root root 4096 1月 29 02:43 test/[root@localhost tmp]# su - ws[ws@localhost ~]$ cd /tmp/test/[ws@localhost test]$ touch test1[ws@localhost test]$ ll test1-rw-rw-r--. 1 ws root 0 1月 29 02:44 test1
可以看到,ws用戶創建的test的屬組變為了test目錄下的數組root了。
3)取消SetGID,其命令格式為:
chmod 755 文件名 或 chmod g-s 文件名
(3)stick BIT1)SBIT粘著位目前只對目錄有效:普通用戶對該目錄擁有w和x權限,即普通用戶可以在此目錄擁有寫入權限;如果沒有粘著位,因為普通用戶擁有w權限,所以可以刪除此目錄下的所有文件,包括其他用戶創建的文件。一旦賦予了粘著位,除了root可以刪除所有文件,普通用戶就算擁有w權限,也只能刪除自己創建的文件,不能刪除其他用戶創建的文件。
例:將/tmp設定粘著位,使用ws用戶登錄,然后嘗試刪除其中的文件:
[root@localhost tmp]# chmod 1777 test/[root@localhost tmp]# ll -d test/drwxrwsrwt. 2 root root 4096 1月 29 02:56 test/[root@localhost tmp]# touch /tmp/test/file1[root@localhost tmp]# su - ws[ws@localhost ~]$ cd /tmp/test/[ws@localhost test]$ lsfile1 test1[ws@localhost test]$ rm -f file1rm: 無法刪除"file1": 不允許的操作
2)設置和取消粘著位
設置粘著位的命令格式為:chmod 1777 目錄名 或 chmod o+t 目錄名;
取消粘著位的命令格式為:chmod 777 目錄名 或 chmod o-t 目錄名
注:每一種特殊權限針對的操作對象不同,因此一般不會賦予文件或目錄7777權限的。
3 文件系統屬性chattr權限1)命令格式:
chattr [+-=] [選項] 文件或目錄名
其中,“+”表示增加權限,“-”表示刪除權限,“=”表示等于某權限。
選項i的含義是:如果對文件設置i屬性,那么不允許對文件進行刪除、改名,也不能添加和修改數據;如果對目錄設置i屬性,那么只能修改目錄下文件的數據,但不允許建立和刪除文件(此限制也適用于root)。
選項a的含義是:如果對文件設置a屬性,那么只能在文件中增加數據,但不能刪除,也不能修改數據;如果對目錄設置a屬性,那么只允許在目錄中建立和修改文件,但是不允許刪除。
2)查看文件系統屬性,其命令格式為:
lsattr [選項] 文件名
其中,-a選項表示顯示所有文件和目錄,-d選項表示目標是目錄,僅列出目錄本身的屬性,而不是子文件的。
4 系統命令sudo權限1)sudo權限:root把本來只能超級用戶執行的命令賦予普通用戶執行,sudo的操作對象是系統命令。
2)sudo的使用
visudo命令實際修改的是/etc/sudoers文件。其中:
root ALL=(ALL) ALL
其中,root表示用戶名,等號左邊的ALL表示被管理主機的地址,等號右邊括號的ALL表示可使用的身份,最后一個ALL表示授權命令(絕對路徑)。
%wheel ALL=(ALL) ALL
其中wheel是組名,第一個ALL是被管理主機的地址,第二個ALL表示可使用的身份,第三個ALL表示授權命令(絕對路徑)。
3)授權ws用戶可以重啟服務器
方法為:visudo,然后添加:ws ALL=/sbin/shutdown –r now,注意命令寫的越細致,表示賦予ws用戶的權限越小。
4)普通用戶執行sudo賦予的命令,注意普通用戶不能直接執行shutdown –r now,而應該是:sudo /sbin/shutdown –r now
如果普通用戶想要查看sudo賦予的命令,可以執行sudo –l命令。
新聞熱點
疑難解答