1. 所有者與群組
Linux中有三個身份類別owner/group/others章郁,各有read/write/exectue等權限。
** 所有者**
一般為文件的創(chuàng)建者囤采,誰創(chuàng)建了該文件握玛,就天然的成為該文件的所有者
群組
當某個用戶創(chuàng)建了一個文件后,這個文件的所在組就是該用戶所在的組形娇。處在同一群組的人對文件有相同的權限,對同一組的用戶進行權限管理筹误。
其他組
除開文件的所有者和所在組的用戶外桐早,系統(tǒng)的其它用戶都是文件的其它組
其他人
除了文件擁有者和群組內的其他用戶,一般是可以公開的權限,對所有人都可以的權限的管理單元哄酝。
在我們Linux系統(tǒng)當中友存,默認的情況下,所有的系統(tǒng)上的帳號與一般身份使用者陶衅,還有那個
root的相關信息屡立, 都是記錄在/etc/passwd這個文件內的。至于個人的密碼則是記錄
在/etc/shadow這個文件下搀军。 此外膨俐,Linux所有的群組名稱都紀錄在/etc/group內!這三個文件
可以說是Linux系統(tǒng)里面帳號罩句、密碼焚刺、群組信息的集中地啰! 不要隨便刪除這三個文件懊爬谩乳愉!
2. Linux文件權限概念
查看文件屬性ls -al ~
第一欄的10個字符代表這個文件的類型與權限(permission):
第一個字符代表這個文件的類型:文件(-)、目錄(d)屯远、鏈接(l)匾委、設備(b)。
后面的字符每3個一組(“rwx”的組合)氓润,其中,[r]代表可讀(read)薯鳍、[w]代表可寫(write)咖气、[x]代表可執(zhí)行(execute)。
- 第一組為“文件擁有者可具備的權限” ;
- 第二組為“加入此群組之帳號的權限”挖滤;
- 第三組為“非本人且沒有加入本群組之其他帳號的權限”崩溪。
rwx所在的位置是不會改變的,有該權限就會顯示字符斩松,沒有該權限就變成減號(-)
第三欄的字符串表示所有者伶唯。
第四欄的字符串表示所在群組。
權限也可用數(shù)字表示為:r=4惧盹,w=2乳幸,x=1 因此rwx=4+2+1=7。 在改變權限的命令中使用钧椰。
3. 更改文件的所有者粹断、群組、權限
改變文件擁有者,chown
語法:
[root@localhost~]# chown [-R] 帳號名稱 文件或目錄
[root@localhost~]# chown [-R] 帳號名稱:群組名稱 文件或目錄
# 選項:-R :進行遞回(recursive)的持續(xù)變更嫡霞,亦即連同次目錄下的所有文件都變更
范例:
改變用戶組,chmod
change group的縮寫
語法:
[root@localhost ~]# chgrp [-R] dirname/filename ...
選項與參數(shù):
-R: 進行遞回(recursive)的持續(xù)變更瓶埋,亦即連同次目錄下的所有文件、目錄
都更新成為這個群組之意。常常用在變更某一目錄內所有的文件之情況养筒。
案例:
[root@localhost ~]# ls -al .bashrc
-rw-r--r--. 1 root root 176 12月 29 2013 .bashrc
[root@localhost ~]# chgrp wangtao .bashrc
[root@localhost ~]# ls -al .bashrc
-rw-r--r--. 1 root wangtao 176 12月 29 2013 .bashrc
改變權限,chmod
權限設置有兩種方法曾撤,分別 是使用數(shù)字和符號來變更。
數(shù)字來代表各個權限晕粪,各權限的分數(shù)對照表如下:
r:4 > w:2 > x:1
每種身份(owner/group/others)各自的三個權限(r/w/x)分數(shù)是需要累加的讹开,例如當權限為:[-rwxrwx--x] 分數(shù)則是:owner=7,group=6,others=1, 則文件的權限數(shù)字就是761.
語法:
[root@localhost ~]# chmod [-R] xyz 文件或目錄
# 選項與參數(shù):
# xyz: 就是剛剛提到的數(shù)字類型的權限屬性,為 rwx 屬性數(shù)值的相加汹碱。
# -R: 進行遞回(recursive)的持續(xù)變更乡话,亦即連同次目錄下的所有文件都會變更
范例
符號更改文件權限
基本上就九個權限分別是(1)user (2)group (3)others三種身份,借由u, g, o來代表三種
身份的權限剩膘,此外衅斩,a則代表all亦即全部的身份!讀寫的權限就可以寫成r ,w,x啰怠褐!
這樣可以使用下面的方式來看:
| chmod | u g o a | +(加入)-(除去)=(設置)| r w x | 文件或目錄 |
范例
[root@localhost ~]# chmod u=rxw,go=rx .bashrc
#注意喔畏梆!那個u=rwx,go=rx是連在一起的,中間并沒有任何空白字符奈懒!
[root@localhost ~]# ls -al .bashrc
-rwxr-xr-x. 1 root root 176 12月 29 2013 .bashrc
[root@localhost ~]# chmod a-x .bashrc
[root@localhost ~]# ls -al .bashrc
-rw-r--r--. 1 root root 176 12月 29 2013 .bashrc
[root@localhost ~]#
4. 文件與目錄的默認權限與隱藏權限
除了基本r , w, x權限外奠涌,在Linux傳統(tǒng)的Ext2/Ext3/Ext4文件系統(tǒng)下,我們還可以設置其他的系統(tǒng)隱藏屬性磷杏, 這部份可使用 chattr 來設置溜畅,而以 lsattr 來查看,最重要的屬性就是可以設置其不可修改的特性极祸!
4.1 文件默認權限:umask
[root@localhost tmp]# ls -l
總用量 4
-rwx------. 1 root root 827 2月 15 01:46 ks-script-4K3G9g
-rw-------. 1 root root 0 2月 15 01:35 yum.log
[root@localhost tmp]# mkdir dir1
[root@localhost tmp]# touch test1
[root@localhost tmp]# ls -l
總用量 4
drwxr-xr-x. 2 root root 18 2月 15 12:32 dir1
-rwx------. 1 root root 827 2月 15 01:46 ks-script-4K3G9g
-rw-r--r--. 1 root root 0 2月 15 12:33 test1
-rw-------. 1 root root 0 2月 15 01:35 yum.log
如上創(chuàng)建一個目錄和文件時慈格,他的默認權限是drwxr-xr-x和-rw-r--r--。那么指定這個默認值就是umash了遥金。
查看umash的值:
[root@localhost ~]# umash
0022
注意浴捆,最小Linux安裝沒有umash命令
第1個數(shù)字代表特殊字符,第2稿械,3选泻,4個數(shù)字代表ower,gourp,others。
一般文件和目錄創(chuàng)建的默認權限一般是:
- 若使用者創(chuàng)建為“文件”則默認“沒有可執(zhí)行( x )權限”美莫,亦即只有 rw 這兩個項目页眯,也就
是最大為 666 分,默認權限如下: -rw-rw-rw- - 若使用者創(chuàng)建為“目錄”厢呵,則由于 x 與是否可以進入此目錄有關餐茵,因此默認為所有權限均開
放,亦即為 777 分述吸,默認權限如下: drwxrwxrwx
而umash的分數(shù)指的是“該默認值需要減掉的權限忿族!”锣笨,當要拿掉能寫的權限,就是輸入2分道批。
從上面的例子中: umask為022错英,所當使用者:
- 創(chuàng)建文件時:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r--
- 創(chuàng)建目錄時:(drwxrwxrwx)-(d----w--w-)==> drwxr-xr-x
正如上面范例所示!
那么如何設置umask的值呢隆豹,umash 后面加數(shù)字椭岩。
范例:
在默認的情況中, root 的 umask 會拿掉比較多的屬性璃赡,root 的 umask 默認是 022 判哥, 這是基
于安全的考慮啦~至于一般身份使用者,通常他們的 umask 為 002 碉考,亦即保留同群組的寫入
權力塌计! 其實,關于默認 umask 的設置可以參考 /etc/bashrc 這個文件的內容侯谁,不過锌仅,不建議
修改該文件.
4.2 文件隱藏屬性
除了那9個權限,另還有文件的隱藏屬性墙贱,在系統(tǒng)安全上面重要的緊热芹。
下面的chattr指令只能在Ext2/Ext3/Ext4的Linux傳統(tǒng)文件系統(tǒng)上面完整生效, 其他的文件系統(tǒng)可能就無法完整的支持這個指令了惨撇,例如xfs僅支持部份參數(shù)而已伊脓。
如何設置這個文件與檢查這些隱藏的屬性。chattr
[root@localhost~]# chattr [+-=][ASacdistu] 文件或目錄名稱
選項與參數(shù):
+:增加某一個特殊參數(shù)魁衙,其他原本存在參數(shù)則不動报腔。
-:移除某一個特殊參數(shù),其他原本存在參數(shù)則不動纺棺。
=:設置一定,且僅有后面接的參數(shù)
A:當設置了 A 這個屬性時邪狞,若你有存取此文件(或目錄)時祷蝌,他的存取時間 atime 將不會被修改,可避免 I/O 較慢的機器過度的存取磁盤帆卓。(目前建議使用文件系統(tǒng)掛載參數(shù)處理這個項目)
S:一般文件是非同步寫入磁盤的(原理請參考[前一章sync](../Text/index.html#sync)的說明)巨朦,如果加上 S 這個屬性時,當你進行任何文件的修改剑令,該更動會“同步”寫入磁盤中糊啡。
a:當設置a之后,這個文件將只能增加數(shù)據(jù)吁津,而不能刪除也不能修改數(shù)據(jù)棚蓄,只有root才能設置這屬性
c:這個屬性設置之后堕扶,將會自動的將此文件“壓縮”,在讀取的時候將會自動解壓縮梭依,但是在儲存的時候稍算,將會先進行壓縮后再儲存(看來對于大文件似乎蠻有用的!)
d:當dump程序被執(zhí)行的時候役拴,設置d屬性將可使該文件(或目錄)不會被dump備份
i:這個i可就很厲害了糊探!他可以讓一個文件“不能被刪除、改名河闰、設置鏈接也無法寫入或新增數(shù)據(jù)科平!”對于系統(tǒng)安全性有相當大的助益!只有root 能設置此屬性
s:當文件設置了s屬性時姜性,如果這個文件被刪除瞪慧,他將會被完全的移除出這個硬盤空間,所以如果誤刪了污抬,完全無法救回來了喔汞贸!
u:與s相反的,當使用u來設置文件時印机,如果該文件被刪除了矢腻,則數(shù)據(jù)內容其實還存在磁盤中,可以使用來救援該文件喔射赛!
注意1:屬性設置常見的是a與 i的設置值多柑,而且很多設置值必須要身為root才能設置
注意2:xfs文件系統(tǒng)僅支持AadiS而已
范例
[root@localhost tmp]# touch attrtest
[root@localhost tmp]# chattr +i attrtest
[root@localhost tmp]# rm attrtest
rm:是否刪除普通空文件 "attrtest"?y
rm: 無法刪除"attrtest": 不允許的操作
[root@localhost tmp]# ls -l
總用量 4
-rw-r--r--. 1 root root 0 2月 15 13:23 attrtest
drwxr-xr-x. 2 root root 18 2月 15 12:32 dir1
-rwx------. 1 root root 827 2月 15 01:46 ks-script-4K3G9g
-rw-r--r--. 1 root root 0 2月 15 12:33 test1
-rw-------. 1 root root 0 2月 15 01:35 yum.log
[root@localhost tmp]# lsattr attrtest
----i----------- attrtest
[root@localhost tmp]# chattr -i attrtest
[root@localhost tmp]#
這個指令在系統(tǒng)的數(shù)據(jù)安全上面很重要楣责,由于這些屬性是隱藏的性質竣灌,所以要以lsattr才能看到該屬性。最重要的是設置+i與 +a秆麸, +i 可以讓一個文件無法被更改初嘹,+a只可以log file 這種文件只能增加。
顯示文件隱藏屬性 lsattr
[root@localhost ~]# lsattr [-adR] 文件或目錄
選項與參數(shù):
-a:將隱藏文件的屬性也秀出來沮趣;
-d:如果接的是目錄屯烦,僅列出目錄本身的屬性而非目錄內的文件名;
-R:連同子目錄的數(shù)據(jù)也一并列出來房铭!
5. 文件特殊權限: SUID, SGID, SBIT
查看 /tmp 和/usr/bin/passwd 的權限
[root@localhost ~]# ls -ld /tmp; ls -l /usr/bin/passwd
drwxrwxrwt. 8 root root 4096 2月 15 13:23 /tmp
-rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd
可以看到s跟t權限...
Set UID
當s這個標志出現(xiàn)在文件擁有者的x權限上時驻龟,例如剛剛提到的/usr/bin/passwd 這個文件的權限狀態(tài):“-rwsr-xr-x”,此時就被稱為Set UID缸匪,簡稱為SUID的特殊權限翁狐。基本上SUID有這樣的限制與功能:
- SUID 權限僅對二進制程序(binary program)有效凌蔬;
- 執(zhí)行者對于該程序需要具有 x 的可執(zhí)行權限露懒;
- 本權限僅在執(zhí)行該程序的過程中有效(run-time)闯冷;
- 執(zhí)行者將具有該程序擁有者(owner)的權限。
這個權限在一些特殊文件上非常有用隐锭,需要好好琢磨窃躲。
另外,SUID 僅可用在binary program 上钦睡, 不能夠用在 shell script 上面蒂窒!這是因為 shellscript 只是將很多的 binary 可執(zhí)行文件叫進來執(zhí)行而已!所以 SUID 的權限部分荞怒,還是得要看
shell script 調用進來的程序的設置洒琢,而不是 shell script 本身。當然褐桌,SUID 對于目錄也是無效的~這點要特別留意衰抑。
Set GID
當s標志在文件擁有者的x項目為SUID,那s在群組的x時則稱為Set GID, SGID
與 SUID 不同的是荧嵌,SGID 可以針對文件或目錄來設置呛踊!如果是對文件來說, SGID 有如下的功能:
- SGID 對二進制程序有用啦撮;
- 程序執(zhí)行者對于該程序來說谭网,需具備 x 的權限;
- 執(zhí)行者在執(zhí)行的過程中將會獲得該程序群組的支持赃春!
舉例來說愉择,上面的 /usr/bin/locate 這個程序可以去搜尋 /var/lib/mlocate/mlocate.db 這個文件的內容 (詳細說明會在下節(jié)講述), mlocate.db 的權限如下:
[root@study ~]# ll /usr/bin/locate /var/lib/mlocate/mlocate.db
-rwx--s--x. 1 root slocate 40496 Jun 10 2014 /usr/bin/locate
-rw-r-----. 1 root slocate 2349055 Jun 15 03:44 /var/lib/mlocate/mlocate.db
與 SUID 非常的類似织中,若我使用 dmtsai 這個帳號去執(zhí)行 locate 時锥涕,那 dmtsai 將會取得slocate 群組的支持, 因此就能夠去讀取 mlocate.db 啦狭吼!非常有趣吧层坠!
除了 binary program 之外,事實上 SGID 也能夠用在目錄上刁笙,這也是非常常見的一種用途破花!當一個目錄設置了 SGID 的權限后,他將具有如下的功能:
- 使用者若對于此目錄具有 r 與 x 的權限時采盒,該 使用者能夠進入此目錄旧乞;
- 使用者在此目錄下的有效群組(effective group)將會變成該目錄的群組蔚润;
- 用途:若使用者在此目錄下具有 w 的權限(可以新建文件)磅氨,則使用者所創(chuàng)建的新文件,該新文件的群組與此目錄的群組相同
Sticky Bit
這個 Sticky Bit,SBIT目前只針對目錄有效嫡纠,對于文件已經(jīng)沒有效果了烦租。SBIT對于目錄的作用是:
- 當使用者對于此目錄具有 w, x 權限延赌,亦即具有寫入的權限時;
- 當使用者在該目錄下創(chuàng)建文件或目錄時叉橱,僅有自己與 root 才有權力刪除該文件
SUID/SGID/SBIT 權限設置
使用數(shù)字代表這幾個權限
- 4 為 SUID
- 2 為 SGID
- 1 為 SBIT
設要將一個文件權限改為“-rwsr-xr-x”時挫以,由于 s 在使用者權限中,所以是 SUID 窃祝,因此掐松,在原先的 755 之前還要加上 4 ,也就是:“ chmod 4755 filename ”來設置粪小!
范例
[root@localhost ~]# cd /tmp
[root@localhost tmp]# touch test
[root@localhost tmp]# chmod 4755 test;ls -l test
-rwsr-xr-x. 1 root root 0 2月 15 15:33 test
[root@localhost tmp]# chmod 6755 test; ls -l test
-rwsr-sr-x. 1 root root 0 2月 15 15:33 test
[root@localhost tmp]# chmod 1755 test; ls -l test
-rwxr-xr-t. 1 root root 0 2月 15 15:33 test
[root@localhost tmp]# chmod 7666 test; ls -l test
-rwSrwSrwT. 1 root root 0 2月 15 15:33 test
我們是下達7666喔大磺!也就是說,user ,group以及others 都沒有 x這個可執(zhí)行的標志(因為666 嘛)探膊,所以杠愧,這個 S, T 代表的就是“空的”啦!怎