權限管理
在linux中的每一個文件或目錄都包含有訪問權限,這些訪問權限決定了誰能訪問和如何訪問這些文件和目錄。
我們先來看看文件的屬性:
權限:
r:可獲取文件數據(讀取文件)
w:可修改文件的數據(寫入數據)
x:可以把此文件提請內核啟動為一個進程 (執行)
文件的權限主要針對三類對象進行定義:
owner: 屬主, u
group: 屬組, g
other: 其他, o
通過設定權限可以從以下三種訪問方式限制訪問權限:
只允許用戶自己訪問;
允許一個預先指定的用戶組中的用戶訪問;
允許系統中的任何用戶訪問。
一個文件或目錄可能有讀、寫及執行權限。當創建一個文件時,系統會自動地賦予文件所有者讀和寫的權限,這樣可以允許所有者能夠顯示文件內容和修改文件。文件所有者可以將這些權限改變為任何他想指定的權限。
三種不同的用戶類型能夠訪問一個目錄或者文件:所有者、用戶組或其他用戶。
所有者就是創建文件的用戶,用戶是所有用戶所創建的文件的所有者,用戶可以允許所在的用戶組能訪問用戶的文件。
例如,某一類或某一項目中的所有用戶都能夠被系統管理員歸為一個用戶組,一個用戶能夠授予所在用戶組的其他成員的文件訪問權限。用戶也將自己的文件向系統內的所有用戶開放,在這種情況下,系統內的所有用戶都能夠訪問用戶的目錄或文件。
每一個用戶都有它自身的讀、寫和執行權限。
-rw-r--r--. 1 root root 103 Jul 25 09:47 /etc/issue
第一位-:表示文件類型
第二到第四位:屬主的權限
第五道第七位:屬組的權限
第八到第十位:系統里其他(other)用戶的權限
我們可以把它分成三組:第一組(第二到第四位),第二組(第五道第七位),第三組(第八到第十位)
權限對于文件:
第一組權限控制訪問自己的文件權限,即所有者權限。
第二組權限控制用戶組訪問其中一個用戶的文件的權限。
第三組權限控制其他所有用戶訪問一個用戶的文件的權限。
權限的表示法:
可以用字符表示,也可以用八進制數字表示
r:4 w:2 x: 1
rw: 6 rx: 5 wx:3
rwx:7 0:代表沒有權限
— 000 0 無權限 –x 001 1 執行 -w- 010 2 寫
-wx 011 3 寫和執行 r– 100 4 只讀 r-x 101 5 讀和執行
rw- 110 6 讀寫 rwx 111 7 讀寫執行
例如:640: rw-r—–
755:rwxr-xr-x
權限對于文件和目錄的意義:
讀 (r):Read 對文件而言,具有讀取文件內容的權限;對目錄來說,具有瀏覽該目錄信息的權限
寫 (w):Write 對文件而言,具有修改文件內容的權限;對目錄來說具有刪除移動目錄內文件的權限
執行(x):execute 對文件而言,具有執行文件的權限;對目錄來說,具有進入目錄的權限,可以使用ls -l查看此目錄中文件列表
“—”表示不具有該項權限
目錄 X:只給目錄x權限,不給文件x權限
權限管理相關的命令:
修改文件的屬主和屬組
修改文件的屬主:chown
chown [OPTION]… [OWNER][:[GROUP]] FILE…
用法:
OWNER
OWNER:GROUP
:GROUP
[root@localhost zzz]# ll total 0 -rw-r--r-- 1 root root 0 Aug 4 16:10 a -rw-r--r-- 1 user1 user1 0 Aug 4 16:13 abc 命令中的冒號可用.替換; -R: 遞歸 chown [OPTION]... --reference=RFILE FILE... [root@localhost zzz]# ll total 0 -rw-r--r-- 1 root root 0 Aug 4 16:10 a -rw-r--r-- 1 zzz zzz 0 Aug 4 16:13 abc [root@localhost zzz]# chown --reference=a abc [root@localhost zzz]# ll total 0 -rw-r--r-- 1 root root 0 Aug 4 16:10 a -rw-r--r-- 1 root root 0 Aug 4 16:13 abc
修改文件的屬組:chgrp
chgrp [OPTION]… GROUP FILE…
chgrp [OPTION]… –reference=RFILE FILE…
[root@localhost zzz]# ll total 0 -rw-r--r-- 1 root root 0 Aug 4 16:10 a -rw-r--r-- 1 root root 0 Aug 4 16:13 abc [root@localhost zzz]# chgrp zzz a [root@localhost zzz]# ll total 0 -rw-r--r-- 1 root zzz 0 Aug 4 16:10 a -rw-r--r-- 1 root root 0 Aug 4 16:13 abc [root@localhost zzz]# chgrp --reference=a abc [root@localhost zzz]# ll total 0 -rw-r--r-- 1 root zzz 0 Aug 4 16:10 a -rw-r--r-- 1 root zzz 0 Aug 4 16:13 abc
-R 遞歸
文件權限操作命令:chmod
chmod [OPTION]… OCTAL-MODE FILE…
-R: 遞歸修改權限
chmod [OPTION]… MODE[,MODE]… FILE…
MODE:
修改一類用戶的所有權限:
u= g= o=
a= (所有權限all)
ug=
u=,g=
[root@localhost zzz]# ll a -rw-r--r-- 1 root zzz 0 Aug 4 16:10 a [root@localhost zzz]# chmod u=rwx,g=rw,o=rw a [root@localhost zzz]# ll a -rwxrw-rw- 1 root zzz 0 Aug 4 16:10 a
修改一類用戶某位或某些位權限
u+ u- g+ g- o+ o- a+ a- +
[root@localhost zzz]# ll a -rwxrw-rw- 1 root zzz 0 Aug 4 16:10 a [root@localhost zzz]# chmod u-x,o-w a [root@localhost zzz]# ll a -rw-rw-r-- 1 root zzz 0 Aug 4 16:10 a
chmod [OPTION]… –reference=RFILE FILE…
參考RFILE文件的權限,將FILE的修改為同RFILE;
[root@localhost zzz]# ll total 0 -rw-rw-r-- 1 root user1 0 Aug 4 16:10 a -rw-r--r-- 1 root zzz 0 Aug 4 16:13 abc [root@localhost zzz]# chmod --reference=a abc [root@localhost zzz]# ll total 0 -rw-rw-r-- 1 root user1 0 Aug 4 16:10 a -rw-rw-r-- 1 root zzz 0 Aug 4 16:13 abc
新建文件和目錄的默認權限
umask值 可以用來保留在創建文件權限
新建FILE權限: 666-umask
如果所得結果某位存在執行(奇數)權限,則將其權限+1
新建DIR權限: 777-umask
非特權用戶umask是 002
root的umask 是 022
umask: 查看
[root@localhost zzz]# umask 0022
umask #: 設定 (設定支隊當前shell有效)
[root@localhost zzz]# umask 026 [root@localhost zzz]# umask 0026
umask –S 模式方式顯示
[root@localhost zzz]# umask -S u=rwx,g=rx,o=x
umask –p 輸出可被調用
全局設置: /etc/bashrc
用戶設置:~/.bashrc
Linux文件系統上的特殊權限:
SUID, SGID, Sticky
SUID 4
SGID 2
Sticky 1
安全上下文
前提:進程有屬主和屬組;文件有屬主和屬組
(1) 任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有執行權限
(2) 啟動為進程之后,其進程的屬主為發起者;進程的屬組為 發起者所屬的組
(3) 進程訪問文件時的權限,取決于進程的發起者
(a) 進程的發起者,同文件的屬主:則應用文件屬主權限
(b) 進程的發起者,屬于文件屬組;則應用文件屬組權限
(c) 應用文件“其它”權限
來看看他們的作用:
SUID:當用戶執行具有x權限的二進制文件時擁有此文件所有者的權限
SGID:當用戶執行具有x權限的二進制文件時擁有此文件所在組的權限,另外也可以對目錄設置此權限
Sticky:當用戶對某個目錄具有w和x權限時,常用戶可以刪除該目錄中的任何文件,無論該文件的權限或擁有權。在該目錄設置Sticky位,目錄下建立的文件和目錄只有該用戶和root用戶才可以刪除
setuid與setgid:
先用ls -l命令看一下下面幾個文件或目錄的信息:
[root@localhost ~]# ll -d /tmp /usr/bin/passwd drwxrwxrwt. 3 root root 4096 Aug 4 16:50 /tmp -rwsr-xr-x. 1 root root 30768 Nov 24 2015 /usr/bin/passwd
這里發現在文件或目錄的擁有者,所屬組,其他用戶的權限x的位置上被s或者t取代。
舉個例子說:
比如普通用戶用passwd命令去修改密碼,而密碼是存在/etc/shadow文件中,而普通用戶是無法修改這個文件的,也就無法把新密碼保存進來。
但事實的結果是普通用戶是可以修改密碼,并且保存到/etc/shadow這個文件中的。
[root@localhost ~]# ll /etc/shadow ---------- 1 root root 1205 Aug 4 16:11 /etc/shadow
它的流程是這樣的:
先看下/usr/bin/passwd這個文件,也就是命令passwd。
[root@localhost ~]# which passwd /usr/bin/passwd [root@localhost ~]# ll /usr/bin/passwd -rwsr-xr-x. 1 root root 30768 Nov 24 2015 /usr/bin/passwd
發現這個文件的擁有者是root,并且other的權限為r-x,也就說普通用戶對其具有r和x的權限
普通用戶對其具有執行權限,因此當普通用戶執行這條命令時,由于s這個權限的存在,那么在執行過程中會暫時獲取root的權限
只有root才可以修改/etc/shadow文件,而在執行過程中使用了root用戶的權限密碼順利得寫入到這個文件中
可執行文件上SUID權限:
任何一個可執行程序文件能不能啟動為進程:取決發起者對 程序文件是否擁有執行權限
啟動為進程之后,其進程的屬主為原程序文件的屬主
SUID只對二進制可執行程序有效
SUID設置在目錄上無意義
權限設定:
chmod u+s FILE…
chmod u-s FILE…
[root@localhost ~]# ll total 68 -rwxrwxrwx 1 root root 0 Jul 25 11:26 zzzzzzz [root@localhost ~]# chmod u+s zzzzzzz [root@localhost ~]# ll total 68 -rwsrwxrwx 1 root root 0 Jul 25 11:26 zzzzzzz
可執行文件上SGID權限:
任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有執行權限
啟動為進程之后,其進程的屬主為原程序文件的屬組
權限設定:
chmod g+s FILE…
chmod g-s FILE…
[root@localhost ~]# ll total 68 -rwsrwxrwx 1 root root 0 Jul 25 11:26 zzzzzzz [root@localhost ~]# chmod u-s,g+s zzzzzzz [root@localhost ~]# ll total 68 -rwxrwsrwx 1 root root 0 Jul 25 11:26 zzzzzzz
目錄上的SGID權限:
默認情況下,用戶創建文件時,其屬組為此用戶所屬的主組
一旦某目錄被設定了SGID,則對此目錄有寫權限的用戶在此目錄中創建的文件所屬的組為此目錄的屬組
通常用于創建一個協作目錄
另外,還有可能出現大寫的情況rwSrwSrwT,出現這種情況是因為用戶不具備文件的x權限。
權限位映射:
SUID: user,占據屬主的執行權限位
s: 屬主擁有x權限
S:屬主沒有x權限
SGID: group,占據屬組的執行權限位
s: group擁有x權限
S:group沒有x權限
Sticky: other,占據other的執行權限位
t: other擁有x權限
T:other沒有x權限
設定文件特定屬性:
chattr +i 不能刪除,改名,更改(包括root用戶)
[root@localhost ~]# chattr +i zzzzzzz [root@localhost ~]# rm -f zzzzzzz rm: cannot remove `zzzzzzz': Operation not permitted
chattr -i 解鎖
[root@localhost ~]# chattr -i zzzzzzz [root@localhost ~]# rm -f zzzzzzz [root@localhost ~]# ll total 68 -rw-------. 1 root root 2429 Jul 25 09:47 anaconda-ks.cfg -rw-r--r--. 1 root root 45324 Jul 25 09:46 install.log -rw-r--r--. 1 root root 9963 Jul 25 09:44 install.log.syslog
chattr +A 鎖定文件的讀時間 -A 解鎖
chattr +a 可以查看、寫入數據,不能刪除
[root@localhost ~]# chattr +a zz [root@localhost ~]# ll zz -rw-r----- 1 root root 0 Aug 4 21:48 zz [root@localhost ~]# echo very hard very hard [root@localhost ~]# echo very hard >> zz [root@localhost ~]# cat zz very hard [root@localhost ~]# rm -f zz rm: cannot remove `zz': Operation not permitted
lsattr 顯示特定屬性
[root@localhost ~]# lsattr zz -------------e- zz
原創文章,作者:zanghonglei,如若轉載,請注明出處:http://www.www58058.com/29193