go新建文件權限與設置不符

一. 問題

fileName := "/Users/my/tests/perm_file"
f, _ := os.OpenFile(fileName, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666)
//代碼
f.Close()

上述代碼是打開一個文件,若是文件不存在則建立一個新文件,同時權限設置爲0666(-rw-rw-rw-),但實際生成的文件權限可能與你認爲的不一致:shell

bogon:tests didi$ ll perm_file
-rw-r--r--  1 my  staff  0  1 12 16:06 perm_file

這個跟umask值相關,下面說明下umask安全

功能說明:指定在創建文件時預設的權限掩碼。
語  法:umask [-S][權限掩碼]
補充說明:umask可用來設定[權限掩碼]。[權限掩碼]是由3個八進制的數字所組成,將現有的存取權限減掉權限掩碼後,便可產生創建文件時預設的權限。
參  數:
-S  以文字的方式來表示權限掩碼。 文件:用八進制基數666,即無x位(可執行位)rw- rw- rw-.執行位需由用戶自行加入。code

umask就是系統的一個安全機制,經過設置不一樣的權限,能夠達到限制用戶操做的目的,有效地保證了文件的完整性。class

接着說上面的例子 須要的權限是-rw-rw-rw-,但實際生成的文件權限是-rw-r--r--,用戶組和其餘用戶的w權限被去掉了,查看下系統的umask值test

bogon:tests my$ umask
0022

umask值是0022,r是4,w是2,x是1,對應以下 |說明|所屬用戶|所屬用戶組|其餘用戶| |:---|:---:|:---:|:---:| |須要的|-rw-|rw-|rw-| |減去umask|0|2(w)|2(w)| |獲得|-rw-|r--|r--|file

二. 解決方法

1.設定umask值

syscall.Umask(0)

2.經過chmod從新賦權限

os.Chmod(fileName, 0666)
相關文章
相關標籤/搜索