Quan Zhuo's Blog

在 Linux 上使用 Group 和 ACL 进行团队工作

2016-12-12

目前我们的工作站上大都是多人共享同一账号。大家共享一套全局的环境变量,在使用 git 的时 候,如果一个人配置了全局的个人信息,提交代码时容易造成混淆。很不方便,有时候还会导致一些 奇怪的问题。可以在工作站上为每人创建一个账号,个人完全可以按照自己的喜好去配置环境。

添加用户组

多个账号之间的协作通过用户组实现,先创建一个所有人共享的用户组:

sudo addgroup <group-name>

添加用户

然后创建多个需要的用户:

sudo adduser --ingroup <group-name> <user-name>

通过以上两个步骤,系统上已经有了多个属于同一个用户组的账号。每个账号都有自己的家目录: /home/<user-name>。自己家目录中的文件,同一用户组中的用户只具有读权限。这也正是我们 想要的。

在不更改 umask 的情况下,个人默认的创建文件夹权限为 755, 创建文件权限为 644。每一个用 户主目录下面的文件,别人是没有写权限的。这样一来,如果我们想要和他人共享一份代码的时候 (比如协作打patch),就需要使用 chmod -R 去手动更改权限了。一是这个操作很慢,二是大 部分情况下,当你需要使用 chmod -R 命令的时候,都说明了你的权限配置不太合适。我们可以通 过 ACL(访问控制列表)的设置来更改大家默认的文件夹以及文件的创建权限。

建立共享文件夹

创建一个大家共享的文件夹,该文件夹最好位于一个大分区之上。比如我的 /home 挂载点上挂了 一个 2T 的硬盘,我就在 /home 下创建了一个共享文件夹。

sudo mkdir /home/share

经过上面的命令 /home/share 变成了 root 用户的,把它改为你自己的

sudo chown <your-user-name>:<your-group> /home/share

设置 ACL权限

下面改变 /home/share 目录下的默认创建权限

chmod g+s /home/share
setfacl -d -m g::rwx /home/share
setfacl -d -m o::rw /home/share

通过上面的设置,同一用户组的用户在 /home/share 目录下创建的文件的默认权限为 664,创建 的文件夹的默认权限为 775。大家就可以进行协作了。由于大家是使用不同的账号登录的,有各自 的环境变量,相互之间是不会影响的。

添加到 sudo 用户组

默认情况下,ubuntu 系统只赋予了安装系统的用户 sudo 权限。使用 adduser 命令添加的用户 是不能执行 sudo 命令的。不过因为安装的软件是系统级的,所有的用户都可以使用管理员安装的 软件。因此这一步是可选的。

sudo adduser <user-name> sudo

上一篇 理解 repo

评论