最近给公司部署了 git 服务器(CentOS 6.3),由于之前没有配置 git server 的经验,搞了半天才把配置搞定。这里就不讲配置的问题了。创建了账户、项目并设置 git 权限后,使用 a 账号开始测试。一切正常,没有问题。
第二天上班,给同事建了个账号 b(a,b 账号同在 git 用户组),出现问题了,pull 正常, push 失败,提示 objects 目录下有文件没有写入权限。
果断 ssh 上服务器,把账号 a 和 b 都放到 git 用户组。继续测试,还是报错。没办法,只好一路 cd 到 objects 下,ll,发现有些文件没有对同组用户开启 w 权限。想了想,用“linux 创建文件默认权限”作为关键词 Google 了一下,看了几篇文章,了解了 umask 命令。
下面贴几段网上的讲解:
umask是什么?
当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认权限,它与chmod的效果刚好相反,umask设置的是权限“补码”,而chmod设置的是文件权限码。一般在/etc/profile、$ [HOME]/.bash_profile或$[HOME]/.profile中设置umask值。
如何计算 umask 值?
umask命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、其他用户)存在一个相应的 umask 值中的数字。对于文件来说,这一数字的最大值分别是6。系统不允许你在创建一个文本文件时就赋予它执行权限,必须在创建后用 chmod 命令增加这一权限。目录则允许设置执行权限,这样针对目录来说,umask 中各个数字最大可以到7。
我们只要记住 umask 是从权限中“拿走”相应的位即可。
如:umask值为022,则默认目录权限为755,默认文件权限为644。
OK,开始设置各个账号的创建文件默认权限:
su root
password......
su a
umask 0002
su root
password......
su b
umask 0002
重新 push ,一切OK~
### 2013年12月31日补记
上次弄好后又出问题了,登录 a 用户一看,发现 umask 又输出 0022,也就是说,恢复了默认的设置。
原来 umask 命令只是本次登录有效,注销之后就失效了。
解决办法:把
umask 0002
这一行添加到 .bash_profile 文件里去,这样用户每次登录就可以执行了。