天天看點

Linux權限管理

權限管理是Linux中一個十分重要的概念,也是系統安全性的重要保障。

一、基本權限

使用者對檔案擁有所有者,所屬組和其他人三個身份,每個身份都有讀寫執行三個權限。

<a href="http://s1.51cto.com/wyfs02/M00/87/03/wKioL1fRRnWA-kEJAAAv59NmBXk327.png" target="_blank"></a>

-rw-r--r--:第一個"-"位置是代表檔案類型的。

檔案權限前的第一個字母用來辨別檔案類型:

-:一般檔案

d:目錄檔案

b:塊裝置檔案

c:字元裝置檔案

l:連結檔案

p:人工管道

常見的為-,d,I

rw-  r--  r-- :檔案權限

u    g   o

u所有者,g所屬組,o其他人

r讀 w寫 x執行 -不具有權限

8進制數值表示方法

  r:4           

  w:2      

  x: 1 

如:-rw- r-- r--的意思就是這個檔案的類型是一般檔案,檔案本身所在的使用者可讀可寫不可執行,所在的組可讀,不可寫不可執行,其他使用者可讀,不可寫不可執行。

權限管理指令

chmod  改變檔案或目錄權限

英語原意:change the permissions mode of a file

文法:1、chmod【ugoa】【+-=】【rwx】【檔案或目錄】

執行權限:檔案所有者和root使用者

<a href="http://s3.51cto.com/wyfs02/M02/87/03/wKioL1fRR0WysK_fAAAenq4u69U054.png" target="_blank"></a>

2、權限的數字表示

chmod 【421】【檔案或目錄】

 r——4

 w——2

 x——1

<a href="http://s1.51cto.com/wyfs02/M00/87/03/wKioL1fRR1zRDh1aAAARomiwKPM862.png" target="_blank"></a>

chown  更該檔案或目錄的所有者

英語原意:chamge file ownership

執行權限:root

文法:chown 【使用者】【檔案或目錄】

<a href="http://s2.51cto.com/wyfs02/M02/87/05/wKiom1fRR42jscvQAAAhFQxb7EU869.png" target="_blank"></a>

chgrp  改變檔案或目錄的所屬組

英語原意:change file froup ownnership

文法:chgrp【使用者組】【檔案或目錄】

<a href="http://s1.51cto.com/wyfs02/M01/87/03/wKioL1fRR6nSfzJ2AAAc5SEuLjo398.png" target="_blank"></a>

二、預設權限

umask  顯示、設定檔案的預設權限

英語原意:the user file-creation mask

文法:umask【選項】

-S 以rwx形式顯示建立檔案預設權限

<a href="http://s1.51cto.com/wyfs02/M02/87/05/wKiom1fRSACCCDftAAAk2TBvtwI828.png" target="_blank"></a>

看到目錄預設的權限和umask -S的權限一緻,touch的權限每位比umask -S顯示的權限少一個x權限,在linux會把任何一個建立的檔案的可執行權限去掉(基于安全性考慮),是以也是和umask -S的權限是一樣的

直接輸入umask,得到0022,第一個0是特殊權限,後三位代表正常權限,表示擁有者,所屬組,其他使用者,但其實真正的權限是777-022=755,是以是rwxr-xr-x

<a href="http://s3.51cto.com/wyfs02/M02/87/03/wKioL1fRSCHSHL1OAAAHaLZT9wo146.png" target="_blank"></a>

設定預設權限為754,應由777-754=023

umask 023,但不建議更改,預設的權限是比較合理的

<a href="http://s3.51cto.com/wyfs02/M00/87/05/wKiom1fRSDqTUt2PAAAao0loDFc324.png" target="_blank"></a>

三、ACL權限

有時候,所有者,所屬組,其他人三個身份的權限是770,假如想要某一個使用者的身份為5,那麼這些身份權限就滿足不了要求了,就要使用到ACL權限了。

ACL權限

需要檔案所在的分區支援ACL權限

檢視分區ACL權限是否開啟

 dumpe2fs -h /dev/sda3

dumpe2fs指令是查詢指定分區詳細檔案系統資訊額指令

  -h 僅顯示超級塊中資訊,而不顯示磁盤塊組的詳細資訊

df 檢視分區使用狀況,檢視到/為/dev/sda3

預設挂載選項,支援ACL,預設都開啟了ACL。

