umask 默認(rèn)權(quán)限是 Linux 權(quán)限的一種,主要用于讓 Linux 中的新建文件和目錄擁有默認(rèn)權(quán)限。Linux 是一個(gè)比較安全的操作系統(tǒng),而安全的基礎(chǔ)就是權(quán)限,所以,在 Linux 中所有的文件和目錄都要有基本的權(quán)限,新建的文件和目錄當(dāng)然也要有默認(rèn)的權(quán)限。
在 Linux 中,通過(guò) umask 默認(rèn)權(quán)限來(lái)給所有新建立的文件和目錄賦予初始權(quán)限,這一點(diǎn)和 Windows 不太一樣,Windows 是通過(guò)繼承上級(jí)目錄的權(quán)限來(lái)給文件和目錄賦予初始權(quán)限的。
査看系統(tǒng)的 umask 權(quán)限:
[root@localhost ~]# umask
0022
#用八制數(shù)值顯示umask權(quán)限
[root@localhost ~]# umask -S
u=rwx, g=rx, o=rx
#用字母表示文件和目錄的初始權(quán)限
使用"-S"選項(xiàng),會(huì)直接用字母來(lái)表示文件和目錄的初始權(quán)限。我們査看數(shù)值的 umask 權(quán)限,看到的是 4 位數(shù)字"0022",其中第一個(gè)數(shù)字"0"代表的是文件的特殊權(quán)限(SetUID、SetGID、Sticky BIT),特殊權(quán)限我們放在后續(xù)章節(jié)來(lái)詳細(xì)講解,現(xiàn)在先不討論。也就是后 3 位數(shù)字"022"才是真正的 umask 默認(rèn)權(quán)限。
umask默認(rèn)權(quán)限的計(jì)算方法
在學(xué)習(xí) umask 默認(rèn)權(quán)限的計(jì)算方法之前,我們需要先了解一下新建文件和目錄的默認(rèn)最大權(quán)限。
對(duì)文件來(lái)講,新建文件的默認(rèn)最大權(quán)限是 666,沒(méi)有執(zhí)行(x)權(quán)限。這是因?yàn)閳?zhí)行權(quán)限對(duì)文件來(lái)講比較危險(xiǎn),不能在新建文件的時(shí)候默認(rèn)賦予,而必須通過(guò)用戶手工賦予。
對(duì)目錄來(lái)講,新建目錄的默認(rèn)最大權(quán)限是 777。這是因?yàn)閷?duì)目錄而言,執(zhí)行(x)權(quán)限僅僅代表進(jìn)入目錄,所以即使建立新文件時(shí)直接默認(rèn)賦予,也沒(méi)有什么危險(xiǎn)。
接下來(lái)我們學(xué)習(xí)如何計(jì)算 umask 默認(rèn)權(quán)限。按照官方的標(biāo)準(zhǔn)算法,umask 默認(rèn)權(quán)限需要使用二進(jìn)制進(jìn)行邏輯與和邏輯非聯(lián)合運(yùn)算才可以得到正確的新建文件和目錄的默認(rèn)權(quán)限。這種方法既不好計(jì)算,也不好理解,筆者并不推薦。
我們?cè)谶@里還是按照權(quán)限字母來(lái)講解 umask 權(quán)限的計(jì)算方法。我們就按照默認(rèn)的 umask 值是 022 來(lái)分別計(jì)算一下新建文件和目錄的默認(rèn)權(quán)限吧。
文件的默認(rèn)權(quán)限最大只能是 666,換算成字母就是"-rw-rw-rw-";而 umask 的值是 022,也換算成字母就是"-----w--w-"。把兩個(gè)字母權(quán)限相減,得到的就是新建文件的默認(rèn)權(quán)限:(-rw-rw-rw-) - (-----w--w-)=(-rw-r--r--)。
目錄的默認(rèn)權(quán)限最大可以是 777,換算成字母就是"drwxrwxrwx";而 umask 的值是022,也換算成字母就是"d----w--w-"。也把兩個(gè)字母權(quán)限相減,得到的就是新建目錄的默認(rèn)權(quán)限:(drwxrwxrwx) - (d----w--w-)=(drwx-r-xr-x)。
我們測(cè)試一下:
[root@localhost ~]# umask 0022
#默認(rèn)umask的值是0022
[root@localhost ~]# touch laowang
[root@localhost ~]# mkdir fengjie
[root@localhost ~]# ll -d laowang fengjie/drwxr-xr-x 2 root root 4096 6月 16 02:36 fengjie/ -rw-r--r-- 1 root root 0 6月 16 02:36 laowang#新建立目錄的默認(rèn)權(quán)限是755,新建立文件的默認(rèn)權(quán)限是644注意,這里強(qiáng)調(diào)一下,umask 默認(rèn)權(quán)限的計(jì)算是不能直接使用數(shù)字相減的。很多人會(huì)理解為,既然文件的默認(rèn)權(quán)限最大是"666",umask 的值是"022",而新建文件的值剛好是"644",那是不是就是直接使用"666-644"呢?
這是不對(duì)的,如果 umask 的值是"033"呢?按照數(shù)值相減,就會(huì)得到"633"的值。但是我們強(qiáng)調(diào)過(guò)文件是不能在新建立時(shí)就擁有執(zhí)行(x)權(quán)限的,而權(quán)限"3"是包含執(zhí)行(x)權(quán)限的。我們測(cè)試一 下:
[root@localhost ~]# umask 033
#修改umask的值為033
[root@localhost ~]# touch xuejie
#建立測(cè)試文件xuejie
[root@localhost ~]# ll xuejie
-rw-r--r-- 1 root root 0 6月 16 02:46 xuejie#xuejie文件的默認(rèn)權(quán)限依然是644
由這個(gè)例子我們可以知道,umask 默認(rèn)權(quán)限一定不是使用權(quán)限數(shù)字相減得到的,而是通過(guò)二進(jìn)制邏輯與和邏輯非聯(lián)合運(yùn)算得到的。最簡(jiǎn)單的辦法還是使用權(quán)限字母來(lái)計(jì)算。
文件的默認(rèn)權(quán)限最大只能是 666,換算成字母就是"-rw-rw-rw-";而 umask 的值是 033,也換算成字母就是"-----wx-wx"。把兩個(gè)字母權(quán)限相減,得到的就是新建文件的默認(rèn)權(quán)限:(-rw-rw-rw-)-(-----wx-wx)=(-rw-r--r--)。
umask 默認(rèn)權(quán)限的修改方法
umask 默認(rèn)權(quán)限可以直接通過(guò)命令來(lái)進(jìn)行修改,例如:
[root@localhost ~]# umask 002
[root@localhost ~]# umask 033
不過(guò),通過(guò)命令進(jìn)行的修改只能臨時(shí)生效,一旦重啟或重新登錄就會(huì)失效。如果想讓修改永久生效,則需要修改對(duì)應(yīng)的環(huán)境變量配置文件 /etc/profile。例如:
[root@localhost ~]# vi /etc/profile
...省略部分內(nèi)容...
if [ $UID -gt 199]&&[ "'id -gn'" = "'id -un'" ]; then umask 002#如果UID大于199(普通用戶),則使用此umask值else
umask 022
#如果UID小于199(超級(jí)用戶),則使用此umask值fi
…省略部分內(nèi)容…
這是一段 Shell 腳本,大家目前可能看不懂,但是沒(méi)有關(guān)系,只需知道普通用戶的 umask 值由 if 語(yǔ)句的第一段定義,而超級(jí)用戶的 umask 值由 else 語(yǔ)句定義即可。 如果修改的是這個(gè)文件,則 umask 值是永久生效的。
我們學(xué)習(xí)了文件的基本權(quán)限和 umask 默認(rèn)權(quán)限這兩種權(quán)限,但是 Linux 的權(quán)限并不只有這兩種,其他的權(quán)限內(nèi)容我們會(huì)在后續(xù)章節(jié)中介紹,這里就不一一列舉了。