歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux下的權限掩碼umask

Linux下的權限掩碼umask

日期:2017/3/1 9:12:29   编辑:Linux編程

權限掩碼umask

我們都知道在linux下創建一個文件或者目錄之後是可以通過chmod等命令進行權限設置,來達到給當前用戶、用戶組用戶以及其他用戶分配不同的訪問權限。那麼,我們新創建的目錄和文件本身也是有它的默認權限的,這個默認權限是什麼,就是由權限掩碼umask所確定的。它的功能可以說與chmod剛好相反的,代表默認拿走的也就是說不要的權限。

所以說,umask是用來指定"目前用戶在新建文件或者目錄時候的權限默認值"。那我們 如何得知或者設置這個umask呢?

在linux下我們查看的方式有兩種,一種可以直接輸入umask,就可以看到數字形態的權限設置分數,一種則是加-S(Symbolic)參數,就能以符號類型的方式來顯示出權限了。我先進行一次查看,顯示如下所示:

我們在這裡看到的0022有四組數字,第一組代表的是特殊權限,我們這裡先不做討論。

然而,在目錄和文件的默認權限屬性是不同的,因為對於一個目錄來說它的x權限也就是執行權限是很重要的,進入目錄等操作都是需要目錄具有執行權限的,而對於文件來說,一般情況都是用於數據的記錄操作,所以一般不需要執行權限。從而,在linux下默認的情況是這樣的:

▶ 如果用戶創建的是目錄,則默認所有權限都開放,為777,默認為:drwxrwxrwx

▶ 如果創建的是文件,默認沒有x權限,那麼就只有r、w兩項,最大值為666,默認為:-rw-rw-rw-

那麼之前所說的拿走的權限就是這裡這個默認值要減掉的權限,r、w、x分別是4、2、1,要拿掉讀權限就輸入4,拿掉寫權限就輸入2,以此類推。

再看上圖,umask為022,也就是說,對於當前用戶沒有拿掉權限,group用戶和other用戶都被拿走了w權限,所以此時如果用戶進行創建目錄和文件的時候,默認權限是會進行如下的減法操作:

新建文件:666-022=644;

新建目錄:777-022=755.

我們來驗證一下是不是這樣做的:

可以看到確實是這樣的,目錄的默認權限是rwxr-xr-x(755),文件的默認權限是-rw-r--r--(644)。

Umask的設置:

--------------------------------------------------------------------

在上面的umask為022,我們創建的目錄對於同組用戶是沒有寫權限的,在實際中可能需要給同組用戶能夠在目錄下創建和修改文件,那麼此時需要創建的目錄同組用戶是具有寫權限的,也就是說我們的umask不要拿走同組用戶的寫權限,那麼就是把umask設置為002就可以達到效果。

Umask的設置很簡單,只需要在umask命令後加想要拿掉的權限數字就行:

可以看到此時新建的目錄是具有寫權限的。

Linux下的etc/profile和etc/bashrc中都有默認的umask設置,我們來看一下:

這個是在etc/profile中的一部分內容,可以看到根據不同的uid設置了不同的umask,其實在etc/bashrc文件中也有基本相同的這部分代碼,我們可以在這兩個文件中設置umask,那麼二者有什麼區別呢?如果實在etc/profile中修改,只有在重新登錄用戶的時候才會發生改變,而在etc/bashrc中修改的話要是切換目錄就會發生改變,因為profile是在登錄用戶的時候調用的,而bashrc是在打開一個shell時候調用。在這裡不做詳細介紹。一般情況下,是不建議這麼修改的,我們如果要設置的話就直接用umask命令做更改就行。

Root用戶/普通用戶

從上面我們又可以發現,在profile中設置了兩個umask。之前我們是在root目錄下查看的,此時我們切換到普通用戶dh進行查看:

可以看到確實和root用戶下不一樣,此時的umask是0002,也就是說默認拿掉的權限少了。這是linux系統基於安全的考慮,對於一般用戶身份,保留了用戶組的寫權限,而root 用戶下是拿掉了這項權限的。

默認權限的計算:

--------------------------------------------------------------------

可以看到上面在計算創建的文件和目錄的默認權限的時候,我寫的是這樣的:666-022=644;777-022=755.,但這並不是做了對應數字的加減,剛剛看到數字相減的結果和最後驗證的結果是一樣的,但這只是巧合而已。

我們知道上面的每一個數字是代表著某一個用戶對於文件或者目錄有沒有讀、寫、執行權限的衡量,比如6,代表了rw-,即只有度讀和寫權限,是421中4+2的結果,所以並不是一個單純的十進制數,我們在計算的時候並不能直接以十進制相減來計算。

其實也很簡單,我們只要知道421分別對應rwx,在計算的過程中用rwx來算就行了,或者就用二進制計算。這個熟練一點的話根本不需要方法的,完全口算就可以出來的,熟練就好。

Copyright © Linux教程網 All Rights Reserved