国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

Linux umask詳解:令新建文件和目錄擁有默認權限

2024-08-27 23:56:54
字體:
來源:轉載
供稿:網友
linux 是注重安全性的操作系統,而安全的基礎在于對權限的設定,不僅所有已存在的文件和目錄要設定必要的訪問權限,創建新的文件和目錄時,也要設定必要的初始權限。

Windows 系統中,新建的文件和目錄時通過繼承上級目錄的權限獲得的初始權限,而 Linux 不同,它是通過使用 umask 默認權限來給所有新建的文件和目錄賦予初始權限的。

那么,我們如何得知 umask 默認權限的值呢?直接通過 umask 命令即可:

[root@localhost ~]# umask
0022
#root用戶默認是0022,普通用戶默認是 0002

讀者可能會問,不應該只有 3 個數字(分別對應 3 種用戶身份)嗎,為什么有 4 個? umask 默認權限確實由 4 個八進制數組成,但第 1 個數代表的是文件所具有的特殊權限(SetUID、SetGID、Sticky BIT),此部分內容放到后續章節中講解,現在先不討論。也就是說,后 3 位數字 "022" 才是本節真正要用到的 umask 權限值,將其轉變為字母形式為 ----w--w-。

注意,雖然 umask 默認權限是用來設定文件或目錄的初始權限,但并不是直接將 umask 默認權限作為文件或目錄的初始權限,還要對其進行 "再加工"。

文件和目錄的真正初始權限,可通過以下的計算得到:

文件(或目錄)的初始權限 = 文件(或目錄)的最大默認權限 - umask權限

如果按照官方的標準算法,需要將 umask 默認權限使用二進制并經過邏輯與和邏輯非運算后,才能得到最終文件或目錄的初始權限,計算過程比較復雜,且容易出錯,因此本節給大家介紹了更簡單的計算方式。

顯然,如果想最終得到文件或目錄的初始權限值,我們還需要了解文件和目錄的最大默認權限值。在 Linux 系統中,文件和目錄的最大默認權限是不一樣的:
  • 對文件來講,其可擁有的最大默認權限是 666,即 rw-rw-rw-。也就是說,使用文件的任何用戶都沒有執行(x)權限。原因很簡單,執行權限是文件的最高權限,賦予時絕對要慎重,因此絕不能在新建文件的時候就默認賦予,只能通過用戶手工賦予。
  • 對目錄來講,其可擁有的最大默認權限是 777,即 rwxrwxrwx。

接下來,我們利用字母權限的方式計算文件或目錄的初始權限。以 umask 值為 022 為例,分別計算新建文件和目錄的初始權限:
  • 文件的最大默認權限是 666,換算成字母就是 "-rw-rw-rw-",umask 的值是 022,換算成字母為 "-----w--w-"。把兩個字母權限相減,得到 (-rw-rw-rw-) - (-----w--w-) = (-rw-r--r--),這就是新建文件的初始權限。我們測試一下:

    [root@localhost ~]# umask
    0022
    #默認umask的值是0022
    [root@localhost ~]# touch file  <--新建file空文件
    [root@localhost ~]# ll -d file
    -rw-r--r--. 1 root root 0 Apr 18 02:36 file

  • 目錄的默認權限最大可以是 777,換算成字母就是 "drwxrwxrwx",umask 的值是 022,也就是 "-----w--w-"。把兩個字母權限相減,得到的就是新建目錄的默認權限,即 (drwxrwxrwx) - (-----w--w-) = (drwxr-xr-x)。我們再來測試一下:

    [root@localhost ~]# umask
    0022
    [root@localhost ~]# mkdir catalog  <--新建catalog目錄
    [root@localhost ~]# ll -d catalog
    drwxr-xr-x. 2 root root 4096 Apr 18 02:36 catalog


注意,在計算文件或目錄的初始權限時,不能直接使用最大默認權限和 umask 權限的數字形式做減法,這是不對的。例如,若 umask 默認權限的值為 033,按照數字形式計算文件的初始權限,666-033=633,但我們按照字母的形式計算會得到 (rw-rw-rw-) - (----wx-wx) = (rw-r--r--),換算成數字形式是 644。

這里的減法,其實是“遮蓋”的意思,也就是說,最大默認權限中和 umask 權限公共的部分,通過減法運算會被遮蓋掉,最終剩下的“最大默認權限”,才是最終賦予文件或目錄的初始權限。

umask默認權限的修改方法

umask 權限值可以通過如下命令直接修改:

[root@localhost ~]# umask 002
[root@localhost ~]# umask
0002
[root@localhost ~]# umask 033
[root@localhost ~]# umask
0033


不過,這種方式修改的 umask 只是臨時有效,一旦重啟或重新登陸系統,就會失效。如果想讓修改永久生效,則需要修改對應的環境變量配置文件 /etc/profile。例如:

[root@localhost ~]# vim /etc/profile
...省略部分內容...
if [ $UID -gt 199]&&[ "'id -gn'" = "'id -un'" ]; then
    umask 002
    #如果UID大于199(普通用戶),則使用此umask值
else
    umask 022
    #如果UID小于199(超級用戶),則使用此umask值
fi
…省略部分內容…

這是一段 shell 腳本程序,不懂也沒關系,大家只需要知道,普通用戶的 umask 由 if 語句的第一段定義,而超級用戶 root 的 umask 值由 else 語句定義即可。 修改此文件,則 umask 值就會永久生效。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 栾川县| 阳城县| 昌都县| 鄂伦春自治旗| 仁布县| 朝阳区| 深州市| 太仆寺旗| 镇远县| 陵川县| 澄城县| 天津市| 鲁山县| 乌兰察布市| 博野县| 大足县| 镇沅| 金湖县| 佛山市| 弥渡县| 易门县| 富民县| 库车县| 隆昌县| 宜丰县| 富裕县| 彭阳县| 北海市| 汤阴县| 资源县| 唐海县| 威海市| 海兴县| 辽源市| 虞城县| 都昌县| 定西市| 富民县| 靖江市| 武陟县| 刚察县|