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)
相关文章
相关标签/搜索