Google Cloud VM实例多用户共享代码目录的最佳实践
多用户共享代码目录的最佳实践(GCP Compute Engine场景)
问题背景
我有一台GCP Compute Engine VM实例,/home目录下包含多个独立用户,每个用户都有自己的SSH密钥:
(base) user1@a100-80gb:/home$ ls user1 user2 user3 user4 user5
我希望创建一个/code目录来管理多个代码库,让所有用户都能访问。请问这种场景下的最佳实践是什么?
我曾考虑把/code目录建在/home下,结构如下:
(base) user1@a100-80gb:/home$ ls user1 user2 user3 user4 user5 code
但不确定这是不是最优方案,同时疑惑这个/code目录能不能有独立的SSH密钥用于GitHub(或者直接在/code目录下用ssh-gen生成密钥?)
附根目录文件夹列表参考:
(base) user1@a100-80gb:/$ ls bin dev home lib32 libx32 media opt root sbin sys usr boot etc lib lib64 lost+found mnt proc run srv tmp var
最佳实践方案
1. 目录位置:别放在/home下
/home是用户个人主目录的专属容器,共享资源放在这里不符合Linux文件系统规范。更合理的位置选这两个:
/srv/code:/srv专门用于存放服务相关的共享数据,适配代码库场景/opt/code:/opt用于存放可选应用或共享资源,也是合规选择
2. 权限与用户组管理
- 先创建一个共享用户组,比如
devs:sudo groupadd devs - 把所有需要访问
/code的用户加入这个组:sudo usermod -aG devs user1 sudo usermod -aG devs user2 # 其他用户以此类推添加 - 创建共享目录并设置正确权限:
这里的sudo mkdir /srv/code sudo chown root:devs /srv/code sudo chmod 2775 /srv/code2775权限中,2代表setgid位,能确保目录下新建的文件/子目录自动继承devs组权限,保证所有组内用户都能正常访问。
3. SSH密钥的处理(针对GitHub等平台)
共享目录不需要“独立SSH密钥”,Git操作是以执行命令的用户身份进行的,每个用户已有自己的密钥,直接用各自的密钥即可:
- 用户执行
git clone/git push等操作时,Git会自动读取当前用户主目录~/.ssh下的密钥,完全不用在/code目录下单独生成密钥。 - 如果需要统一使用共享密钥(比如用于CI/CD或机器人账户),可以把密钥放在公共位置(比如
/etc/ssh/shared_github_key),然后让用户修改~/.ssh/config,指定访问GitHub时使用这个密钥:
之后用户克隆仓库时用Host github.com-shared HostName github.com IdentityFile /etc/ssh/shared_github_key User gitgit clone git@github.com-shared:username/repo.git即可,同时要确保这个密钥文件的权限是600,组权限设为devs。
4. 额外建议
- 定期检查用户组成员,确保只有需要的用户能访问共享代码
- 可以给目录设置磁盘配额,避免单个用户占用过多空间
- 如果需要更细粒度的权限控制,可使用ACL(访问控制列表):
sudo setfacl -R -m g:devs:rwx /srv/code sudo setfacl -R -m d:g:devs:rwx /srv/code
内容的提问来源于stack exchange,提问作者demid
相关产品推荐
相关产品推荐

