一. 問題
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)