<a href="http://s2.51cto.com/wyfs02/M01/87/05/wKiom1fRSJGCQVmsAAC9sBkgwbI758.png" target="_blank"></a>

若沒有開啟

臨時開啟分區ACL權限

mount -o remount,acl/  重新挂載跟分區,并挂載加入acl權限

永久開啟分區ACL權限

vim /etc/fstab   是系統開機自動挂載檔案

<a href="http://s1.51cto.com/wyfs02/M02/87/05/wKiom1fRSK3htocWAADgloFUrsw946.png" target="_blank"></a>

在defaults後加,acl,重新開機系統或重新挂載檔案系統就可以了,當然,在預設的情況下,本身就支援acl的。

檢視與設定acl權限

getacle 檔案名        檢視acl權限

setfacl  【選項】 檔案名  設定ACL權限

-m    設定ACL權限   

-x     删除指定的ACL權限

-b     删除所有的ACL權限

-d     設定預設ACL權限

-k     删除預設ACL權限

-R     遞歸設定ACL權限

setfacl -m u:test:rx //root/wt/   u/g

為給使用者/組配置設定acl,test為使用者名,rx為寫執行權限,/root/wt為檔案名)

<a href="http://s2.51cto.com/wyfs02/M01/87/05/wKiom1fRSM3xBNQBAABH6DPiXxY200.png" target="_blank"></a>

可以看到,權限後面多了個+号,然後使用getfacl檢視acl權限,可以看到user:test:r-x

最大有效ACL權限與删除ACL權限

<a href="http://s1.51cto.com/wyfs02/M02/87/03/wKioL1fRSOiiCB4kAAAwQdTY1SA766.png" target="_blank"></a>

mask是用來指定最大有效權限的。如果我給使用者賦予了ACL權限,是需要和mask的權限“相與”才能得到使用者的真正權限。

相與就是邏輯運算兩個都為真才為真,如user的讀r權限和mask的讀r權限相與為讀權限,若其中任何一個為-權限,則結果就為-權限。

上面用setfacl -m u來指定使用者,用m來指定mask的權限

<a href="http://s1.51cto.com/wyfs02/M02/87/05/wKiom1fRSQKBxnVzAAB4q4jMxXQ181.png" target="_blank"></a>

當然,mask設定成了rwx權限,任何權限與他相與,都是本身,是以預設的mask權限是合理的。

删除ACL權限

setfacl -x u:使用者名  檔案名     删除指定使用者的ACL權限

setfacl -b 檔案名  删除檔案的所有的ACL權限

<a href="http://s5.51cto.com/wyfs02/M00/87/05/wKiom1fRSSjiSm9uAAB7zwkUn9s612.png" target="_blank"></a>

預設ACL權限和遞歸ACL權限

遞歸ACL權限:遞歸是父目錄在設定ACL權限時,所有的子檔案和子目錄也會擁有相同的ACL權限。之前所說的指令,也有遞歸的概念,比如mkdir和rm的時候。

setfacl -m u:使用者名:權限 -R檔案名

<a href="http://s4.51cto.com/wyfs02/M00/87/03/wKioL1fRSUaRooKVAABEQX92iNw508.png" target="_blank"></a>

但是建立的檔案不是擁有ACL權限。

預設ACL權限

預設ACL權限的作用是如果給父目錄設定了預設ACL權限,那麼父目錄中所有建立的子檔案都會繼承父目錄的ACL權限。

setfacl -m d:u:使用者名:權限 檔案名

<a href="http://s4.51cto.com/wyfs02/M01/87/03/wKioL1fRSXjAwAiJAABCc_1JmfA823.png" target="_blank"></a>

四、檔案特殊權限

SetUID

setGID

Sticky BIT

隻有可執行的二進制程式才能設定SUID權限

指令執行者要對該程式擁有x權限

指令執行者在執行該程式時獲得該程式檔案屬主的身份(在執行程式的過程中成為檔案的所有者的身份)

setUID權限隻在該程式執行過程中有效,也就是說身份改變隻在程式執行過程中有效,一旦程式終止,身份就會消失

passwd指令擁有setUID權限,是以普通使用者可以修改自己的密碼,setuid是檔案的所有者擁有s權限,setgit是檔案所屬組擁有s權限,Sticky BIT是其他人擁有s權限。

<a href="http://s5.51cto.com/wyfs02/M01/87/05/wKiom1fRSaOC0IbNAADWi6sgs7w384.png" target="_blank"></a>

