Linux權限360度赤裸裸華麗麗大曝光連載之三:查缺補漏

文章來源:http://blog.chinaunix.net/space.php?uid=20168535&do=blog&id=334318

1、 權限之粘着位
 
Linux 中有一個存放臨時文件的目錄 /tmp (相似於 Windows 中的 temp 目錄),每一個用戶產生的臨時文件都存放在此目錄下,也就是說每一個用戶對 /tmp 目錄都應該有寫權限(不然沒法拷貝生成文件),這樣形成一個問題,好比,高洛峯在 /tmp 目錄下建立了一個文件,張沫看着不爽就能夠刪掉,這如何控制?
其實,這種狀況永遠都不會發生,由於 /tmp 目錄有一個特殊的權限標記:
ls -ld /tmp
drwxrwxrwt 5 root root 4096 May 24 13:55 /tmp
瞧見那個 rwx 權限最後的「 t 」了沒,那個神奇的「 t 」就是粘着位 t (有的資料中文也稱爲粘滯位),是 Linux 特殊權限中的第三個(另外兩個是 SetUID SetGID ),定義爲:權限爲 777 的目錄設置粘着位 t 之後,具備寫權限每一個用戶均可以在目錄下建立文件,不一樣的是每一個用戶只能刪除本身是全部者的文件,也就是說只能刪除本身建立的文件。
讀者能夠作一下試驗,重複一下系列文章一 「從 ls 命令開始」中的案例一操做(給目錄 /test 授予 777 權限用一個普通用戶登陸刪除另外一個普通用戶建立的文件),不過此次建立的目錄 /test 多授予它一個粘着位權限:
chmod o+t /test   # chmod 1777 /test
此時普通用戶嘗試刪除其餘用戶的文件時,會給出提示「 Operation not permitted 」(中文翻譯:你丫沒事吧,瞎得瑟啥,哥的文件你刪不了)。
 
2、 文件系統權限
 
每一個操做系統都要有一種組織管理數據的方式,咱們能夠理解爲就是文件系統,好比 Windows NTFS FAT Linux EXT ,而在 Linux 加載分區時能夠針對文件系統進行權限設定。
配置文件 /etc/fstab 保存了 Linux 啓動時自動加載的分區信息, /etc/fstab 文件中第四項定義了加載時的設置,默認爲 defaults ,包括 rw suid dev exec auto nouser async ,若是想改變整個分區的限定,能夠利用這些選項。本文舉兩例說明,證實基於文件系統的權限那是至關霸道。
 
案例一:只讀分區
 
