linux的檔案有所有者、所屬組和其他人的概念,但是僅僅擁有這些意味著許可權不同的使用者只分三類,這有時是不夠用的,acl許可權(access control list)就可以解決這個問題。
檢視當前分割槽是否支援acl許可權:dumpe2fs -h /dev/sda1
若其中有acl就說明支援acl。一般預設都是支援的,如果不支援要開啟acl選項,需要修改/etc/fstab,該檔案是系統開機自動掛載的檔案,如果某個分割槽沒有開啟acl,就需要在對應分割槽行defaults後加逗號acl,然後再重啟或重新掛載檔案系統mount -o remount 對應分割槽
。對應分割槽就是/、/boot等。
給使用者設定檔案acl許可權:setfacl -m u:st:rx /project/
相當於給使用者st,目錄/project/設定rx許可權。此時在檢視檔案詳細資訊時會在原來的9個許可權後加上乙個加號,代表它擁有acl許可權。(如果填使用者名稱的位置設定為空,就相當於給檔案的擁有者設定許可權)
給使用者組分配acl許可權setfacl -m g:gro:rx /project/
相當於給使用者組gro,目錄/project/設定rx許可權。
檢視acl許可權getfcal 檔案
設定mask許可權:setfacl -m m:rx
最大有效許可權mask許可權,它與各acl許可權相與得到的許可權才是真正的許可權。執行檢視acl許可權時能直接查到每個檔案的mask許可權。(mask許可權可以規範最大允許的許可權,如果mask許可權僅僅為r,即使其他的許可權為rw,那麼w也不會生效)
刪除使用者的acl許可權:setfacl -x u:使用者名稱 檔案
g:組名可以刪除組的acl許可權。刪除檔案的所有acl許可權:
setfacl -b 檔案
遞迴acl許可權setfacl -m u:使用者名稱:許可權 -r 目錄
給目錄設定acl許可權後,所有的子檔案和子目錄都會使用這個acl許可權,但是如果設定完之後再新建檔案那麼新檔案沒有該遞迴acl許可權,若想使未來新建的檔案擁有acl許可權,則應該使用預設acl許可權:setfacl -m d:u:使用者名稱:許可權 目錄
suid許可權的作用是命令執行者在執行程式時獲得該程式檔案屬主的身份,在程式結束時屬主的身份就會失去。要滿足的條件首先是該檔案必須是可執行檔案,且命令執行者必須有執行許可權x。s許可權的乙個典型應用就是命令passwd,檢視/usr/bin/passwd的許可權是:-rwsx-xr-x(屬主許可權的x換成了s),這是因為該命令允許使用者自定義自己的密碼,本質上是修改shadow檔案,而shadow檔案沒有許可權只能借助root的許可權來進行修改。
設定suid:chmod 4755 檔名
或chmod u+s 檔名
取消:chmod 755 檔名
或chmod u-s 檔名
這個許可權是非常危險的,普通使用者因此可能會獲得管理員許可權,對擁有s許可權的檔案應該定期檢查,取消不必要許可權。
該許可權只能用於二進位制程式,只能暫時獲得執行許可權,而不能獲得讀許可權,也就是不能用cat檢視這種檔案。
sgid可以用於二進位制可執行檔案,也可以用於目錄。用於二進位制可執行檔案時,該許可權的作用是命令執行者在執行該檔案時(必須有對該檔案的x許可權),組身份公升級為該檔案的屬組。該許可權的典型應用是locate命令,該命令通過查詢資料庫檔案來進行搜尋,資料庫檔案/var/lib/mlocate/mlocate.db的屬組是slocate,該組的許可權是r,也就是slocate組可以讀該檔案,而locate命令檔案/usr/bin/locate的屬組是slocate,屬組許可權是--s,普通使用者執行該命令時也就擁有了slocate的許可權,也就能順利的查詢資料庫。
sgid也可用於目錄檔案。如果使用者對目錄有rwx許可權,那麼他就可以檢視該目錄且可以在該目錄建立檔案,如果該目錄有sgid,也就是屬組許可權的x替代成了s,那麼使用者在該目錄下建立的檔案屬組是該目錄的屬組,而不是建立者初始組。
設定sgidchmod 2755 檔名
或chmod g+s 檔名
取消:chmod 755 檔名
或chmod g-s 檔名
sbit粘著位目前只對目錄有效,設定粘著位後目錄的other許可權中的x被替換為t,一旦某個目錄設定成粘著位,那麼對該目錄原來擁有w和x許可權的普通使用者就不能刪除該目錄下的檔案了,此時普通使用者就算是擁有w許可權,也只能刪除自己建立的檔案,對其他檔案不能刪除。
設定粘著位chmod 1755 目錄
或chmod o+t 目錄
取消:chmod 777 目錄
或chmod o-t 目錄
要設定特殊許可權只需要在原來三個許可權數字的基礎上在前面再加乙個數字即可,三個特殊許可權代表的數字:suid為4,sgid為2,sbit為1,如果執行下面的語句:
chmod 7666 test
就會給test檔案同時賦予三種特殊許可權,但是它現在的許可權是:
-rwsrwsrwt,注意到三個特殊許可權都是大寫字母,這種情況代表特殊許可權為空,因為666代表三種群體都沒有執行許可權,此時即使賦予了特殊許可權也無法獲取對應許可權,因為無許可權可用。
該許可權限制包括root使用者在內的所有使用者。
新增chattr許可權:chattr [+-=] [選項] 目錄或檔名
選項有兩種-i和-a。
-i相當於上鎖,對檔案來說它不能被刪除,不能修改檔案內容、改名;對目錄來說不能在該目錄下刪除和建立檔案。-a相當於不允許刪除已有的資料,對檔案來說它不能被刪除,也不能刪除檔案資料,但是可以在檔案中新增新資料;對目錄來說不能在該目錄下刪除檔案,但是可以新建檔案。
這種特殊許可權用ls是查不出來的,必須使用lsattr命令:lsattr 選項 檔名
-a代表顯示全部,-d代表僅列出目錄。
其他隱藏許可權:
切換使用者su - 使用者名稱
執行完這條命令後,輸入密碼。切換成另乙個使用者的同時切換使用者的環境變數。還可以不切換使用者身份直接執行root的許可權:su -root -c "useradd user3"
(不加使用者名稱直接執行代表切換到root)
注意su -
和su
是不同的,前者是login-shell,後者是non-login shell,如果執行後一條命令環境變數不會切換成root的,還是原來使用者的。su命令切換結束想要恢復執行exit命令即可。
su命令在切換的時候必須知道對方的密碼(root使用時除外),這樣會導致密碼洩露,這個問題可以用sudo許可權來解決。
sudo許可權的作用是root把本來超級使用者能執行的命令賦予普通使用者執行。sudo的操作物件是系統命令。
要設定sudo許可權要執行命令visudo
相當於vi /etc/sudoers
,在這個檔案中:
1、設定單一使用者的sudo許可權
root all=(all) all,其中root代表賦予許可權的使用者,第乙個all代表主機位址,第二個all代表可使用的身份,第三個all代表授權的命令絕對位址。這一行代表使用者可以在給定位址執行對應的命令。如:
sc all= /sbin/shutdown –r now代表使用者sc可以在所有主機上執行重啟命令,身份省略不寫代表sc被當成root使用者對待。sudo命令執行時必須輸入當前使用者的密碼,而不是root密碼(只有第一次執行sudo,或者兩次執行sudo的時間間隔大於5分鐘時才會要求輸入密碼)。
這個許可權也是危險的,如果給普通使用者賦予執行vim的許可權,那麼他就能獲取root的許可權編輯所有檔案。
2、設定群組的sudo許可權
%wheel all=(all) all,代表wheel群組中的使用者可以使用所有root的命令。
3、設定免密碼sudo:
將sudo配置資訊中一行的最後乙個all改為:nopasswd:all
,如果要換成其他授權命令則修改all即可。
4、使用別名:
user_alias admpw=pro1,pro2,pro3,pro4
cmnd_alias admpwcom=!/usr/bin/passwd,/usr/bin/passwd [a-za-z]*,!/usr/bin/passwd root
admpw all=(root) admpwcom
上述最後一行是代表設定sudo許可權,而前兩行分別把使用者名稱和可以執行的命令單獨定義了。這裡允許執行所有設定密碼的命令,除了單獨執行passwd以及passwd root,防止root密碼被執行者修改。
5、sudo搭配su快速實現將身份轉為root:
user_alias admins=pro1,pro2,pro3,pro4
admins all=(root) /bin/su -
這樣就相當於這4個使用者可以直接用sudo su -
來切換到root(用自己的密碼)
檢視本使用者可用的所有sudo許可權:sudo -l
使用者執行sudo許可權賦予的命令:sudo 命令
,以使用者sshd的身份在/tmp下建立乙個mysshd的檔案:
sudo -u sshd touch /tmp/mysshd
linux高階許可權suid sgid sticky
1.分析以下問題 root w hat ll root file1.txt rw r r 1 root root 0 aug 4 16 13 root file1.txt sfj1 w hat cat root file1.txt cat root file1.txt permission deni...
Linux高階許可權管理
傳統的ugo rwx wx wx 許可權模型,無法解決當多個組需要對乙個檔案執行某些許可權的問題.acl 訪問控制列表access control list一種高階的許可權機制,允許我們對檔案或者資料夾進行高階的設定,acl允許針對不同使用者 不同組隊對乙個目標檔案或資料夾進行許可權設定,不受ugo...
Linux高階許可權管理
高階許可權acl 修改屬主的許可權 setfacl m u 許可權 a.txt 修改屬組的許可權 setfacl m g 許可權 a.txt 修改其他人的許可權 setfacl m o 許可權 a,txt 修改具體某乙個使用者的許可權 setfacl m u 使用者名稱 許可權a.txt 修改具體某...