为团队配置Linux环境,简单高效的项目共享方案
配置Linux多用户共享环境?无非是组权限和SGID设置。SSH公钥认证,共享conda环境,复制进度用rsync。这些操作,简单高效,但何必如此折腾?
目录13 个章节
前言
最近好久没写博客了,事情太多了,我还搞了个新的好玩的项目,等后续做得差不多了来写篇文章介绍一下。
在我们目前的AI项目中,团队需要共同使用一台GPU服务器来做模型训练和数据处理。为了让每个团队成员都能高效地使用这台服务器,我们决定设置一个多用户共享环境。这样,无论是代码开发、模型测试还是结果验证,所有人都可以方便地访问并利用服务器的强大算力。
本文将记录一下配置Linux共享环境的过程,同时也希望能帮助那些面临类似需求的团队。
设置用户和组
要有效管理我们的GPU服务器,首先需要创建新的用户账户,并将这些账户组织到一个专门的用户组中。这样做可以更容易地管理权限和访问控制。
创建用户和组
先创建个组
sudo groupadd gpugroup
接下来创建用户
sudo adduser [用户名]
然后把用户添加到组里面
sudo usermod -a -G gpugroup username
配置SSH公钥登录
为了让团队成员能够安全地通过SSH连接到服务器,统一使用公钥认证,禁止密码登录。
每个用户需要生成一对密钥(如果还没有的话),并将公钥发送给管理员。然后,管理员需要将这些公钥添加到用户的 .ssh/authorized_keys 文件中。
首先,确保每个用户的 home 目录下都有 .ssh 目录,如果没有,可以使用下面的命令创建:
sudo mkdir /home/[用户名]/.ssh
sudo chmod 700 /home/[用户名]/.ssh
然后,将公钥添加到 authorized_keys 文件中:
echo [公钥内容] >> /home/[用户名]/.ssh/authorized_keys
sudo chmod 600 /home/[用户名]/.ssh/authorized_keys
替换 [用户名] 和 [公钥内容] 为实际的用户名和公钥。
创建共享文件夹
之前我把代码放在 home 目录下,不过实践中发现这样不利于共享。
毕竟把某个用户 home 目录下的一个文件夹设置为共享目录,让其他用户访问,总觉得怪怪的。
通常为了安全性和组织性,还是创建一个专门的目录用于共享项目比较好,问了GPT是这么说的
安全性:避免不必要的权限泄露。当你将项目放在个人家目录下时,可能会不小心赋予其他用户过多的访问权限,这可能导致敏感信息的泄露或不小心的数据损坏。
易管理性:一个专门的共享目录使得管理更为简单明了。你可以轻松控制谁可以访问这个目录,而不必担心影响到其他个人数据或设置。
扩展性:随着团队的增长,可能会有更多的用户需要访问这些共享资源。有一个独立的共享目录可以更方便地管理用户和权限,而不是不断调整家目录下的权限设置。
清晰的权限界定:独立的共享目录让权限的设置和调整变得更加清晰和简单。例如,可以针对这个目录设置定制的安全策略和备份策略。
所以我在 /srv 目录里创建了一个目录 /srv/projects 用来共享。
组权限设置
接下来,将团队共享的项目文件夹 /srv/projects 的所有权设置给 gpugroup 组。
sudo chown -R root:gpugroup /srv/projects
sudo chmod -R 775 /srv/projects
设置SGID(Set Group ID)
SGID 是一个特殊的权限设置,它确保在一个目录下创建的任何新文件或目录都会自动继承该目录的组。这非常适合我们的项目目录,因为它可以让团队中的所有成员都能访问和修改文件,而不必担心单个文件的组设置。
你可以使用以下命令来设置SGID位:
sudo chmod g+s /path/to/directory
例如,如果我们的项目目录是 /srv/projects,命令将是:
sudo chmod g+s /srv/projects
这样设置后,所有在 /srv/projects 下创建的新文件和目录都将自动设置为该组,保持权限的一致性。
调整 umask (optional)
PS: 我没有设置这个,可以但没必要
umask 是一个系统设置,决定了新创建的文件和目录的默认权限。为了确保团队成员可以编辑彼此的文件,我们需要设置一个合适的 umask 值。
通常的 umask 值是 022,这意味着新创建的文件默认权限是 644(用户可读写,组和其他人可读),新目录的默认权限是 755(用户可读写执行,组和其他人可读执行)。为了团队协作,我们可以设置 umask 为 002,这样新文件的权限为 664(用户和组可读写,其他人可读),新目录的权限为 775(用户和组可读写执行,其他人可读执行)。
可以通过以下命令临时改变 umask 值:
umask 002
为了永久改变,需要在用户的 shell 配置文件中设置,比如 .bashrc 或 .profile:
echo "umask 002" >> ~/.bashrc
其他
还有一些细节的,比如我之前把 conda 装到 home 目录里了
现在也得重新在 /srv/apps 里安装,原本在 home 里的就不要了
这样所有用户都能共享 python 的虚拟环境
复制文件时显示进度
cp -R 命令不支持显示进度
可以使用 rsync 或 pv 代替
rsync
rsync -ah --progress source destination
参数解释:
-a是归档模式,它保留符号链接、文件权限、用户组信息等。-h使输出更易于阅读,使用人类可读的格式。--progress显示复制进度。
pv
这个是搭配压缩工具使用的,有些系统不自带,可能得先安装。
tar cf - source/ | pv | tar xf - -C destination
这个命令将 source 目录打包并通过 pv 显示进度,然后在 destination 目录中解包。
小结
这样设置下来就基本搞定了
我最近还探索了一些项目管理工具,部署了 MatterMost
接下来可以写文章记录一下。
_EOF_
为团队配置Linux环境,简单高效的项目共享方案
- 本文作者:
- 程序设计实验室
- 版权声明:
- 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
相关文章
SSH 跳板机原理与配置:实现无缝跳板连接,一步直达目标主机
在日常运维或开发工作中,我们常常需要访问部署在内网的服务器。然而出于安全策略或网络拓扑的限制,内网服务器并不会直接向外部暴露端口,导致我们无法“直连”它们。此时,**跳板机**(Jump Host/Bastion Host)就成了必不可少的中转
2025-01-17 · Linux · 约 1 分钟
硬盘空间消失之谜:Linux 服务器存储排查与优化全过程
最近我发现服务器磁盘空间突然占用异常,经过排查,罪魁祸首竟然是 Docker 容器的日志文件!
2024-12-17 · Linux · 约 1 分钟
经历分享,发现挖矿木马后,服务器快速备份与重装(腾讯云平台)
服务器又中木马?备份重装一套走起,coscli搞定。一键脚本压缩上传,硬盘镜像SSH传输,安全加固到位。AI时代更需小心,重装系统省心省力。
2026-03-04 · Linux · 约 1 分钟
Linux编译安装Python3-6,理论上各个发行版通用
前言 最近笔者把一个django项目部署到一个新的服务器上,而这个服务器给的是CentOS6版本的系统,官方源很旧,还被运维把源搞坏了,没办法通过源安装Python3.6以及pip,所以只好用最原始的方法,编译安装! 注意 如果本机安装了python2,尽量不要管他,使用python3运行python脚本就好,因为可能有程序依赖目前的python2环境,不要动现有的python2环境! 官网下载的
2022-06-17 · Linux · 约 1 分钟
讨论
共 0 条加载评论中…