1. 为什么需要多用户隔离实验室刚买了一台Ubuntu服务器几个同学要共用这台机器跑实验。刚开始大家图省事全都用root账号登录结果没两天就出问题了——有人装的Python包把系统环境搞乱了有人误删了别人的数据还有人把系统配置文件改崩了。这种混乱场景正是多用户隔离要解决的问题。想象一下这就像合租公寓。如果所有人共用一把钥匙谁都能进每个房间那私人物品安全就得不到保障。服务器用户隔离就是给每个租客用户分配独立房间home目录和私人钥匙SSH密钥既能共享公共区域系统资源又能保护个人空间。技术层面看用户隔离能实现三大目标环境独立每个用户的Python/R环境、PATH变量互不干扰权限控制防止普通用户误操作系统文件安全审计通过用户ID追踪操作记录2. 从零创建隔离用户2.1 两种创建方式的区别Ubuntu提供了两个看似相似的命令sudo adduser new_user # 交互式创建 sudo useradd -m -s /bin/bash new_user # 非交互式我实测发现adduser更适合新手因为它会自动创建/home/new_user目录设置默认shell为bash交互式设置密码创建同名用户组而useradd需要手动加-m参数才会创建家目录忘记加-s参数会导致用户登录后没有bash环境。曾经有同事用useradd创建用户后死活登录不上就是因为漏了-s参数。2.2 配置SSH密钥登录密码登录既麻烦又不安全推荐用密钥对认证。操作步骤本地生成密钥对如果已有可跳过ssh-keygen -t ed25519 -C your_emailexample.com将公钥上传到服务器ssh-copy-id -i ~/.ssh/id_ed25519.pub new_userserver_ip禁用密码登录提升安全性sudo nano /etc/ssh/sshd_config中修改PasswordAuthentication no ChallengeResponseAuthentication no然后重启服务sudo systemctl restart sshd注意执行前确保至少一个账号已配置密钥登录否则会被锁在服务器外3. 精细化的权限控制3.1 sudo权限的黄金法则给用户加sudo权限就像发万能门卡必须谨慎。建议通过sudo visudo编辑比直接改/etc/sudoers更安全添加new_user ALL(ALL) NOPASSWD: /usr/bin/apt,/usr/bin/pip这表示允许new_user无需密码执行apt和pip但其他sudo操作仍需密码。我团队曾有人误执行sudo rm -rf /*就是因为给了无限制的sudo权限。3.2 目录权限的最佳实践用ls -ld ~new_user查看目录权限正常应显示drwxr-xr-x 6 new_user new_user 4096 Aug 1 10:00 /home/new_user如果权限异常比如其他用户有写权限用以下命令修复sudo chmod 755 /home/new_user # 设置目录权限 sudo chown -R new_user:new_user /home/new_user # 递归修改属主4. 验证隔离效果4.1 Python环境测试分别在两个用户下执行pip install --user numpy # 仅当前用户安装 pip list --user # 查看用户级安装包你会看到两个用户的包列表完全不同。这是因为pip默认将包安装到~/.local/lib/pythonX.X/site-packages各用户独立。4.2 磁盘配额限制防止某个用户占满磁盘安装配额工具sudo apt install quota编辑/etc/fstab在对应分区添加usrquota选项重新挂载sudo mount -o remount /为用户设置限制sudo setquota -u new_user 500M 1G 0 0 / # 软限制500M硬限制1G5. 高级隔离方案5.1 用AppArmor限制进程比如限制用户只能访问特定目录sudo apt install apparmor-utils sudo aa-genprof /usr/bin/python3然后在生成的配置文件中限制文件访问路径。5.2 容器化隔离对于需要完全隔离的场景可以用LXC容器sudo apt install lxc sudo lxc-create -n user1_env -t download -- -d ubuntu -r focal -a amd64每个用户获得自己的容器内核共享但用户空间完全隔离。6. 日常管理技巧查看用户登录记录last -a | head -10 # 最近10条登录记录批量创建用户适合团队入驻for user in user1 user2 user3; do sudo adduser --disabled-password --gecos $user sudo mkdir /home/$user/.ssh sudo cp ~admin/.ssh/authorized_keys /home/$user/.ssh/ sudo chown -R $user:$user /home/$user/.ssh done用户离开时完整清理sudo deluser --remove-home departed_user这套方案在我们实验室稳定运行了三年最多时20多人共用一台服务器从未出现用户间互相干扰的情况。关键是要在便利性和安全性之间找到平衡点既不能限制太死影响效率也不能放任不管导致混乱。