umask(程序的檔案權限掩碼) 講解
1 umask指令講解
- umask概述:登入系統之後在目前登入shel程序l中,建立一個檔案總是有一個預設權限的,預設權限的由來就是umask幹的事情,umask設定了使用者建立檔案的預設權限,它與chmod的效果剛好相反,umask設定的是權限“補碼”,而chmod設定的是檔案權限碼
- 針對目錄檔案來說x權限代表可以進入該目錄,是以說目錄檔案建立時是777和檔案掩碼運算
- 針對一般的檔案x權限代表該檔案可以執行,風險太高,一般初始指派是采用666和檔案掩碼運算
- 檢視該使用者目前系統的檔案權限掩碼的指令:
-
/*0022是系統目前預設的檔案權限碼,進行分析 第一個0代表suid 丢棄的權限; 第二個0代表本檔案/目錄擁有者什麼權限都沒丢棄(如果是檔案,x權限除外); 第三個2代表本檔案/目錄的使用者組丢棄了w權限(如果是檔案那麼它的x權限也丢棄); 第四個2代表本檔案/目錄的其他使用者能使用的權限隻有有r和x(檔案隻丢棄x) 綜合上面: 如果你新建立一個檔案,那麼它的權限是:-rw--r--r-- 即是:644 計算過程:666 & (~022) = 644 如果你新建立一個目錄,那麼它的權限是:drwxr-xr-x 即是:755 計算過程 777 & (~022) = 755 */
-
/* umask nnn 設定系統目前預設的檔案權限掩碼為nnn nnn取值範圍:000~777(8進制) 使用者退出之後,檔案權限掩碼會傳回預設值。如果要永久生效的話,必須在相應的配置檔案(/etc/login.defs)中修改 */
-
-
- 如何計算一個檔案的權限值了的:
-
/* mode:設定的檔案權限 cmask:檔案權限掩碼 檔案最終的權限碼:mode & (~cmask) 也可以了解為建立檔案時去掉檔案權限碼對應的權限位 4->r 2->w 1->x */
-
- umask設定注意:
- umask 指令允許你設定檔案建立時的預設模式,對應每一類使用者(檔案屬主、同組使用者、其他使用者)存在一個相應的umask值中的數字。對于檔案來說,這一數字的最 大值分别是6。系統不允許你在建立一個文本檔案時就賦予它執行權限,必須在建立後用chmod指令增加這一權限。目錄則允許設定執行權限,這樣針對目錄來說,umask中各個數字最大可以到7
2 umask函數講解
-
/******************** 函數功能:為目前程序設定檔案權限掩碼,傳回以前的檔案權限掩碼 ********************/ #include <sys/stat.h> mode_t umask(mode_t cmask); /*cmask是由下表列出的9個常量中的若幹個按位“或”構成的 S_IRUSR 使用者讀 S_IWUSR 使用者寫 S_IXUSR 使用者執行 S_IRGRP 組讀 S_IWGRP 組寫 S_IXGRP 組執行 S_IROTH 其他讀 S_IWOTH 其他寫 S_IXOTH 其他執行 */
-
在Linux中一個檔案的權限分為3組9個權限 分别為上面列出的9個,組間的順序為所有者,所屬組,其他人。例如:
ls -l test
-rw-rw-rw- 1 shmily shmily 0 5月 6 17:16 test
表示test檔案的權限為:所有者可讀可寫,所屬組可讀可寫,其他人可讀可寫 (r代表可讀 w代表可寫 x代表可執行 -代表未設定)
可用三位8進制數表示 則test的權限為666
-
umask的主要作用是在建立檔案時設定或者屏蔽掉檔案的一些權限
在建立一個檔案時要指明該檔案的權限,open函數的最後一個參數mode并不是要設定的權限,它需要執行以下操作
mode & (~cmask)得出的結構才是最終檔案的權限