为团队配置 Linux 环境,简单高效的项目共享方案
设置用户和组
要有效管理我们的 GPU 服务器,首先需要创建新的用户账户,并将这些账户组织到一个专门的用户组中。这样做可以更容易地管理权限和访问控制。
创建用户和组
先创建个组
接下来创建用户
然后把用户添加到组里面
配置 SSH 公钥登录
为了让团队成员能够安全地通过 SSH 连接到服务器,统一使用公钥认证,禁止密码登录。
每个用户需要生成一对密钥(如果还没有的话),并将公钥发送给管理员。然后,管理员需要将这些公钥添加到用户的 .ssh/authorized_keys
文件中。
首先,确保每个用户的 home 目录下都有 .ssh
目录,如果没有,可以使用下面的命令创建:
然后,将公钥添加到 authorized_keys
文件中:
替换 [用户名]
和 [公钥内容]
为实际的用户名和公钥。
创建共享文件夹
之前我把代码放在 home 目录下,不过实践中发现这样不利于共享。
毕竟把某个用户 home 目录下的一个文件夹设置为共享目录,让其他用户访问,总觉得怪怪的。
通常为了安全性和组织性,还是创建一个专门的目录用于共享项目比较好,问了 GPT 是这么说的
安全性:避免不必要的权限泄露。当你将项目放在个人家目录下时,可能会不小心赋予其他用户过多的访问权限,这可能导致敏感信息的泄露或不小心的数据损坏。
易管理性:一个专门的共享目录使得管理更为简单明了。你可以轻松控制谁可以访问这个目录,而不必担心影响到其他个人数据或设置。
扩展性:随着团队的增长,可能会有更多的用户需要访问这些共享资源。有一个独立的共享目录可以更方便地管理用户和权限,而不是不断调整家目录下的权限设置。
清晰的权限界定:独立的共享目录让权限的设置和调整变得更加清晰和简单。例如,可以针对这个目录设置定制的安全策略和备份策略。
所以我在 /srv
目录里创建了一个目录 /srv/projects
用来共享。
组权限设置
接下来,将团队共享的项目文件夹 /srv/projects
的所有权设置给 gpugroup
组。
设置 SGID(Set Group ID)
SGID 是一个特殊的权限设置,它确保在一个目录下创建的任何新文件或目录都会自动继承该目录的组。这非常适合我们的项目目录,因为它可以让团队中的所有成员都能访问和修改文件,而不必担心单个文件的组设置。
你可以使用以下命令来设置 SGID 位:
例如,如果我们的项目目录是 /srv/projects
,命令将是:
这样设置后,所有在 /srv/projects
下创建的新文件和目录都将自动设置为该组,保持权限的一致性。
调整 umask (optional)
PS: 我没有设置这个,可以但没必要
umask 是一个系统设置,决定了新创建的文件和目录的默认权限。为了确保团队成员可以编辑彼此的文件,我们需要设置一个合适的 umask 值。
通常的 umask 值是 022
,这意味着新创建的文件默认权限是 644
(用户可读写,组和其他人可读),新目录的默认权限是 755
(用户可读写执行,组和其他人可读执行)。为了团队协作,我们可以设置 umask 为 002
,这样新文件的权限为 664
(用户和组可读写,其他人可读),新目录的权限为 775
(用户和组可读写执行,其他人可读执行)。
可以通过以下命令临时改变 umask 值:
为了永久改变,需要在用户的 shell 配置文件中设置,比如 .bashrc
或 .profile
:
其他
还有一些细节的,比如我之前把 conda 装到 home 目录里了
现在也得重新在 /srv/apps 里安装,原本在 home 里的就不要了
这样所有用户都能共享 python 的虚拟环境
复制文件时显示进度
cp -R 命令不支持显示进度
可以使用 rsync 或 pv 代替
rsync
参数解释:
-a
是归档模式,它保留符号链接、文件权限、用户组信息等。-h
使输出更易于阅读,使用人类可读的格式。--progress
显示复制进度。
pv
这个是搭配压缩工具使用的,有些系统不自带,可能得先安装。
这个命令将 source
目录打包并通过 pv
显示进度,然后在 destination
目录中解包。
小结
这样设置下来就基本搞定了
我最近还探索了一些项目管理工具,部署了 MatterMost
接下来可以写文章记录一下。
文章转载自:DealiAxy
评论