很明顯的看到passwd的檔案擁有者有s權限,也就是有setUID權限,之前也看過/etc/shadow的檔案的權限是000,是以cat無法檢視,但是passwd指令擁有s權限,執行此指令的身份變成身份的所有者root使用者,是以無法檢視卻可以往裡面寫入資料了。

設定setUID的方法

chmod 4755檔案名  (指令執行者要對該程式擁有x權限,若沒有執行權限,系統會用大寫的S進行報錯,755是檔案本身的權限,開頭的4代表SUID,2表示GUID,1表示SBIT。7表示擁有SUID,SGID,SBIT)

chmod u+s 檔案名

<a href="http://s2.51cto.com/wyfs02/M01/87/03/wKioL1fRSb3SMDjrAADsslV9WsU591.png" target="_blank"></a>

先切換到普通使用者,無法檢視/etc/shadow,回到root身份,設定setUID後,再切換到普通使用者,可以檢視/etc/shadow了。

取消setUID權限

chmod 755 檔案名

chmod u-s 檔案名

危險的SetUID

關鍵目錄應嚴格控制寫權限,比如/  /usr等。

使用者的密碼設定要嚴格遵守密碼三原則

對系統中預設應該具有SetUID權限的檔案作一清單,定時檢查有沒有這之外的檔案被設定了SetUID權限

系統預設有些擁有SUID的權限,沒有特殊情況,不允許設定SUID權限

 SetGID

SetGID針對檔案的作用

隻有可執行的二進制程式才能設定SGID權限

指令執行者在執行程式的時候,組身份更新為該程式檔案的屬組

SetGID權限同樣隻在該程式執行過程中有效,也就是說組身份改變隻在程式執行過程中有效

<a href="http://s5.51cto.com/wyfs02/M00/87/05/wKiom1fRSdfhnOigAAAwEKW9Z-M265.png" target="_blank"></a>

我們在使用locate查詢的時候,實際上在查找mlocate.db庫,但是庫的權限對于其他人的權限的0,我們怎麼有看的權限?再看locate的權限,/usr/bin/locate是可執行二進制程式,可以賦予SGID權限,我們在使用locate的時候,已經變成了所屬組了,slocate組對庫有r權限。是以普通使用者可以使用locate指令檢視mlocate.db資料庫,指令結束,傳回為普通身份。

SetGID除了可以針對檔案,還可以針對目錄,SUID是沒有這個特征的。

SetGID針對目錄的作用

普通使用者必須對此目錄擁有r和x權限,才能進入此目錄

普通使用者在此目錄中的有效組會變成此目錄的屬組

若普通使用者對此目錄擁有w權限時,建立的檔案的預設屬組是這個目錄的屬組。

設定SetUID

chmod 2755 檔案名

chmod g+s  檔案名

取消SGID

chmod g-s 檔案名

<a href="http://s4.51cto.com/wyfs02/M02/87/05/wKiom1fRSfLzwY2JAABnj5VhaYk778.png" target="_blank"></a>

可以看到user1建立的檔案的所屬組是user1,但是在tmp/test下建立的所屬組就是root組了,這就是SGID針對目錄的作用。

SBIT粘着位作用

粘着位目前隻針對目錄有效

普通使用者對該目錄擁有w和x權限,即普通使用者可以在此目錄擁有寫入權限。

如果沒有粘着位,因為普通使用者擁有w權限,是以可以删除此目錄下所有檔案,包括其他使用者建立的檔案,一旦賦予了粘着位,除了root可以删除所有檔案,普通使用者就算有w權限,也隻能删除自己建立的檔案。,但是不能删除其他使用者建立的檔案。

<a href="http://s3.51cto.com/wyfs02/M00/87/03/wKioL1fRSg-iLmvMAACnOrGqNuU615.png" target="_blank"></a>

tmp預設的權限是1777,先将權限改為777,建立檔案,切換到其他使用者可以删除,改回預設權限1777設定SBIT,沒有删除權限了。

設定粘着位

chmod 1755 目錄名

chmod o+t 目錄名

取消粘着位

chmod 755 目錄

chmod o-t 目錄名

五、檔案系統屬性chattr權限

chattr指令格式

chattr【+-=】【選項】檔案或目錄名

+:增權重限

-:删除權限

=:等于某權限

選項:

i:檔案設定看i屬性,不允許對檔案進行删除、改名,也不能添加和修改資料;目錄設定了i屬性,那麼隻能修改目錄下檔案的資料,但允許建立和删除檔案。

