參考:
http://blog.chinaunix.net/uid-25314474-id-3313109.html
—————————————權限—————————————————-
r——4 \
w—–2 > umask —-root的系統umask:022 , 普通用戶:umask:002
x—– 1 /
修改系統默認的umask: /etc/login.defs
421 421 421
系統默認目錄到權限為:rwx rwx rwx ———————————————————目錄
系統默認文件到權限為:rw- rw- rw- —————————————-文件
root :— -w- -w- ===Umask遮蓋后的權限===:rwx r– r– rwx r-x r-x
普通用戶 :— — -w- ===Umsak遮蓋后的權限=== : rw- rw- r– rwx rwx r-x
suid———-4
sgid———-2
sticky——–1
————————————————————————————————
高級權限—-SUID,SGID 和 Sticky
SUID,SGID和Sticky僅適合文件和目錄:
因為SUID和SGID是在執行程序(程序的可執行位被設置)時起作用,而可執行位只對普通文件和目錄文件有意義,
所以設置其他種類文件的SUID和SGID位是沒有多大意義了。
為何需要SUID和SGID權限?
最典型的一個問題就是普通用戶該密碼,因為改密碼需要修改shadow文件,而shadow文件只有root可修改,
因此AT&T就開發了SUID/SGID來解決此問題;通過給passwd加SUID權限,就實現了普通用戶也可以修改自己的密碼了。
SUID和SGID是如何解決這個問題呢?
首先,我們要知道一點:進程在運行的時候,有一些屬性,其中包括 實際用戶ID,實際組ID,有效用戶ID,有效組ID等。
實際用戶ID和實際組ID標識我們是誰,誰在運行這個程序,一般這兩個字段在登陸時決定,在一個登陸會話期間,
這些值基本上不改變。而有效用戶ID和有效組ID則決定了進程在運行時訪問系統資源的權限。
內核在決定進程是否有文件存取權限時,是采用了進程的有效用戶ID來進行判斷的。
1.suid
作用:任何用戶在執行擁有suid權限的命令時,都以該命令擁有者的身份執行
僅適合作用與文件,目錄也可添加SUID,但不起任何作用。
shell腳本不適合加SUID權限。最好是二進制可執行文件,如:passwd
注:若二進制文件沒有執行權限,添加了SUID,也不能使其他人執行時獲得擁有者的權限。
chmod u+s 命令
驗證方法:
useradd test1 mkdir /tmp/abc; chmod 4777 /tmp/abc echo -e '#!/bin/bash\ntouch /abc.txt' > /tmp/abc/a.sh; chmod 4755 /tmp/abc/a.sh su - test1 //加“-” 是因為需要在切換到test1時,使用test1的全局環境設置。 cd /tmp/abc mkdir test1 //查看權限并沒有繼承任何特殊權限。 /tmp/abc/a.sh //執行shell腳本,報權限不足。
2.sgid
作用:任何用戶在擁有sgid權限的目錄中,創建文件或目錄都要強制繼承該目錄的所屬組。
注: 對于可執行文件:SGID可讓執行該文件的用戶臨時擁有該文件組的權限。
但是,若所屬組沒有執行權限,other有執行權限,則即便加了SGID的權限,
也無法讓其他用戶臨時擁有該文件組的權限。
對于目錄:SGID可讓目錄下的所有子目錄和文件的所屬組都強制改為該目錄的所屬組。
即便, SGID位為 大S (即:目錄組沒有執行權限),它依然后繼續影響其下的
子目錄和文件的所屬組。
驗證方法:
目錄:
useradd test1 mkdir /tmp/abc; chmod 2777 /tmp/abc su - test1 cd /tmp/abc; touch test1.txt mkdir test1 //查看權限,繼承了父目錄去的SGID權限。 su - root chmod g-x /tmp/abc su - test1 cd /tmp/abc; touch test2.txt mkdir test2 //查看權限,依然繼承了父目錄的SGID權限。
二進制可執行文件:
su - test1 cd /tmp; cp /bin/cat . ; chmod g+s ./cat echo "This is a test" > test1.txt su - test2 cd /tmp /bin/cat test1.txt //報權限不足 /tmp/cat test1.txt //成功查看test1.txt su - test1 chmod g-x /tmp/cat su - test2 /tmp/cat test1.txt //報權限不足。
普通文件的SUID和SGID的作用:
對于上例中,cat命令是任何普通用戶都可以執行的命令,它默認是沒有SUID位的,那UNIX的內核是根據什么來
確定一個進程對資源的訪問權限的呢?對,是這個進程的運行用戶的(有效)ID,包括 UID 和 GID。
用戶可以用id命令來查到自己的或其他用戶的user id和group id。
一個進程如果沒有SUID或SGID位,則euid=uid egid=gid,分別是運行這個程序的用戶的uid和gid。
例:【如上測試的例子】
-rwxr-xr-x 1 root root 25216 Jul 13 2009 /bin/cat test1: UID=500 GID=600 test2: UID=501 GID=601
test2 運行/bin/cat /tmp/test1.txt 時, euid=uid=501, egid=uid=601;
內核根據這些值來判斷進程對資源訪問的限制,雖然/bin/cat的屬主和屬組是root,
但實際運行/bin/cat的用戶是test2,與root用戶沒有一點關系.因此test2查看test1
的私有文件test1.txt時就失敗了。
若一個若程序設置了SUID或SGID,則euid和egid將變成被運行程序的所有者的uid和gid
例:
-rwxr-sr-x 1 test1 test1 25216 Jul 13 2009 /tmp/cat
test2 運行 /tmp/cat /tmp/test1.txt 時, euid=500, egid=600, 而 uid=501, gid=601
因此,test2 就成功的讀出了test1的私有文件test1.txt的文件內容。
3.sticky (t) 粘貼位 冒險位
作用:任何用戶在擁有t權限的目錄下創建的文件,只能自己,目錄所有者和root能刪除外,其他人無權刪除
僅適合作用于目錄,文件也可添加但不會有任何作用。
chmod o+t dir/
驗證方法:
useradd test1 useradd test2 useradd abc mkdir /test ; chmod 777 /test su - abc cd /test ; mkdir abcdir chmod 7777 abcdir //給目錄abcdir添加SUID,SGID,sticky權限。 su - test1 cd /test/abcdir; touch test1.txt; mkdir test1; chmod 777 test* su - test2 cd /test/abcdir; rm -rf test* //將失敗。 su - abc cd /test/abcdir; rm -rf test* //成功。
基礎命令
$ chmod [-cvRf] 模式[,模式]... 文件... # 更改文件的權限 # -c 同-v,但只在有更改時才顯示結果 # -f 去除大部份的錯誤信息 # -R 遞歸操作 # -v 為處理的所有文件顯示診斷信息 # --reference=參考文件 使用指定參考文件的模式,而非自行指定權限模式 # --no-preserve-root 不特殊對待根目錄(默認) # --preserve-root 禁止對根目錄進行遞歸操作 每種 MODE 都應屬于這類形式"[ugoa]*([-+=]([rwxXst]*|[ugo]))+"。
$ chown [-cvRfh] --reference=RFILE|[OWNER][:[GROUP]] file... # 改變文件所有者和所屬組 # -c 同-v,但只在有更改時才顯示結果 # -v 為處理的所有文件顯示診斷信息 # -f 去除大部份的錯誤信息 # -R 遞歸操作 # -h 改變符號鏈接本身而不是其所指向文件的屬性。 # --dereference 改變符號鏈接所指向的文件,而不是符號鏈接本身。 # --from=CURRENT_OWNER:CURRENT_GROUP 只有當文件屬性和該模式匹配,才修改文件屬性。 # --no-preserve-root 不特殊對待根目錄(默認) # --preserve-root 禁止對根目錄進行遞歸操作 # --reference=參考文件 使用參考文件的屬性,而不用指定參數來設置。
$ chgrp [選項]... 用戶組 文件... # --reference 則將每個文件的所屬組設置為與指定參考文件相同。 # --dereference 影響符號鏈接所指示的對象,而非符號鏈接本身(默認值) # -h 會影響符號鏈接本身,而非符號鏈接所指示的目的地 # --no-preserve-root 不特殊對待"/"(默認值) # --preserve-root 不允許在"/"上遞歸操作 # --reference=RFILE 使用參考文件的所屬組,而非指定值 # -f 去除大部份錯誤信息 # -R 遞歸處理所有的文件及子目錄 # -v 為處理的所有文件顯示診斷信息 # -c 類似 -v,但只在有更改時才顯示結果 以下選項是在指定了 -R 選項時被用于設置如何穿越目錄結構體系。 如果您指定了多于一個選項,那么只有最后一個會生效。 -H 如果命令行參數是一個通到目錄的符號鏈接,則遍歷符號鏈接 -L 遍歷每一個遇到的通到目錄的符號鏈接 -P 不遍歷任何符號鏈接(默認)
文件訪問的其他權限
隱藏權限
chattr 和 lsattr chattr [-|+|=] Following Options a:只能增加數據,不能刪除數據,不能移動文件; i:不能被刪除/改名/設置鏈接/不可新增和寫入。 u:刪除時不實際刪除; s:刪除文件時,徹底刪除。 d:當執行dump(備份)程序時,設置d屬性可使該文件(或目錄)具有轉儲功能。 A:禁止修改AccessTime屬性; S:寫入時直接sync到磁盤;
ACL
facl(文件訪問控制列表)
使用ACL的前提: 1. mount -----> 先查看分區是否支持ACL, 默認 根分區 是支持 ACL的。 例:mount -o remount,acl /dev/sda2 //若不支持ACL,則可重新掛載/dev/sda2的分區,并讓其支持ACL 2. getfacl 和 setfacl 格式:setfacl [-mxbd] { [u | g | m]:[user | group | umask ] :[rwx] } 查看: getfacl aa.txt //查詢文件訪問控制列表內容 設置: setfacl -m u:robin:rw aa.txt //設置用戶訪問控制 u:針對用戶設置:[ u :用戶列表:rwx] setfacl -m g:looking:rw aa.txt //設置組的訪問控制 g: 針對群組設置:[ g :群組名: rwx] setfacl -m o:rwx aa.txt //設置其他人 setfacl -m m:r aa.txt //設置掩碼值,任何人權限不可超過掩碼值 m : 針對默認權限設置:[ m :rwx] 刪除: setfacl -x u:robin aa.txt setfacl -x g:looking aa.txt 移除所有訪問控制設置 setfacl -b aa.txt 設置遞歸繼承robin用戶權限,這個用戶所建立目錄和文件會繼承robin設置的默認權限 setfacl -m d:u:robin:rwx test/ setfacl -m d:g:looking:rwx test/ setfacl -m d:o:rwx test/
原創文章,作者:Wn1m,如若轉載,請注明出處:http://www.www58058.com/8110
文章伊始以為是亂碼呢