歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux權限管理

Linux權限管理

日期:2017/2/28 13:54:21   编辑: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權限同樣不建議隨便使用,還是建議靈活使用系統的基本權限以及默認權限,必要時再使用特殊權限,提高系統的穩定性和安全性。

Copyright © Linux教程網 All Rights Reserved