a:檔案設定a屬性,那麼隻能在檔案中增加資料,但是不能删除和修改資料,目錄設定a屬性,那麼隻允許在目錄中建立和修改檔案,但是不允許修改。

檢視檔案系統屬性

lsatter 【選項】 檔案名

-a 顯示所欲檔案和目錄

-d 若目标是目錄,僅列出目錄本身的屬性,而不是子檔案的

<a href="http://s4.51cto.com/wyfs02/M01/87/03/wKioL1fRSiqT6vOBAAA-dnecnVA502.png" target="_blank"></a>

建立檔案test,檢視屬性為644,用chattr +i給test加i屬性,需要注意的是ls指令無法檢視檔案系統屬性,使用lsatr 檢視檔案系統屬性,多了i屬性,e屬性代表這個檔案是在ext檔案系統建立的。然後再繼續寫入資料,提示權限不足,也無法删除,細心的同學應該看到了我使用的還是root使用者,是以這個權限對root使用者也生效,當然使用chattr -r test删除i屬性,就可以實作以上操作了。

<a href="http://s4.51cto.com/wyfs02/M01/87/05/wKiom1fRSkDBfJ5SAAA1TK-9V3A470.png" target="_blank"></a>

對目錄設定了i屬性,可以看到目錄有i屬性,但是目錄下的檔案沒有i屬性,我們可以修改目錄下檔案的資料,但是沒有權限建立和删除檔案。

<a href="http://s1.51cto.com/wyfs02/M02/87/05/wKiom1fRSlaQ3HqhAAAu-kMOdRg843.png" target="_blank"></a>

建立檔案,添加a屬性,我們可以添加檔案,但是無法修改和删除資料,需要注意的是“&gt;”無法添加,“&gt;”是覆寫追加,也等于把以前的資料删了。

<a href="http://s2.51cto.com/wyfs02/M02/87/03/wKioL1fRSmrzQ87BAAAkDEkH314109.png" target="_blank"></a>

對目錄設定了a權限,隻能在目錄中建立和修改檔案,修改檔案指修改檔案中的資料,而不是修改檔案名,但是不能删除。

chattr不是為了限制檔案權限,而是為了防止root在内的誤操作的保險措施。

六、系統指令權限sudo權限

sudo 權限

root把本來隻能超級使用者執行的指令賦予普通使用者執行。

sudo 的操作對象是系統指令。

visudo 實際上修改的是/etc/sudoers檔案

<a href="http://s1.51cto.com/wyfs02/M00/87/05/wKiom1fRSoSylX5fAAAQK5V3-_M591.png" target="_blank"></a>

user1     ALL        =         (ALL)             ALL

使用者名  被管理主機的位址     可使用的身份     授權指令(絕對路徑)

%組名  被管理主機的位址     可使用的身份     授權指令(絕對路徑)

第一個ALL是被管理額主機位址是linux的位址,不是外部通路的位址指令越簡單,第三個ALL是授權的指令,可以寫ALL,但是這個太過于危險,就相當于root身份了,權限太大,如果具體到某個參數,則限制的權限非常的小。建議寫絕對路徑并具體到某一個參數。

<a href="http://s5.51cto.com/wyfs02/M00/87/05/wKiom1fRSqCSnQrIAACnK2sCpRc862.png" target="_blank"></a>

切換到user1使用者我們可以用sudo -l檢視已被root授權的使用者,可以看到我們在上面授權的/usr/bin/vim指令。

<a href="http://s5.51cto.com/wyfs02/M01/87/05/wKiom1fRSrnz8gVpAACWVyatrE0384.png" target="_blank"></a>

在使用被授權的指令之前,需加sudo + 指令的絕對路徑 

<a href="http://s2.51cto.com/wyfs02/M01/87/03/wKioL1fRSs6SR5edAAAQXU8ZnBk787.png" target="_blank"></a>

可以看到普通使用者可以修改etc/passwd檔案了,這個危害有多大就不用多說了。

<a href="http://s2.51cto.com/wyfs02/M02/87/03/wKioL1fRSvXxCUcBAAFs6aU0SIw642.png" target="_blank"></a>

linux的權限基本都說完了,由于水準有限,文中若有錯誤,多多包涵,同時歡迎一起交流。

本文轉自 wt7315 51CTO部落格,原文連結:http://blog.51cto.com/wt7315/1850860

繼續閱讀