2021-05-12 14:32:11
Linux許可權管理
1、基本許可權
檔案許可權位,10位:-rwxr-xr-- 第一位表示檔案型別,後面3組就是許可權,第一組是u所有者,第二組是g所屬組,第三組是o其他人 r 讀,w 寫 ,x 執行
許可權修改:chmod [選項] 模式 檔名
選項-R表示遞回全部賦予命令指定許可權
比如:chmod u+x abc.avi 給當前使用者可執行許可權
chmod g+w,o+w abc.avi
減許可權:chmod u-x,g-w abc.avi
不用考慮之前的,直接對應賦予對應組許可權:chmod u=rwx,g=rw abc.avi
給所有使用者賦許可權:chmod a=rwx abc.avi 三組許可權都一樣,一般不常用
常用的數位方式:chmod 755 abc.avi
chmod 644 abc.avi 使用比較靈活,r=4,w=2,x=1,二進位制指數,避免的歧義和重複
讀許可權r:對於普通檔案,有r許可權就可以檢視檔案內容,如果對目錄有讀許可權,那麼可以檢視目錄下的檔案列表
寫許可權w:對於普通檔案,有w許可權就可以用vi vim echo編輯檔案內容,但是不能刪除檔案
檔案的資料本身屬於檔案本身的許可權控制,檔名稱屬於目錄存放的資料
如果對目錄有w許可權,就可以修改檔案的名稱或者刪除檔案,以及修改目錄名稱,在目錄下面進行任何的操作
執行許可權x:對於檔案可以執行可執行的指令碼;如果對目錄有x許可權,那麼可以進入目錄,cd進去
對於檔案來說最高許可權是執行,對目錄來說最高許可權是寫
對目錄來講 只有0 5 7是有意義的
這些許可權限制對root使用者是沒有用的,root使用者可以操作任何許可權的目錄和檔案
chown改變檔案所有者
chown user1 abc 然後許可權仍然是:755這樣user1使用者許可權是7,就可以正常存取了
chgrp group abc 是修改檔案的所屬組
chown user1:group1 abc 可以同時修改使用者和組,冒號前面是使用者,後面是組
同樣加-R是遞回修改,-v檢視修改過程詳細資訊
對於web伺服器等伺服器端平台,實際開發過程中分配許可權的核心原則是:在最小許可權下能夠滿足要求即可,符合最小許可權原則
umask 檢視預設許可權:root使用者:0022 普通使用者:0002 (檔案剛建立時的預設許可權,根據這個可以分析預設情況下檔案和目錄的許可權)
第一位0代表特殊許可權
檔案預設許可權是不能執行的,所以最大許可權是666,所以檔案的預設許可權是666換算成字母減去umask值換算成字母相減就是rw-rw-rw- 減去 --- -w- -w- = rw-r--r-- = 644
如果umask是033,則rw-rw-rw- 減去 --- -wx -wx = (空減去x仍為空,所以仍然為644) rw-r--r-- = 644
暫時修改umask值:umask 0033
目錄的最大許可權是777,所以仍然是:rwxrwxrwx 減去 --- -w- -w- = 755
umask值最小,許可權最大,umask值最大,許可權最小
永久修改umask值,組態檔和環境變數在同一個檔案:/etc/profile
這裡面的if語句是用來判斷普通使用者還是root使用者的,修改這個檔案可以永久修改umask值
2、特殊許可權
ACL許可權:任何目錄都只能有一個使用者和一個組,某些特殊要求下需要ACL許可權,ACL許可權是為了解決使用者身份不夠用的情況
原來ACL是為了掛載分割區使用的
dumpe2fs -h /dev/sda5 列出超級塊資訊,可以檢視acl許可權的存在狀態
臨時給分割區賦予acl許可權,重新掛載即可,比如根分割區:mount -o remount,acl /
如果分割區預設沒有acl許可權,設定預設掛載需要修改組態檔:/etc/fstab
即把後面的defaults新增修改為defaults,acl
檢視檔案的acl許可權:getfacl 檔名 預設是沒有的,檢視只顯示普通許可權
設定許可權:setfacl 選項 檔名
新增ACL許可權:setfacl -m u:lw:rx av 給使用者lw設定av檔案為rx許可權,這樣再使用ls -l檢視最後一位從之前的.變成了+
然後通過getfacl av可以看到多了一行user:lw:r-x這就是acl許可權,如果是給組設定就用g
還有一行mask::rwx這是指控制使用者最高許可權,需要和實際的許可權進行與運算得到的才是使用者真正的許可權
r && r=r r && - = - - && r = - - && - = -,所以實際許可權為:r-x && rwx = r-x 還是一樣的
修改mask值:setfacl -m m:rx av
這時候就算設定:setfacl -m u:lw:rwx av 最後使用者lw的許可權仍然是r-x
許可權可以設定多個使用者
刪除指定使用者許可權:setfacl -x u:lw av 同樣刪除組是用g:組名
刪除檔案所有的acl許可權,所有使用者和組的許可權都會被刪除:setfacl -b av
遞回設定目錄下所有檔案都有對應使用者的acl許可權:setfacl -m u:lw:rx -R av
但是上面方法導致av下所有的檔案都有x可執行許可權,這樣檔案許可權就太高了,不可避免的導致了許可權溢位
預設情況下目錄預設mask為rwx,檔案是r-x
給目錄設定預設acl許可權,以後該目錄下所有新建檔案或者目錄都會繼承這個acl許可權
設定預設acl許可權命令:setfacl -m d:u:lw:rw -R /home/av
設定後使用getfacl檢視設定都變成了預設的,設定預設acl只會對之後產生的檔案賦予acl許可權,之前已經有的檔案不會被設定許可權
遞回許可權設定當前存在的檔案,預設許可權設定以後目錄新放進去的檔案
預設許可權和遞回許可權都是針對目錄來說的,對普通檔案沒有任何意義
sudo是使用者操作命令的許可權,重點是針對於命令,而其他都是針對使用者操作所有檔案的許可權
超級使用者應該賦予許可權,普通使用者才可以使用
通過命令visudo可以設定許可權,相當於修改組態檔/etc/sudoers
user ALL=(ALL) ALL
user是要賦予許可權給哪個使用者,ALL是被管理主機的地址,(ALL)是可使用的身份,ALL是授權使用的命令的絕對路徑(一定是絕對路徑)
如果是本地一台主機,ALL和本地IP作用一樣
%group ALL=(ALL) ALL
這裡是修改組名
命令可以帶引數,寫的越詳細限制就越嚴格,只寫命令代表可以執行所有的引數
比如執行visudo開啟檔案定位到最後一樣新增:user1 ALL=(ALL) sbin/shutdown -r now
這樣就給user1使用者賦予了重新啟動計算機的許可權
普通使用者通過命令:sudo -l 回車後按提示輸入密碼可以檢視自己可以執行哪些命令,否則預設沒有sudo許可權
普通使用者執行命令必須嚴格執行(必須寫絕對路徑):sudo /sbin/shutdown -r now 這樣才可以正確執行
新增visudo也可以寫成:user1 ALL=/usr/sbin/useradd 效果是相同的
比如更改密碼新增:user1 ALL=/usr/bin/passwd 這樣一定是不可以的!這樣普通使用者一旦得到許可權,就有可能更改root使用者的密碼,所以應該使用正規表示式匹配
user1 ALL=/usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd "", !/usr/bin/passwd root
這樣就可以更改一般使用者密碼,但是不能更改root使用者密碼了,注意上面逗號後面必須加空格,
這樣使用者在執行上面設定的命令時,身份是root使用者,一定要注意這個關係
某些特殊的許可權是系統內部使用的許可權,一般不太常用,比如SetUID,SetGID等,強烈建議不要修改,對伺服器影響很大
umask第一位是特殊許可權的定義
只有可執行的檔案才可以設定SUID許可權,如果檔案不可執行則沒有任何意義
對可執行檔案賦予SUID可以寫成:chmod 4775 abc 第一位補充一個4,這樣檔案的許可權就設定為rwsrwxr-x了,s就代表SUID許可權,此時檔案顏色變為紅色,表示警告,如果沒有r許可權 ,那麼檔案許可權會變為S許可權,大寫的S代表錯誤,所以s=r+S才可以正確執行
命令執行者必須可執行檔案有x執行許可權才可以執行s許可權,
系統中passwd命令就有s許可權,所以普通使用者可以間接的通過passwd的s許可權提升為所有者即root使用者,對/etc/shadow密碼檔案進行修改,修改完畢,許可權回歸(靈魂附體只在普通使用者執行帶s許可權的命令的過程中有效),如果檔案沒有SUID許可權,則普通使用者許可權不會提升
設定SUID許可權的命令是:chmod 4775 檔名或者chmod u+s 檔名
取消SUID許可權的命令是:chmod 0775 檔名或者chmod u-s 檔名
設定SGID許可權的命令是:chmod g+s 檔名或者chmod 2775 檔名,作用和前面一致,提升使用者組的許可權
正常情況下嚴格控制檔案,不要手動設定SetUID許可權,系統中定期檢查是否出現不常見的SUID許可權的檔案,如果出現伺服器就有可能被注入後門,要儘快清除
清除方法如下:
首先系統正常情況下設定模板檔案儲存系統中所有帶SUID許可權的檔案:
find / -perm -4000 -o -perm -2000 > /root/suid.log
然後編寫指令碼,(注意:shello指令碼空格嚴格區分,注意關鍵詞間的空格間隔):
#!/bin/bash
find / -perm -4000 -o -perm -2000 > /tmp/setuid.check
for i in $(cat /tmp/setuid.check)
do
grep $i /root/suid.log > /dev/null
if [ "$?" != "0" ]
then
echo "i isn't in listfile!" >> /root/suid_log_(date +%F)
fi
done
rm -rf /tmp/setuid.check
然後執行指令碼:
chmod 755 suid_check.sh
./suid_check.sh
當指令碼執行完畢後,在root目錄下就會出現suid_log_當前日期這樣一個檔案,這個時候開啟這個檔案,裡面就是所有除系統預設之外的擁有SUID許可權的檔案,只需要把列表檔案刪除即可
SGID許可權既可以對可執行檔案設定也可以對目錄設定,
如果對於檔案SGID和SUID相似,只有可執行許可權的檔案才可以設定SGID許可權,
chmod g+s abc或者chmod 2777 abc,設定後組許可權有個s,只有普通使用者執行時許可權提升為組許可權,執行完畢同樣許可權回歸
比如普通使用者可以執行locate命令提升組為slocate從而搜尋資料庫檔案/var/lib/mlocate/mlocate.db
如果對於目錄賦予許可權,普通使用者必須對目錄有r和x許可權,如果此時目錄也有SUID許可權,如果普通使用者進入目錄時,使用者在此目錄中的組許可權就是該目錄的所屬組,使用者如果對該目錄有w許可權,則使用者在該目錄下新建的檔案或者目錄所屬組都是使用者的所屬組,而不是使用者本身的所屬組
SGID許可權比SUID許可權稍微安全一些,同樣不建議隨便使用
SBIT許可權只針對目錄有效,如果使用者和使用者組外其他使用者對目錄有rwx許可權,即7許可權,即可以檢視並且在目錄中建立檔案,
首先建立目錄,設定許可權為chmod 777 abc
預設情況下其他使用者雖然不能修改abc目錄下root使用者和組建立的檔案內容,但是由於對目錄有寫許可權,所以可以刪除abc下面的檔案,當設定SBIT黏著位之後,那麼其他使用者就算對目錄擁有rwx許可權,但是也不能刪除這個目錄下root使用者建立的檔案了,而只能刪除自己的檔案
設定SBIT許可權,chmod o+t abc,設定後第三組其他使用者許可權變為rwt,t就代表SBIT
/tmp目錄就擁有SBIT許可權,預設情況下所有使用者都擁有新建檔案的許可權等,預設情況下對指定檔案沒有寫許可權,所以不能刪除也不能對其他使用者的檔案有任何操作,這樣就發揮臨時目錄的作用
在web伺服器目錄中,不要設定目錄許可權為777,雖然這樣方便,最好的方法是要更合理的調整使用者符合分配最小許可權原則,夠用即可
之前設定給目錄設定SBIT許可權後,雖然目錄下檔案不能刪除,但是可以修改內容,用不可改變位許可權可以解決這個問題
不可改變位設定:
對於檔案和目錄都生效:chattr +i abc
通過lsattr abc可以檢視這個檔案具體的許可權,可以看到+i後許可權裡面除了e還多出來一個i
通過lsattr -d abc可以檢視目錄的不可改變位許可權
給普通檔案設定i許可權後,所有使用者包括root都不能修改該檔案的內容或者刪除檔案,但是root使用者本身可以賦予或者取消該許可權設定,同樣擁有控制權
如果給目錄設定i許可權後,只能修改目錄下檔案內的內容,不能建立和刪除下面的檔案也不能對檔案重新命名
取消i許可權:chattr -i abc
a許可權,對檔案或者目錄設定a許可權:chattr +a abc
給檔案賦予a屬性,屬性中會多一個a,則檔案裡面只能追加內容,但是不能刪除檔案也不能減少內容,用vi/vim追加是無效的,會被系統禁止,但是可以用 echo abcd >> abc這樣的方式正確追加
如果對目錄設定a屬性,則只可以在目錄中建立新檔案,但是不能刪除或者修改舊檔名,但可以修改檔案內容,但是會有警告,已經建立的新檔案也無法刪除
取消a許可權:chattr -a abc
i和a許可權同樣不建議隨便使用,還是建議靈活使用系統的基本許可權以及預設許可權,必要時再使用特殊許可權,提高系統的穩定性和安全性。
本文永久更新連結地址:http://www.linuxidc.com/Linux/2016-02/128499.htm
相關文章