linux中的賬號管理我們在前面兩張已經介紹了一些用戶和組的相關概念,常用的配置文件,命令的使用?,F在我們來看看賬號管理中最傲嬌的部分就是我們的權限管理。
一、簡單介紹權限的概念
以install.log這個文件為例,查看install.log的元數據,從下圖可以看出,每個文件或者目錄都有它的所屬的主和所屬組,最左邊顯示不僅有它所屬類型,還有它的讀取寫入執行的權限,為什么目錄或者文件要設置這些權限呢,這肯定是出于安全的考慮。如果linux系統中不設置這些權限,就容易被攻擊。
文件的權限主要針對三類對象進行定義:
owner:屬主,u
group:屬組,g
other:其他,o
每個文件針對每類訪問者都定義了三種權限:
r: Readable,讀
w: Writable,寫
x: eXcutable,執行
二、三種權限對文件和目錄的影響
對文件的影響:
r: 可使用文件查看類工具獲取其內容
w: 可修改其內容,不能刪除文件本身
x: 可以把此文件提請內核啟動為一個進程(針對二進制程序或腳本,普通文件不需要添加此權限)
X:也是執行的權限,但是在文件中有兩種情況出現
a) 文件的權限中有執行權限,全部添加執行權限
b) 文件的權限中沒有執行權限,就不加執行權限
例如:
雖然/bin/cat沒有執行權限,但是有讀取的權限,可以使用其他查看工具來查看,此文件為二進制文件
查看/bin/cat文件,可以看出這個文件對普通權限只有讀的操作
切換到clq這個用戶
用cat這個工具不能查看文件內容,因為沒有寫入執行的權限,使用echo重定向輸入會報錯
cat命令為二進制文件,使用其他工具可以查看cat文件
對目錄的影響:
r: 可以使用ls查看此目錄中文件列表(可以查看目錄內文件列表,但不能訪問文件,不能cd,也不能查看文件的元數據)
w: 可在此目錄中創建文件,也可刪除此目錄中的文件但是要配合執行權限
x: 可以使用ls -l查看此目錄中文件列表,可以cd進入此目錄
X:加上此權限相對與將這三類對象全部加上執行的權限了
例如:
1、因為test相對于f1這個文件他只是個other組,other組的權限只有讀取,沒有寫入執行等操作
2、當我把f1的文件屬主改為test用戶的時候,test擁有rw權限
3、文件對用戶只有執行操作,用戶可以執行這條命令,但是不能讀取
三、修改文件的屬主和屬組chown,chgrp
chown命令:
chown命令改變某個文件或目錄的所有者和所屬的組,該命令可以向某個用戶授權,使該用戶變成指定文件的所有者或者改變文件所屬的組。用戶可以是用戶或者是用戶id,用戶組可以是組名或組id。文件名可以使由空格分開的文件列表,在文件名中可以包含通配符.
格式:chown[OPTION]… [OWNER][:[GROUP]] FILE…
用法:
OWNER 改變用戶的屬主
OWNER:GROUP 改變用戶的屬主屬組
:GROUP 改變用戶的屬組
命令中的冒號可用.替換;
選項:
-c或--changes:效果類似“-v”參數,但僅回報更改的部分; -f或--quite或--silent:不顯示錯誤信息; -h或--no-dereference:只對符號連接的文件作修改,而不更改其他任何相關文件; -R或--recursive:遞歸處理,將指定目錄下的所有文件及子目錄一并處理; -v或--version:顯示指令執行過程; --dereference:效果和“-h”參數相同; --help:在線幫助; --version:顯示版本信息。 --reference=<參考文件或目錄>:把指定文件或目錄的擁有者與所屬群組全部設成和參考文件或目錄的擁有者與所屬群組相同;
chgrp修改屬組的命令:
格式:chgrp[OPTION]… GROUP FILE…
常用選項:
chgrp[OPTION]... --reference=RFILE FILE... -R 遞歸
四、修改文件的屬
chmod命令用來變更文件或目錄的權限。在UNIX系統家族里,文件或目錄權限的控制分別以讀取、寫入、執行3種一般權限來區分,另有3種特殊權限可供運用。用戶可以使用chmod指令去變更文件與目錄的權限,設置方式采用文字或數字代號皆可。符號連接的權限無法變更,如果用戶對符號連接修改權限,其改變會作用在被連接的原始文件
權限范圍的表示法如下: u User,即文件或目錄的擁有者; g Group,即文件或目錄的所屬群組; o Other,除了文件或目錄擁有者或所屬群組之外,其他用戶皆屬于這個范圍; a All,即全部的用戶,包含擁有者,所屬群組以及其他用戶; r 讀取權限,數字代號為 “4”; w 寫入權限,數字代號為 “2”; x 執行或切換權限,數字代號為 “1”; - 不具任何權限,數字代號為 “0”; s 特殊功能說明:變更文件或目錄的權限
例如:
可以直接用數字表示權限,用法比較簡單,不加以舉例 rw-r-----:640 rwxr-xr-x: 755
1、給f1文件的主加上執行權限,組和其他用戶加上寫權限
2、取消這些權限使用減號
3、u=空格,把所有權限都取消了
五、新建文件和目錄的默認權限
umask值可以用來保留在創建文件權限
新建FILE權限: 666-umask
如果所得結果某位存在執行(奇數)權限,則將其權限+1
新建DIR權限: 777-umask
非特權用戶umask是002
root的umask是022
用法: umask: 查看 umask#: 設定 umask002 umask–S 模式方式顯示 umask–p 輸出可被調用
全局設置:/etc/bashrc用戶設置:~/.bashrc
六、Linux文件上的特殊權限
三種特殊權限為:SUID, SGID, Sticky
三種常用權限:r, w, x user, group, other
使用這三種權限的前提:進程有屬主和屬組;文件有屬主和屬組
(1) 任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有執行權限
(2) 啟動為進程之后,其進程的屬主為發起者;進程的屬組為發起者所屬的組
例如:
cat命令查看/etc/shadow是由wang這個發起者決定的,不是root這個所有者決定,wang用戶繼承的是other的權限
(3) 進程訪問文件時的權限,取決于進程的發起者
(a) 進程的發起者,同文件的屬主:則應用文件屬主權限
(b) 進程的發起者,屬于文件屬組;則應用文件屬組權限
(c) 應用文件“其它”權限
可執行文件上行SUID權限
為什么/etc/shadow文件設置嚴格,但是普通用戶還是可以修改密碼呢,這是因為在passwd上面設置了一個SUID權限;SUID:當用戶去運行passwd的時候,他將繼承該程序所有者root的權限
任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有執行權限
啟動為進程之后,其進程的屬主為原程序文件的屬主
SUID只對二進制可執行程序有效
SUID設置在目錄上無意義
權限設定:
chmod u+s FILE…
chmod u-s FILE…
GUID權限
對可執行文件而言:
任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有執行權限
啟動為進程之后,其進程的屬主為原程序文件的屬組
權限設定:
chmod g+s FILE…
chmod g-s FILE…
對目錄而言:
默認情況下,用戶創建文件時,其屬組為此用戶所屬的主組
一旦某目錄被設定了SGID,則對此目錄有寫權限的用戶在此目錄中創建的文件所屬的組為此目錄的屬組
通常用于創建一個協作目錄
權限設定:
chmodg+sDIR…
chmodg-s DIR…
Sticky位
具有寫權限的目錄通常用戶可以刪除該目錄中的任何文件,無論該文件的權限或擁有權
在目錄設置Sticky 位,只有文件的所有者或root可以刪除該文件
sticky 設置在文件上無意義
普通用戶wang不僅可以對自己的文件進行刪除操作,對其他用戶的文件也可以刪除,這樣會帶來安全隱患
現在在目錄那里加上粘滯位之后,就不能刪除其他用戶的權限了
權限設定:
chmodo+tDIR…
chmodo-t DIR…
例如:
ls-ld/tmpdrwxrwxrwt12rootroot4096Nov215:44/tmp
權限位映射
SUID: user,占據屬主的執行權限位
s: 屬主擁有x權限
S:屬主沒有x權限
SGID: group,占據屬組的執行權限位
s: group擁有x權限
S:group沒有x權限
Sticky: other,占據other的執行權限位
t: other擁有x權限
T:other沒有x權限
數字表示:u:4;g:2;o:1
chmod 4777 /tmp/a.txt (繼承所有者權限)
chmod 2777 /tmp/a.txt (繼承所屬組權限)
七、chattr,lasttr設置文件特定屬性
chattr +i 不能刪除,改名,更改
chattr +i /etc/fstab
然后試一下rm、mv、rename等命令操作于該文件,都是得到Operation not permitted的結果
chattr +a 只能增加
chattr +a /test/yuan
chattr +A,訪問時間的屬性被鎖定不做修改,解鎖:-A
lsattr 顯示特定屬性
用于查看文件的第二擴展文件系統屬性
顯示一個i,說明被鎖定了,把i去掉就可以執行一些操作了
八、訪問控制列表
概念:
ACL:Access Control List,實現靈活的權限管理
除了文件的所有者,所屬組和其它人,可以對更多的用戶設置權限
CentOS7.0默認創建的xfs和ext4文件系統有ACL功能。
CentOS7.X之前版本,默認手工創建的ext4文件系統無ACL功能。需手動增加:
tune2fs –o acl/dev/sdb1
mount –o acl/dev/sdb1 /mnt
ACL生效順序:所有者,自定義用戶,自定義組,其他人
為多用戶或者組的文件和目錄賦予訪問權限rwx
選項:
mount -o acl /directory 臨時開啟分區acl權限
getfacl file |directory 查看acl權限
setfacl -m u:wang:rwx file|directory 這個目錄對wang用戶設置了rwx權限
setfacl -Rm g:sales:rwX directory setfacl-R:遞歸設定acl權限
遞歸權限和默認權限都是針對目錄而言的,不能給文件設置。
setfacl -M file.acl file|directory
如果經常要對某些用戶設置一樣的權限就可以使用-M
例如;
vim acl.txt
如果另外一個文件對這些用戶也做同樣的設置
setfacl -m g:salesgroup:rw file| directory 對組設置權限
setfacl -x u:wang file |directory 刪除設置的acl權限
例如:
刪除wangcai對f1 acl設置的權限
setfacl -X file.acl directory 對某些用戶做刪除
例如:
vim acl12.tt
setfacl -m d:u:wang:rx directory 設定默認acl權限
對新建文件默認不能帶x權限,目錄是可以加的
setfacl-k dir 刪除默認ACL權限
setfacl-b file1清除所有ACL權限
getfacl file1 | setfacl–set-file=-file2 復制file1的acl權限給file2
最大有效權限與刪除
mask只影響除所有者和other的之外的人和組的最大權限
mask需要與用戶的權限進行邏輯與運算后,才能變成有限的權限(Effective Permission)
用戶或組的設置必須存在于mask權限設定范圍內才會生效。setfacl-m mask::rxfile
?–set選項會把原有的ACL項都刪除,用新的替代,需要注意的是一定要包含UGO的設置,不能象-m一樣只是添加ACL就可以.如:
?setfacl –set u::rw,u:wang:rw,g::r,o::-file1
恢復和備份acl
主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 參數。但是tar等常見的備份工具是不會保留目錄和文件的ACL信息
#getfacl -R /tmp/dir1 > acl.txt
#setfacl -R -b /tmp/dir1
#setfacl -R –set-file=acl.txt /tmp/dir1
#getfacl -R /tmp/dir1
九、練習
1、在/data/testdir里創建的新文件自動屬于g1組,組g2的成員如:alice能對這些新文件有讀寫權限,組g3的成員如:tom只能對新文件有讀權限,其它用戶(不屬于g1,g2,g3)不能訪問這個文件夾
2、設置/test/f1的權限,使user1用戶不可以讀寫執行,g1組可以讀寫 /test/dir的權限,使新建文件自動具有acl權限:user1:rw,g1:—;備份/test目錄中所有文件的ACL,清除/test的所有ACL權限,并利用備份還原
原創文章,作者:xiaoqing,如若轉載,請注明出處:http://www.www58058.com/30661