Linux-權限詳解

簡介

咱們總說Linux系統是相對安全可靠的,這與Linux系統有着嚴格的權限管理這一點是密不可分的。關於權限方面Linux有不少限制機制,包括咱們常說的文件基本權限rwx, 訪問控制權限ACL還有美國國防部參與開發的極爲複雜的SELINUX 等 。不過咱們最經常使用的,也必須掌握的就是這個文件的基本權限了。若是權限太高會增長服務器的風險。因此對於瞭解各類權限以及給用戶、文件分配合理的權限十分重要!算法

查看文件rwx權限

# 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權限遞歸

修改文件rwx權限

chmod命令可用於更改文件的r讀、w寫、x執行權限ip

  • 語法開發

    chmod [選項] rwx的權限分值 文件或目錄
    • 權限分值 r=4, w=2, x=1
    chmod [選項] 身份標識(+|-)(r|w|x) 文件或目錄
    • 身份標識 u=user所屬用戶 , g=group所屬組, o=other其餘用戶, a=all(u+g+o)全部用戶
  • 選項字符串

    • -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

默認權限設置 umask

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,35,好比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

相關文章
相關標籤/搜索