咱們總說Linux系統是相對安全可靠的,這與Linux系統有着嚴格的權限管理這一點是密不可分的。關於權限方面Linux有不少限制機制,包括咱們常說的文件基本權限rwx
, 訪問控制權限ACL
還有美國國防部參與開發的極爲複雜的SELINUX
等 。不過咱們最經常使用的,也必須掌握的就是這個文件的基本權限了。若是權限太高會增長服務器的風險。因此對於瞭解各類權限以及給用戶、文件分配合理的權限十分重要!算法
# ls -l 命令的第一列 [root@God /]# ls -l lrwxrwxrwx. 1 root root 7 Jun 21 11:20 bin -> usr/bin drwxr-xr-x. 76 root root 8192 Jun 24 19:51 etc drwxrwxrwt. 8 root root 283 Jun 24 19:53 tmp ... # stat 命令查看 [root@God /]# stat -c %A / dr-xr-xr-x [root@God /]# stat -c %a / 555
# 解釋一下這一串字符串的意思 # drwxr-xr-x # 0123456789 # 第 0 位: 表明文件類型,經常使用的有 - 普通文件 d 目錄 l 軟連接(快捷方式)等 # 第123位: 表明文件所屬用戶(u表示)的 rwx 權限 # 第456位: 表明文件所屬組用戶(g表示)的 rwx 權限 # 第789爲: 表明其餘用戶(o表示)的 rwx 權限 # - 表明無此項權限 # r=4 表明讀權限 # w=2 表明寫權限 # x=1 表明可執行權限 # 7 = 4 + 2 + 1 即表明擁有讀、寫、可執行權限 # 6 = 4 + 2 即表明擁有讀、寫權限 # 5 = 4 + 1 即表明擁有讀、可執行權限 # 以此類推...
對於文件shell
r
表示能夠讀取文件中的內容w
表示能夠修改文件中的內容和文件的一些屬性x
表示能夠執行文件,普通用戶還須要有r
權限才能正常執行對於目錄安全
r
表示能夠查詢目錄下的內容w
表示能夠修改目錄結構的權限,如新建文件或目錄,刪除文件或目錄等x
目錄沒有執行一說,因此x
表示能夠進入目錄刪除文件、修改文件名的權限是受父目錄的w
權限控制的,和文件自身的權限無關bash
root
用戶對全部文件和目錄具備r
讀權限服務器
root
用戶對全部目錄具備x
可執行權限,即進入目錄的權限code
root
用戶能夠更改全部文件或目錄的r
w
x
權限遞歸
chmod
命令可用於更改文件的r
讀、w
寫、x
執行權限ip
語法開發
chmod [選項] rwx的權限分值 文件或目錄
chmod [選項] 身份標識(+|-)(r|w|x) 文件或目錄
選項字符串
-R
遞歸處理,將指定目錄下全部文件及子目錄一併處理# 更改文件/local/myscript.sh的權限 # 文件擁有者權限=7(r+w+x) 同組用戶權限=5(r+x) 其餘用戶權限=5(r+x) chmod 755 /local/myscript.sh # 去掉其餘用戶對文件/local/myscript.sh的寫權限 chmod o-w /local/myscript.sh # 去掉其餘用戶對文件/local/myscript.sh的寫權限,給同組用戶加上執行權限 chmod o-w,g+x /local/myscript.sh # 更改目錄/local的權限 chmod -R 754 /local
Linux下建立文件和目錄時會有一個默認的權限,通常來說,咱們認爲相對安全的權限值爲:
文件 644
目錄 755
[root@God ~]# touch testfile [root@God ~]# stat -c %a testfile 644 [root@God ~]# mkdir testdir [root@God ~]# stat -c %a testdir/ 755
那麼爲何默認的權限值會是這樣的呢?就是由於umask
權限掩碼決定的!下面就好好講一下這個umask
# 查看umask值 [root@God ~]# umask 0022 # 設置umask值,臨時設置,僅針對本次會話 [root@God dir2]# umask 0011 [root@God dir2]# umask 0011 # 永久修改-全局設置-針對全部用戶 修改 /etc/profile 文件 # 永久修改-針對當前用戶 在 ~/.bashrc 文件設置
首先,咱們先來了解一下什麼是最大權限值
x
權限「很危險」,則不給x
執行權限,因此文件默認的最大權限值
爲666
x
權限與是否能夠進入目錄有關,即默認最大的權限值
爲777
umask
的系統默認值是0022
說一下0022
的第一位數0
,網上有百分之八十的文章都說是表示的特殊權限或粘滯位,而後說通常不予考慮。屁!你卻是考慮考慮啊,我是搜了不少資料,也沒找到到底怎麼使用(若是誰知道怎麼用,請告訴我 = =)。其實,umask
的本質就是一個不大於十進制512的八進制數字,因此第一位只能是0
,至於爲何是不大於512? 你去換算一下十進制511的八進制數是多少……是否是感受瞬間就明白了?並且,你若是設置umask
的第一位不等於0
時,會報錯,而這個錯的意思就是八進制越界!
[root@God dir2]# umask 1000 -bash: umask: 1000: octal number out of range
因此咱們只看後三位022
,咱們用十進制算法用最大權限值
去對應着位置去減,就獲得了文件或目錄的默認權限
666 - 022 = 6-0 6-2 6-2 = 644
777 - 022 = 7-0 7-2 7-2 = 755
那麼有人(對,沒錯,就是我!)會問了,若是設置umask
中的值有1
,3
或5
,好比0035
那按照這個算法,則文件默認不就有執行權限了麼,豈不"很危險"?
666 - 035 = 6-0 6-3 6-5 = 631
對!因此,當文件根據umask
計算默認權限時,若是遇到奇數,那麼就會給這個數自動加1
。也就意味着你不管umask
的值設置爲多少,新建的文件默認都不會有執行權限的!是否是很哇塞?
666 - 035 = 6-0 6-3 6-5 = 63(+1)1(+1) = 642