默認加載分區是可讀寫 rw 的,可是若是特殊應用但願分區加載後是隻讀的,能夠作一下設置:
vi /etc/fstab   # 編輯 /etc/fstab 文件在 defaults 後加入 ro 選項(逗號分隔)
LABEL=/soft    /soft    ext3    defaults,ro    1 2
mount -o remount /soft   # 從新加載 /soft 分區,使設置生效
若是你不嫌麻煩也能夠重啓系統,設置一樣會生效。
此時整個 /soft 分區都是隻讀的,用 root 登陸後執行:
touch /soft/testfile
touch: cannot touch `testfile': Read-only file system
會提示 /soft 分區是隻讀的,即使牛 X 到是 root 也不能夠建立文件,這是凌駕於 rwx 權限之上的文件系統權限,至關的牛 A 與牛 C 之間。像本例是筆者公司的軟件共享目錄,通常半個月才更新一次軟件,平時不想任何人增長或刪除(包括不但願 root 用戶誤刪除),因此設置爲 ro ,更新軟件時,能夠臨時更改會 rw 來設置:
mount -o remount,rw /soft
在命令行上也能夠設置分區權限,可是隻是當前會話有效,而寫入 /etc/fstab 文件後則會一直有效。
 
案例二:安全分區
 
數據存儲的分區,如用作備份的分區,咱們能夠增長下安全設置選項:
vi /etc/fstab   # 編輯 /etc/fstab 文件在 defaults 後加入 noexec 選項
LABEL=/backup    /backup    ext3    defaults,noexec    1 2
mount -o remount /backup   # 從新加載 /backup 分區 使設置生效
此時作個試驗,咱們使用普通用戶拷貝一個命令文件 pwd /backup 目錄下
cp /bin/pwd /backup
/backup/pwd
-bash: pwd: Permission denied
ls -l pwd
-rwxr-xr-x 1 liming liming 93560 Sep 25 10:13 pwd
命令拷貝到 /backup 下雖然具備可執行權限,可是也沒法執行,在 /backup 分區下,任何可執行文件都將不能執行,這麼作的意義在哪裏?若是***程序、***、病毒不可以執行,那麼就至關於沒有意義。
 
其餘選項不作更多演示,這裏只拋磚引玉,其餘選項設置讀者可 man mount 查看,查看 -o 選項中的詳細介紹,更多設置讀者可自行嘗試,所謂授之以魚不如授之以漁讀萬卷書不如行×××路萬惡淫爲首窗前明月光啊。
 
3、 權限之 chattr
 
chatrr 只有超人 root 用戶可使用,用來修改文件的權限屬性,創建凌駕於 rwx 基礎權限之上的受權。
在此介紹兩個經常使用選項:
a  只容許在文件後追加數據,若是目錄具備此屬性,系統將只容許在目錄下創建和修
改文件,而不容許刪除任何文件。
i  不容許對文件進行任何修改,若是目錄具備此屬性,那麼只能修改目錄下的文件,
不容許創建和刪除文件。
 
案例一:沒法刪除和更改的文件
 
若是要創建一個公共訪問的目錄,你們均可以刪除和建立、拷貝文件,可是有一個基本的使用此目錄的規則,要創建一個說明文件 README ,這個文件不容許你們刪除和修改,則能夠以下設置:
chattr +i README
這時, README 文件所在目錄全部用戶都有讀寫權限,可是任何用戶都沒法刪除 README 文件(包括 root ),嘗試刪除會提示:
rm README
rm: remove write-protected regular empty file `README'? y
rm: cannot remove `README': Operation not permitted
一樣也不能夠改變文件的內容,能夠查看到 README 文件被增長了一個不可更改的屬性:
lsattr README
----i-------- README
此時, README 變成了一個很是牛 XX 的文件,即使你是 SuperUser 也沒法刪除和修改它,想對它幹嗎都不成。
若要更改或刪除文件也必須先去掉 i 屬性才能夠:
chattr -i README
 
案例二:備份目錄應用
 
假設有這樣一種應用,咱們天天自動化實現把上海服務器的日誌經過 scp rsync 遠程備份到北京的備份服務器上,備份服務器的存儲目錄可設置爲只可建立文件而不可刪除。
chattr +a /backup/log
設置後,可在本機測試:
cp /var/log/messages /backup/log   # 能夠拷貝文件
rm /backup/log/messages   # 刪除文件則被禁止
rm: remove regular file `messages'? y
rm: cannot remove `messages': Operation not permitted
 
chattr 命令不宜對目錄 / /dev /tmp /var 等設置,嚴重者甚至容易致使系統沒法啓動,好比根目錄若是設置了 i 屬性,謹慎設置,看過此文試驗後形成系統問題者,筆者概不負責……
 
權限之 ACL
 
Linux 中默認的權限管理比較菜,難以實現複雜的權限控制,如針對一個文件設置幾個用戶或用戶組具備不一樣權限,這就須要依靠 ACL Access Control List )訪問控制列表實現,能夠針對任意指定的用戶 / 用戶組分配權限。
開啓分區的 ACL 功能 ,須要在 /etc/fstab 文件中加入 acl 選項,如:
LABEL=/backup            /backup          ext3        defaults,acl            1 2
而後從新加載分區便可生效:
mount -o remount /backup
若是想臨時生效可不修改 /etc/fstab 文件,直接執行命令「 mount -o remount,acl /backup 」便可。
 
案例:設定複雜權限控制目錄
 
設定目錄 /backup/log 用戶 zhangsan 有讀寫執行權限,用戶 lisi 有讀權限,用戶 wangwu 有讀寫權限,而用戶組 bakgroup 有讀和執行權限,則可作以下設置:
setfacl -m u:zhangsan:rwx,u:lisi:r,u:wangwu:rw,g:bakgroup:rx /backup/log
setfacl -m 能夠設置文件 / 目錄的訪問權限,至於權限設定的寫法包括三個組成部分,第一部分列出設定對象是用戶 u 或用戶組 g ;第二部分指定用戶名或用戶組名;第三部分指定訪問權限 rwx ,設定多組權限中間用逗號分隔。如「 u:lisi:r 」表示設定用戶 lisi 爲只讀權限。
查看目錄屬性:
ls -ld /backup/log
drwxrwxr-x+ 2 root root 4096 May 25 07:16 /backup/log
會發現文件權限位後增長了一個加號,這說明 /backup/log 設置了 ACL ,同時能夠查看其詳細的權限設置:
getfacl /backup/log
# file: backup/log
# owner: root
# group: root
user::rwx
user:zhangsan:rwx
user:lisi:r--
user:wangwu:rw-
group::r-x
group:bakgroup:r-x
mask::rwx
other::r-x
這樣便可實現 Linux 中文件 / 目錄的複雜權限控制,要注意的是 ACL 優先於基本權限設置,也就是說若是默認所屬組爲 rx 權限,可是 ACL 若指定了所屬組中某個成員爲 rwx 權限,則此成員擁有 rwx 權限。
 
權限之管理員受權
 
管理員作爲特權用戶,很容易誤操做形成沒必要要的損失,再者都是 root 管理也怪累的,管理員也是人,也須要留點時間去約約會看看電影裝裝傻發發呆啥的不是……因此健康的管理方法是 Linux 服務架構好後,可受權普通用戶協助完成平常管理,如今最流行的工具是 Sudo ,幾乎全部 Linux 都已缺省安裝。
Sudo 使用簡單,管理員 root 使用 visudo 命令便可編輯其配置文件 /etc/sudoers 進行受權,具體格式爲:
用戶名 / 用戶組名          主機地址 = 受權命令(絕對路徑)
如,受權用戶 zhaoliu 能夠關機和重啓,則添加以下行:
zhaoliu           Helen=/sbin/shutdown,/sbin/reboot
指定組名用百分號標記,如 %admgroup ,多個受權命令之間用逗號分隔。
用戶 zhaoliu 可使用 sudo 查看受權的命令列表:
sudo -l
Password:
User zhaoliu may run the following commands on this host:
    (root) /sbin/shutdown
    (root) /sbin/reboot
提示輸入密碼爲 zhaoliu 的密碼,驗證其是否爲管理員經過 sudo 受權的用戶,執行命令:
sudo /sbin/shutdown -h now
zhaoliu 便可關機,注意命令寫絕對路徑,或者把 /sbin 路徑導入到用戶缺省路徑中,不然沒法執行。
 
案例:受權用戶管理Apache
 
    受權一個用戶管理你的 Web 服務器,不用本身插手是否是很爽,之後修改設置更新網頁什麼都不用管,必定 Happy 死了, LOOK ——
首先要分析受權用戶管理 Apache 至少要實現哪些基本受權:
1 、可使用 Apache 管理腳本
2 、能夠修改 Apache 配置文件
3 、能夠更新網頁內容
假設 Aapche 管理腳本爲 /etc/rc.d/init.d/httpd ,知足條件一,用 visudo 進行受權:
zhaoliu           Helen=/etc/rc.d/init.d/httpd reload,/etc/rc.d/init.d/httpd configtest
受權用戶 zhaoliu 能夠經過 Apache 管理腳本從新讀取配置文件讓更改的設置生效( reload )和能夠檢測 Apache 配置文件語法錯誤( configtest ),但不容許其執行關閉( stop )、重啓( restart )等操做。
知足條件二,一樣使用 visudo 受權:
zhaoliu           Helen=/bin/vi /etc/httpd/conf/httpd.conf
受權用戶能夠 root 身份使用 vi 編輯 Apache 配置文件。
以上兩種 sudo 的設置,要特別注意,不少朋友使用 sudo 會犯兩個錯誤:第一,受權命令沒有細化到選項和參數;第二,認爲只能受權管理員執行的命令。
條件三則比較簡單,假設網頁存放目錄爲 /var/www/html ,則只須要受權 zhaoliu 對此目錄具備寫權限或者索性更改目錄全部者爲 zhaoliu 便可,若是須要還能夠設置 zhaoliu 能夠經過 FTP 等文件共享服務更新網頁。
 
至此,本系列權限管理文章基本涵蓋 Linux 的全部權限管理方式,雖不細緻但足以讓讀者對其有一個總體的瞭解。最後請切記系統安全的基本原則:受權用戶最小的權限。
蜘蛛俠說「能力越大責任越大」, Linux 管理員說「能力越大出錯概率越大」,阿門。
相關文章
相關標籤/搜索