Linux是多用戶多任務的操作系統,了解掌握Linux的權限分配機制,也是管理Linux系統安全的基礎之一。
文件目錄的權限格式如下:
1.其中權限位可以看對象到是一個9個占位符,其實分為三位一組:
(1) 第一組:對應的是文件或目錄的所有者屬主權限。owner
(2) 第二組:對應的是文件或目錄的所屬組權限。group
(3) 第三組:對應的是文件或目錄的其他用戶權限。other
2.相應的權限意義如下:
r:讀
w:寫
x;執行
-:無任權限
*注意:權限對文件和目錄意義是有區別的,下面詳細介紹:
3.rwx對文件的意義:
r:可以查閱文件的內容,比如cat命令。
w:可以修改,增加文件內容。注意:對文件的刪除操作要看上級目錄對應的權限,俗話說的打狗看主人。
x:可以把文件提交給內核執行,這樣文件就具有了執行權限。
4.rwx對目錄的意義:
r:可以瀏覽目錄里的文件名。前提是必須有x權限。
w:可以刪除目錄里的文件或者重命名。
x:可以進入目錄,使用cd命令
5.注意總結點:
目錄一般必要具有x權限,否則后續相應權限意義不大,文件一般不能隨便有執行權限,一個惡意的文件對于Linux的系統安全將無從保證。
6.對文件或目錄的用戶和組授權的方式:可以分為兩種,一種是用數字授權,一種是用字符或字符組合授權,下面分別說明:
(1)數字利用的是八進制權限對應表,如下:
— 000 0
–x 001 1
-w- 010 2
-wx 011 3
r– 100 4
r-x 101 5
rw- 110 6
rwx 111 7
這樣每組的權限對應可以用三個八進制數表示:xxx=(000-777)
命令:chmod
語法格式:
chmod [options] xxx FILE
chmod –reference=RFILE FILE :可以參考已有權限文件的權限授權。
常用選項optons
-R:可以對目錄進行遞歸授權
注意:這樣授權成功會覆蓋先前已有的權限。
(2)字符授權有三種方式:
+:追加權限
-:清除權限
=:附加權限,這樣會覆蓋已有的權限。
以上還可可以組合使用
對象分為以下四種:
a:屬主
g:屬組
o:其他用戶
a:所有用戶=ago以上所有用戶
舉例格式:
chmod o+x,g=r,u-w FILE
chmod a=rwX FILE
大X遞歸授權時,會給目錄相應權限,文件跳過,
7.更改文件的屬主屬組命令:
(1)chown
語法格式:
chown [OPTION]… [OWNER][:[GROUP]] FILE…
chown [OPTION]… –reference=RFILE FILE…
常用選項:
-R:遞歸更改文件或目錄屬主屬組
“:”“.”是屬主和屬組的分割符
可以只更改屬主:
chown owner FILE
也看可以只更改屬組:
chown :group 前面用“.”“:”都可以
(2)chgrp命名只支持更改屬組
語法格式
chgrp [OPTION]… GROUP FILE…
chgrp [OPTION]… –reference=RFILE FILE..
常用選項:
-R:遞歸更改目錄屬組
8.umask:對于新創建的文件和目錄系統會有一個默認權限位,前面我們知道,目錄一般必要有執行權限,文件一般不能有執行權限,所以在授權時目錄默認為777,文件默認為666,但是這樣的權限位在系統安全中很不安全,為了區分用戶權限,必須對相應的權限做出默認限制,這里就需要用到umask遮罩碼,目錄umask-777,文件umask-666,這樣我們發現超級管理員創建的文件和目錄跟普通用戶創建默認的授權時不同的,為了保證文件不能有執行權限x,數字授權時正常使用umask,文件授權需要遵循有奇數加1,偶數保留。
命令:umask
直接使用umask 可以查看當前用戶的遮罩碼值
注意:umask=vale命令設置,只對當前shell環境生效,如何想一直有效,可以在全局/etc/bashrc 或者~/.bashrc 里設置。
9.suid sgid sticky:
分析進程安全上下文:用戶要想操作命令發起進程,首先這個二進制程序命令文件必須有執行權限,進程是以某用戶身份運行的,也就是說進程是發起此進程用戶的代理,相應的進程的權限也是進程發起者用戶的權限,這時候就以此用戶的身份和權限完成所有操作,過程如下:
1.如果被訪問的文件屬主跟進程的屬主一樣,就應用被訪問文件屬主的權限,如果不是進入下一步;
2.如果被訪問的文件屬組跟進程的屬組一樣,就應用被訪問文件屬組的權限,如果不是進入下一步;
3.這是應用被訪問文件other其他用戶的權限。
suid:普通用戶可以更改自己的密碼,但是密碼文件/etc/shadow沒有任何權限,根據安全上下文,用戶執行passwd命令時使用的權限應該是當前用戶,當前用戶對命令passwd命令只能應用other其他用戶權限,其他權限位沒有寫權限,是不能修改/etc/shadow,但是查看ls /usr/bin/passwd是發現屬主多了一個權限位小s,這個小s就是suid,這時應用的安全上下文不在是以進程發起者的身份,而是使用/usr/bin/passwd屬主的權限,程序文件自身的屬主權限。使用ps aux命令也可以看到進程的屬主是root.
總結:運行某程序時,相應進程的屬主是程序文件自身的屬主,而不是啟動者;
2.sgid權限模型應用原理跟suid一樣,程序發起者臨時變更屬組,當目錄屬組有寫權限是,屬于目錄屬組的用戶都可以創建文件,并且文件的屬主屬組都是用戶本身,這樣同屬于一個目錄屬組的用戶,也沒有辦法互相操作文件。但是當給目錄屬組授權sgid時,用戶創建的文件不在是自身的屬組,這樣用戶可以互相操作文件。
總結:運行某程序時,相應進程的屬組是程序文件自身的屬組,而不是啟動者所屬的基本組;
3.sticky:在系統中有這樣一個目錄/tmp,用戶可以創建修改刪除自己的文件,可以查看別人的文件,但是不能刪除修改別人的文件。我們查看ll -d /tmp發現目錄的權限是rwxrwxrwxt,發現多了一個t,這就是這個特殊權限位t的作用。
總結:在一個公共目錄,每個都可以創建文件,刪除自己的文件,但不能刪除別人的文件;
4.特殊權限管理;
授權suid方式:
chmod u+s, FILE
chmod g+s FILE
chmod o+t FILE
取消授權
chmod g-s FILE
chmod o-t FILE
chmod u-s FILE
這里的三個特殊權限有可以組成一組3位八進制,分別:sui=4 sgid=2 sticky=7 suid+sgid=6 .
這樣組合加起來就是umask完整的權限四位8進制表示。
注意:如果原文件有執行權限x,就變更為小s。如果原文件沒有執行權限x,這里顯示變更為大S,說明有問題,文件沒有執行權限,變更也無意義。屬組大S和other大T跟前面屬主大S意義一樣,沒有意義。
這里suid只對二進制可執行程序有效。目錄無意義。
10.文件特定屬性,對有些文件需要特殊控制保護,可以使用chattr命令
chattr
語法格式:
chattr [options] FILE
常用選項:
i:鎖定文件,任何用戶都不能改名修改刪除文件。
a:對文件有相應權限的用戶,只能追加文件內容,
A:鎖定文件的訪問時間,用戶訪問了文件,相應的時間戳也不會改變。
授權用+,取消用-
使用lsattr命令查看chattr特定文件權限屬性。
10FACL:
facl利用的是文件系統額外的擴展屬性,一般的Linux的文件系統基本都支持acl。
1.分析這樣一個場景,我們要想對一個共享資源,分別指定不同用戶的權限,我們只能對共享資源授權其他用戶other,很難再給每個用戶單獨授以不同權限。無法滿足需求。d當然了大家這時回想怎么不用suid和sgid,要知道種方式對于系統來說是很危險的。這時就需要借助額外的權限控制,Linux里就引入了facl解決這種問題。
facl作用:
除了文件的所有者,所屬組和其它人,可以對更多的用戶設置權限
fACL生效順序:owner——>facl中授權的用戶user——>group——>facl中授權的group組——>other
設定FACL:
命令:setfacl
語法格式
setfacl [options] [user:perm|group:perm] FILE
常用選項:
-m:授權
u:指定用戶
g:指定組
perm:相應rwx權限。
-x:取消權限
u:直接指定用戶就可以
g:直接指定組就可以。
-d:設置默認權限位
-k:刪除默認FACL
-b:清空所有FACL
查看FACL
getfacl
語法格式
getfacl FILE
facl中的mask是默認權限高壓線,如何應用了mask,用戶在設置權限時,有超過mask權限就會減掉,沒有不管。
注意:設置的默認權限有X,文件也不會基礎x權限,這里出于Linux系統安全考慮。
原創文章,作者:xiashixiang,如若轉載,請注明出處:http://www.www58058.com/29796
文章整體結構清晰,可是嘗試著將自己對特殊權限應用場景模擬的操作寫在里面,這樣以后復習起來也會直觀明了。