新聞中心

我們提供的服務(wù)有:網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、新沂ssl等。為上千多家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的新沂網(wǎng)站制作公司
Windows 系統(tǒng)中,新建的文件和目錄時通過繼承上級目錄的權(quán)限獲得的初始權(quán)限,而 Linux 不同,它是通過使用 umask 默認(rèn)權(quán)限來給所有新建的文件和目錄賦予初始權(quán)限的。
那么,我們?nèi)绾蔚弥?umask 默認(rèn)權(quán)限的值呢?直接通過 umask 命令即可:
[root@localhost ~]# umask
0022
#root用戶默認(rèn)是0022,普通用戶默認(rèn)是 0002
讀者可能會問,不應(yīng)該只有 3 個數(shù)字(分別對應(yīng) 3 種用戶身份)嗎,為什么有 4 個? umask 默認(rèn)權(quán)限確實(shí)由 4 個八進(jìn)制數(shù)組成,但第 1 個數(shù)代表的是文件所具有的特殊權(quán)限(SetUID、SetGID、Sticky BIT),此部分內(nèi)容放到后續(xù)章節(jié)中講解,現(xiàn)在先不討論。也就是說,后 3 位數(shù)字 "022" 才是本節(jié)真正要用到的 umask 權(quán)限值,將其轉(zhuǎn)變?yōu)樽帜感问綖?----w--w-。
注意,雖然 umask 默認(rèn)權(quán)限是用來設(shè)定文件或目錄的初始權(quán)限,但并不是直接將 umask 默認(rèn)權(quán)限作為文件或目錄的初始權(quán)限,還要對其進(jìn)行 "再加工"。
文件和目錄的真正初始權(quán)限,可通過以下的計(jì)算得到:
文件(或目錄)的初始權(quán)限 = 文件(或目錄)的最大默認(rèn)權(quán)限 - umask權(quán)限
如果按照官方的標(biāo)準(zhǔn)算法,需要將 umask 默認(rèn)權(quán)限使用二進(jìn)制并經(jīng)過邏輯與和邏輯非運(yùn)算后,才能得到最終文件或目錄的初始權(quán)限,計(jì)算過程比較復(fù)雜,且容易出錯,因此本節(jié)給大家介紹了更簡單的計(jì)算方式。
顯然,如果想最終得到文件或目錄的初始權(quán)限值,我們還需要了解文件和目錄的最大默認(rèn)權(quán)限值。在 Linux 系統(tǒng)中,文件和目錄的最大默認(rèn)權(quán)限是不一樣的:
- 對文件來講,其可擁有的最大默認(rèn)權(quán)限是 666,即 rw-rw-rw-。也就是說,使用文件的任何用戶都沒有執(zhí)行(x)權(quán)限。原因很簡單,執(zhí)行權(quán)限是文件的最高權(quán)限,賦予時絕對要慎重,因此絕不能在新建文件的時候就默認(rèn)賦予,只能通過用戶手工賦予。
- 對目錄來講,其可擁有的最大默認(rèn)權(quán)限是 777,即 rwxrwxrwx。
接下來,我們利用字母權(quán)限的方式計(jì)算文件或目錄的初始權(quán)限。以 umask 值為 022 為例,分別計(jì)算新建文件和目錄的初始權(quán)限:
- 文件的最大默認(rèn)權(quán)限是 666,換算成字母就是 "-rw-rw-rw-",umask 的值是 022,換算成字母為 "-----w--w-"。把兩個字母權(quán)限相減,得到 (-rw-rw-rw-) - (-----w--w-) = (-rw-r--r--),這就是新建文件的初始權(quán)限。我們測試一下:
[root@localhost ~]# umask
0022
#默認(rèn)umask的值是0022
[root@localhost ~]# touch file <--新建file空文件
[root@localhost ~]# ll -d file
-rw-r--r--. 1 root root 0 Apr 18 02:36 file
- 目錄的默認(rèn)權(quán)限最大可以是 777,換算成字母就是 "drwxrwxrwx",umask 的值是 022,也就是 "-----w--w-"。把兩個字母權(quán)限相減,得到的就是新建目錄的默認(rèn)權(quán)限,即 (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
注意,在計(jì)算文件或目錄的初始權(quán)限時,不能直接使用最大默認(rèn)權(quán)限和 umask 權(quán)限的數(shù)字形式做減法,這是不對的。例如,若 umask 默認(rèn)權(quán)限的值為 033,按照數(shù)字形式計(jì)算文件的初始權(quán)限,666-033=633,但我們按照字母的形式計(jì)算會得到 (rw-rw-rw-) - (----wx-wx) = (rw-r--r--),換算成數(shù)字形式是 644。
這里的減法,其實(shí)是“遮蓋”的意思,也就是說,最大默認(rèn)權(quán)限中和 umask 權(quán)限公共的部分,通過減法運(yùn)算會被遮蓋掉,最終剩下的“最大默認(rèn)權(quán)限”,才是最終賦予文件或目錄的初始權(quán)限。
umask默認(rèn)權(quán)限的修改方法
umask 權(quán)限值可以通過如下命令直接修改:
[root@localhost ~]# umask 002
[root@localhost ~]# umask
0002
[root@localhost ~]# umask 033
[root@localhost ~]# umask
0033
不過,這種方式修改的 umask 只是臨時有效,一旦重啟或重新登陸系統(tǒng),就會失效。如果想讓修改永久生效,則需要修改對應(yīng)的環(huán)境變量配置文件 /etc/profile。例如:
[root@localhost ~]# vim /etc/profile
...省略部分內(nèi)容...
if [ $UID -gt 199]&&[ "'id -gn'" = "'id -un'" ]; then
umask 002
#如果UID大于199(普通用戶),則使用此umask值
else
umask 022
#如果UID小于199(超級用戶),則使用此umask值
fi
…省略部分內(nèi)容…
這是一段 Shell 腳本程序,不懂也沒關(guān)系,大家只需要知道,普通用戶的 umask 由 if 語句的第一段定義,而超級用戶 root 的 umask 值由 else 語句定義即可。 修改此文件,則 umask 值就會永久生效。
名稱欄目:Linuxumask詳解:令新建文件和目錄擁有默認(rèn)權(quán)限
本文來源:http://m.fisionsoft.com.cn/article/ccoieei.html


咨詢
建站咨詢
