引言html
前面的內容中,咱們講到傳統的權限僅有三種身份(owner,group,others)搭配三種權限(r,w,x)以及三種特殊的權限(SUID,SGID,SBIT),隨着應用的發展,這些權限組合已不能適應如今複雜的文件系統權限控制要求。linux
例如,目錄data的權限爲:drwxr-x—,全部者與所屬組均爲root,在不改變全部者和所屬組的前提下,要求用戶yufei對該目錄有徹底訪問權限(rwx),但又不能讓其餘有用徹底權限(rwx)。這個要求看似不能實現,這就看出來傳統的權限管理設置有時候也會力不從心。爲了解決這樣的問題,Linux開發出了一套新的文件系統權限管理方法,叫文件訪問控制列表ACL(Access Control Lists)。這時候,咱們就可能經過ACL來實現。windows
什麼是ACL安全
ACL是Access Control List的縮寫,主要的目的是在提供傳統的owner,group,others的read,write,execute權限以外的局部權限設定。ACL能夠針對單個用戶,單個文件或目錄來進行r,w,x的權限設定,特別適用於須要特殊權限的使用狀況。ide
ACL主要針對用戶(user)、用戶組(group)、以及掩碼(mask)方面來控制權限。ui
簡單地來講,ACL就是能夠設置特定用戶或用戶組對於一個文件/目錄的操做權限。操作系統
而在windows系統上,沒有這個ACL,ACL是類Unix(Unix-like)操做系統權限的額外支持項目,所以要使用ACL必需要有文件系統的支持才行。主要包括ReiserFS, EXT2/EXT3/ext4, JFS, XFS等文件系統。翻譯
查看系統是否支持ACL日誌
要查看你的系統是否是支持ACL,咱們能夠經過下面的方法來查看。code
[root@yufei ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 15118728 2442140 11908588 18% /
[root@yufei ~]# dumpe2fs /dev/sda1 |grep acl
dumpe2fs 1.41.12 (17-May-2010)+`-
Default mount options: user_xattr acl
咱們看到,默認的掛載選項就已經有了ACL了,若是你的系統掛載時候沒有這個選項,你能夠經過
mount -o remount,acl /dev/sda1
來從新掛載。你也能夠把這個掛載選項加入到開機啓動,也就是寫入到/etc/fatab文件裏面。
ACL權限的查看與設置(getfacl, setfacl)
知道了ACL的意義了,也知道了系統是否支持ACL,那麼下面就是如何來設定/使用這個ACL呢?
getfacl:查看文件/目錄的ACL設定內容
setfacl:設置文件/目錄的ACL內容
相關參數說明
先來看看setfacl這個命令的相關參數說明
語法:setfacl [-bkRd] [{-m|-x} acl參數] 文件名
-m :設置後續的acl參數
-x :刪除後續的acl參數
-b :刪除全部的ACL設定參數
-R :遞歸設置acl參數
-d :設置預設的acl參數(只對目錄有效,在該目錄新建的文件也會使用此ACL默認值)
-k :刪除預設的ACL參數
設置格式以下
[d[efault]:] u[ser]:uid [:perms]
[d[efault]:] g[roup]:gid [:perms]
[d[efault]:] m[ask][:] [:perms]
[d[efault]:] o[ther][:] [:perms]
以上的參數和設置格式說明,能夠在MAN中查看到
針對其餘人的ACL設置
下面咱們就用例子來演示一下ACL的設置與查看
咱們在/root目錄下進行操做
先查看install.log文件的ACL設置值是什麼
[root@yufei ~]# getfacl install.log
# file: install.log
# owner: root
# group: yufei
user::rwx
group::r–
other::r–
[root@yufei ~]# ls -l install.log
-rwxr–r–. 1 root yufei 31537 Jan 20 05:09 install.log
我想經過上面的對比,你們應該能看明白getfacl所顯示出來的內容吧!OK,這裏我就很少說了,下面咱們來看看給這個文件設置ACL值後的效果。
[root@yufei ~]# setfacl -m o:rwx install.log
[root@yufei ~]# getfacl install.log
# file: install.log
# owner: root
# group: yufei
user::rwx
group::r–
other::rwx
[root@yufei ~]# ls -l install.log
-rwxr–rwx. 1 root yufei 31537 Jan 20 05:09 install.log
這時候,我對other賦予了rwx權限了,咱們切換到其餘用戶,就能夠對此文件進行寫操做了。你們可能也發現了,經過setfacl設置的other權限,和經過chmod設置的效果是同樣的。沒錯,是這樣的。
針對用戶的ACL設置
把install.log拷貝到根目錄,
[root@yufei ~]# cp install.log /
[root@yufei ~]# ls -l /install.log
-rwxr-xr– 1 root root 31537 Feb 9 16:27 /install.log
咱們經過ACL給yufei用戶賦予rwx權限
[root@yufei ~]# setfacl -m u:yufei:rwx /install.log
[root@yufei ~]# getfacl /install.log
getfacl: Removing leading ‘/’ from absolute path names
# file: install.log
# owner: root
# group: root
user::rwx
user:yufei:rwx
group::r-x
mask::rwx
other::r–
[root@yufei ~]# ls -l /install.log
-rwxrwxr–+ 1 root root 31537 Feb 9 16:27 /install.log
這時候,經過ls -l查看的文件權限後面多了一個「+」號,這就表示了文件存在ACL權限。咱們切換到yufei用戶,來對此文件進行一下編輯操做是徹底沒有問題,這裏面就不演示了,本身動手吧。
注:
一、上面的用戶能夠換成用戶列表,中間用英文的「,」分隔就OK了。
二、針對用戶組的ACL設置與用戶的設置差很少,這裏就不演示了。
刪除ACL的設置
要是刪除咱們設置的ACL權限的話,要怎麼作呢?有兩種方法
一、用-x刪除後面接着的ACL權限
[root@yufei ~]# setfacl -x u:yufei /install.log
[root@yufei ~]# getfacl /install.log
getfacl: Removing leading ‘/’ from absolute path names
# file: install.log
# owner: root
# group: root
user::rwx
group::r-x
mask::r-x
other::r–
這時候發現還有個mask的權限沒有去掉,
[root@yufei ~]# setfacl -x m:: /install.log
[root@yufei ~]# getfacl /install.log
getfacl: Removing leading ‘/’ from absolute path names
# file: install.log
# owner: root
# group: root
user::rwx
group::r-x
other::r–
通過了上面的操做纔算把權限還原了,實在有點不方便,並且在使用-x的時候,不能單獨刪除某個權限。不然會出現錯誤提示。如setfacl -x u:yufei:rwx /install.log,這們的命令是不能夠的,不知道是我哪裏用錯了,仍是這個命令就是這樣。仍是用下面這種方法來提直接。
二、用-b刪除全部的ACL權限
[root@yufei ~]# setfacl -m u:yufei:rwx /install.log
[root@yufei ~]# getfacl /install.log
getfacl: Removing leading ‘/’ from absolute path names
# file: install.log
# owner: root
# group: root
user::rwx
user:yufei:rwx
group::r-x
mask::rwx
other::r–
[root@yufei ~]# setfacl -b /install.log
[root@yufei ~]# getfacl /install.log
getfacl: Removing leading ‘/’ from absolute path names
# file: install.log
# owner: root
# group: root
user::rwx
group::r-x
other::r–
這個-b參數,一次性把全部的ACL權限所有清空,還原成文件的原來權限。我推薦你們用這個參數。
ACL的mask設置
關於group的設置與user的設置相似,這裏也就不作演示了,下面咱們來看看mask,他的做用就是讓用戶/組對某個文件只有某些權限。mask只對其餘用戶和組的權限有影響,而對owner和other的權限是沒有任何影響的。咱們仍是以/install.log爲例來實驗。
[root@yufei ~]# ls -l /install.log
-rwxr-xr– 1 root root 31537 Feb 9 17:03 /install.log
[root@yufei ~]# setfacl -m u:yufei:rwx /install.log
[root@yufei ~]# getfacl /install.log
getfacl: Removing leading ‘/’ from absolute path names
# file: install.log
# owner: root
# group: root
user::rwx
user:yufei:rwx
group::r-x
mask::rwx
other::r–
這時候咱們看到mask::rwx是所有的權限,因此,切換到yufei這個賬戶的時候,可能對/install.log文件進行寫操做的。下面咱們讓yufei用戶對其只有讀取的權限。
[root@yufei ~]# setfacl -m m::r /install.log
[root@yufei ~]# getfacl /install.log
getfacl: Removing leading ‘/’ from absolute path names
# file: install.log
# owner: root
# group: root
user::rwx
user:yufei:rwx #effective:r–
group::r-x #effective:r–
mask::r–
other::r–
咱們能夠看到,user:yufei:rwx的後面多了一個提示#effective:r–,也就是說,如今yufei用戶只擁有r權限了。切換到yufei用戶對/install.log文件進行一下寫操做,會有「–INSERT —W10: Warning: Changing a readonly file 」這樣的提示。
1.ACL 權限簡介 與 開啓
2.查看分區ACL權限是否開啓
命令:dumpe2fs -h /dev/sda3
內容 default mount options: user_xattr acl
df -h 查看分區使用狀況
3.臨時開啓分區ACL 權限
mount -o remount,acl 從新掛載根分區,並掛載加入acl權限
4.永久開啓分區acl權限
vi /etc/fstab
uuid=c2 ..... / ext4 defaults,acl 1 1 #加入acl
mount -o remount / #從新掛載文件系統或重啓,修改爲功
5.查看acl權限
getfacl 文件名
6.設置acl權限
setfacl 選項 文件名
-m 設定acl權限
-x 刪除指定acl權限
-b 刪除全部的acl權限
-d 設定默認的acl權限
-k 刪除默認的acl權限
-r 遞歸的設定acl權限
setfacl -m u:st:rx /project
setfacl -m g:group2:x /project
----------------------------
語法:setfacl [-bkRd] [{-m|-x} acl參數] 文件名
-m :設置後續的acl參數
-x :刪除後續的acl參數
-b :刪除全部的ACL設定參數
-R :遞歸設置acl參數
-d :設置預設的acl參數(只對目錄有效,在該目錄新建的文件也會使用此ACL默認值)
-k :刪除預設的ACL參數
-------------------------------------------------------
7.設置最大有效權限mask
setfacl -m m:rw /project
8.刪除acl權限
setfacl -x u:用戶 filename
setfacl -x g:gname filename #刪除指定用戶用戶組的acl權限
setfacl -b filename #刪除文件的全部acl權限
9.遞歸acl權限
setfacl -m u:username:rx -R filename
setfacl -m d:u:用戶:權限 文件名 將來新建的文件也必須遵照acl,只對將來的新建文件
一、setuid、setgid
先看個實例,查看你的/usr/bin/passwd 與/etc/passwd文件的權限
[root@MyLinux ~]# ls -l /usr/bin/passwd /etc/passwd
-rw-r--r-- 1 root root 1549 08-19 13:54 /etc/passwd
-rwsr-xr-x 1 root root 22984 2007-01-07 /usr/bin/passwd
衆所周知,/etc/passwd文件存放的各個用戶的帳號與密碼信息,/usr/bin/passwd是執行修改和查看此文件的程序,但從權限上看,/etc/passwd僅有root權限的寫(w)權,可實際上每一個用戶均可以經過/usr/bin/passwd命令去修改這個文件,因而這裏就涉及了linux裏的特殊權限setuid,正如-rwsr-xr-x中的s
setuid就是:讓普通用戶擁有能夠執行「只有root權限才能執行」的特殊權限,setgid同理指」組「
做爲普通用戶是沒有權限修改/etc/passwd文件的,但給/usr/bin/passwd以setuid權限後,普通用戶就能夠經過執行passwd命令,臨時的擁有root權限,去修改/etc/passwd文件了
二、stick bit (粘貼位)
再看個實例,查看你的/tmp目錄的權限
tmp目錄是全部用戶共有的臨時文件夾,全部用戶都擁有讀寫權限,這就必然出現一個問題,A用戶在/tmp裏建立了文件a.file,此時B用戶看了不爽,在/tmp裏把它給刪了(由於擁有讀寫權限),那確定是不行的。其實是不會發生這種狀況,由於有特殊權限stick bit(粘貼位)權限,正如drwxrwxrwt中的最後一個t
stick bit (粘貼位)就是:除非目錄的屬主和root用戶有權限刪除它,除此以外其它用戶不能刪除和修改這個目錄。
也就是說,在/tmp目錄中,只有文件的擁有者和root才能對其進行修改和刪除,其餘用戶則不行,避免了上面所說的問題產生。用途通常是把一個文件夾的的權限都打開,而後來共享文件,象/tmp目錄同樣。
三、如何設置以上特殊權限
setuid:chmod u+s xxx
setgid: chmod g+s xxx
stick bit : chmod o+t xxx
或者使用八進制方式,在原先的數字前加一個數字,三個權限所表明的進制數與通常權限的方式相似,以下:
suid guid stick bit
1 1 1
因此:suid的二進制串爲:100,換算十進制爲:4
guid的二進制串爲:010,換算:2
stick bit 二進制串:001,換算:1
因而也能夠這樣設:setuid:chmod 4755 xxx
setgid:chmod 2755 xxx
stick bit:chmod 1755 xxx
最後,在一些文件設置了特殊權限後,字母不是小寫的s或者t,而是大寫的S和T,那表明此文件的特殊權限沒有生效,是由於你還沒有給它對應用戶的x權限
10.SetUID(4)
只有二進制可執行程序才能設定SUID權限[S權限],命令執行者需對該文件有X權限
s權限是指當命令執行時給予運行文件以讀寫修改權限
例如:passwd 普通用戶可修改/etc/shadow 文件
而cat 普通用戶卻不能夠
設定suid : chmod 4755 filename
chmod u+s filename
11.setGID(2)
chmod 2755 filename 給組設定s權限
chomod g+s dir
11.1 針對可執行二進制文件
只有二進制可執行程序才能設定SGID權限[S權限],命令執行者需對該文件有X權限
例子:locate
whereis locate
ll /usr/bin/locate #查看文件權限
-rwx--s--x
解說上述列子:/usr/bin/locate 可執行的二進制程序 可賦予GUID,命令結束恢復自身的組權限
11.2 針對目錄的做用
@ 普通用戶需對該目錄有rx權限
@ 由root切換成普通用戶在該目錄下新建文件的組默認屬性應該是該目錄的屬性
12.sticky bit(1)
chmod 1755 dir 給其餘設定s權限
chmod o+t dir
chmod o-t dir
sbit粘着位做用:
@只對有wx權限的目錄起做用 :普通用戶能夠在此目錄下擁有寫入權限
@ 無粘着位,普通用戶有W權限,能夠刪除目錄下的全部文件,包括其餘用戶建的文件,一旦有粘着位,只有root用戶能夠刪除全部文件,普通用戶即便有W權限也沒法刪除文件,只能刪除本身創建的文件
//chmod 7755 filename 給用戶用戶組其餘都設定s權限(無任何意義)
chattr +j /mnt/gfs2/gfs2_dir/newfile
[root@roth-01 ~]# lsattr /mnt/gfs2/gfs2_dir
---------j--- /mnt/gfs2/gfs2_dir/newfilechattr -j /mnt/gfs2/gfs2_dir/newfile
[root@roth-01 ~]#
lsattr /mnt/gfs2/gfs2_dir
------------- /mnt/gfs2/gfs2_dir/newfile
chattr -j /mnt/gfs2/gfs2_dir
[root@roth-01 ~]#
lsattr /mnt/gfs2
---------j--- /mnt/gfs2/gfs2_dir [root@roth-01 ~]#
touch /mnt/gfs2/gfs2_dir/newfile
[root@roth-01 ~]#
lsattr /mnt/gfs2/gfs2_dir
---------j--- /mnt/gfs2/gfs2_dir/newfile
http://docs.redhat.com/docs/zh-CN/Red_Hat_Enterprise_Linux/5/html/Global_File_System_2/s1-manage-data-journal.html四、更改下列文件權限,使任何人沒有更改帳戶權限:
1.chattr [+-=] 選項 文件/目錄
+增長權限
-刪除權限
=賦予權限
選項:
i:對文件:不能添加修改內容,更名和刪除
對目錄: 可修改目錄下文件數據,可是不能新建和刪除文件
a: 對文件:只能新增內容,可是不能刪除和修改數據,只能用追加的方式 echo "hua " >> /hua
對目錄: 可修改和新增文件,但不容許刪除
2.lsattr 查看文件系統屬性
lsattr 選項 文件名
-a 全部文件和目錄
-d 目錄