多人协作用VPS时,核心答案就一句话:给每个人独立账号,用sudo授权替代共享root密码,再配合用户组和目录权限隔离各自的操作边界。这套做法既不耽误干活,又能盯住谁动了什么,省心也安全。
先搞清一件事:为什么不能共享root密码
很多小团队刚开始用服务器时,图省事把root密码发给所有人,这种做法的隐患不是立刻爆发的,而是细思极恐的。
- 你没法知道是哪位同事在凌晨两点执行了
rm -rf把自己网站的数据库清空了。 - 某人的电脑中了木马,密码被窃取,整个服务器被拖下水。
- 离职员工如果拿着root密码,轻则删库跑路,重则留个后门长期潜伏。
- 多人同时操作时,谁能说清某个配置是哪次修改造成的?
共享root等于把整个服务器的命运押注在所有人的人品和操作习惯上,这本身就是个糟糕的技术决策。
补充一个场景:如果你买的是国内机房的高防VPS,或者某云厂商的轻量服务器,一般都会默认禁止root密码登录,只允许密钥认证,这种情况下,给每个人创建独享账号是必然选择。
VPS多用户权限分配的核心架构
第一步:按照角色规划用户组
先别急着建一堆账号,花几分钟想想团队里有几类人,每类人需要什么级别的权限。
| 角色 | 建议用户组 | 权限范围 |
|---|---|---|
| 运维管理员 | ops |
可sudo、可装软件、可改系统配置 |
| 开发人员 | dev |
只能读日志、改自己项目目录,不能动系统 |
| 网站维护者 | www |
只管理Nginx/Apache配置和网站文件 |
| 数据库管理员 | dba |
只能操作MySQL/PostgreSQL相关命令 |
这种分组思路不是凭空想出来的,而是行业共识认为服务器权限管理应该遵循最小权限原则只给能完成任务的最少权限,不多给一分。
第二步:创建账号并归入用户组
假设你要给一位名叫zhangsan的运维同事建账号,具体命令如下:
# 创建用户并添加到ops组 useradd -m -G ops -s /bin/bash zhangsan # 设置初始密码 passwd zhangsan
如果是开发人员,就加入dev组:
useradd -m -G dev -s /bin/bash lisi
需要注意的细节:
-m参数让系统自动创建用户主目录,在/home/zhangsan这样的路径下。-

参数指定附加用户组,这里填的-Gops或dev需要提前建好。 -s /bin/bash指定登录后的Shell类型,不指定的话有些系统会默认nologin,导致无法登录。
第三步:用sudo管控管理权限
不我要强调一点:不要给普通用户直接修改 /etc/passwd 或者 /etc/sudoers 文件的权限,而是通过 visudo 命令来配置。
编辑 /etc/sudoers 文件:
visudo
在文件里添加类似这样的规则:
# 运维组可以执行所有sudo命令 %ops ALL=(ALL:ALL) ALL # 开发组只能查看系统状态,不能执行修改类命令 %dev ALL=(ALL) /bin/systemctl status , /usr/bin/tail , /bin/grep
上面第二条规则的意思是,dev组的用户只能通过sudo运行你指定清单里的命令,比如查看服务状态、查看日志文件、搜索文件内容,其他命令一律没权限。
这样设计的好处是:开发人员日常需求基本都能满足看日志、查进程、重启自己的PHP-FPM但改不了系统网络配置,也不能动防火墙规则。
目录权限才是多人协作的隐藏雷区
网站目录的归属怎么分配
一台VPS上往往运行着多个网站或项目,如果目录权限设置不当,就会产生一个尴尬局面:运维改不了网站文件,或者开发能顺手删掉别人的项目。
比如你有一台香港VPS,上面放了两三个客户的网站,各自有不同的代码库,合理的做法是:
# 创建一个项目组,webprojects groupadd webprojects # 把项目目录归属到对应组 chown -R root:webprojects /var/www/project-a chown -R root:webprojects /var/www/project-b # 设置目录权限,组内用户可读写,其他人只能查看 chmod -R 775 /var/www/project-a chmod -R 775 /var/www/project-b
再用 usermod 把需要参与项目A的同事加入 webprojects 组:
usermod -aG webprojects zhangsan
这样配置之后,zhangsan 就能正常修改 /var/www/project-a 里的文件了,但要注意,他同时也获得了项目B的写权限,因为权限是按组设置的,如果项目之间要严格隔离,就需要为每个项目单独建组。
这里有个核心原则:Linux权限模型的默认逻辑就是按用户、组、其他人三层控制。 你要面对的核心问题是设计一套用户组体系,而不是让Nginx或者FTP服务器去绕过去做权限管理。
修改目录归属后别忘了重启服务
很多人改完目录归属后发现网站在前端报500错误,原因通常是PHP-FPM运行的账户(一般是www-data)没有新目录的可读权限,用下面的命令确认PHP-FPM运行用户:

ps aux | grep php-fpm
如果显示运行用户是 www-data,那就把它也加到 webprojects 组里:
usermod -aG webprojects www-data chmod -R 750 /var/www/project-a
这里把目录权限收成了 750,也就是:文件所有者(root)可读写执行,组内成员(包含www-data和开发人员)可读可执行,其他人无权访问,更细粒度地控制了访问范围。
密钥登录与账号安全细节
用SSH密钥替代密码登录
用密码登录本身的风险是密码会被暴力破解,而且多人共享密码的规模越大,泄露面就越大,一个更稳妥的方案是让每个人用自己生成的密钥对。
操作路径: 在本地电脑生成密钥,上传公钥到服务器。
# 在本机生成密钥 ssh-keygen -t ed25519 -C "zhangsan@company.com" # 把公钥拷贝到服务器上(可以用ssh-copy-id) ssh-copy-id -i ~/.ssh/id_ed25519.pub zhangsan@你的服务器IP
这样 zhangsan 就能用私钥登录,密码登录可以直接关闭,关闭方式在SSH配置文件 /etc/ssh/sshd_config 中:
PasswordAuthentication no PubkeyAuthentication yes
修改后重启SSH服务:
systemctl restart sshd
SSH端口和登录地址的限定
如果你不想让所有人从任何IP都能访问服务器,那可以考虑在sshd配置里限定允许登录的IP网段,比如只允许公司公网IP段登录:
AllowUsers zhangsan@192.168.1. lisi@10.0.0.
这种配置在多人协作用VPS时非常实用,尤其是团队成员分散在不同城市的场景。
不同场景下的常见协作模式
几个人搭一个WordPress企业站
一台2核4G的VPS一般够用,典型的分工是:
- 一人管理服务器配置和安全补丁,拥有
sudo权限。 - 另一人负责网站模板修改和内容更新,只需要
/var/www/html目录的写权限。
推荐做法: 给网站维护者建一个独立账号,加入 www-data 用户组,目录权限设置成 775(组内用户可写),同时给这个账号配置SFTP登录权限,但不给Shell登录权限。
具体的操作方式:编辑 /etc/passwd,把该用户Shell改成 /usr/sbin/nologin,这样只能通过SFTP传输文件,不能执行任何远程命令。
搭建国内业务相关的多域名VPS
有时一台服务器要放多个客户的站点,这种情况下,除了上面说的用户组隔离外,开通SFTP账号时记得将默认目录指向各自的站点目录。

步骤概括来说就是:
- 为每个客户创建独立账号。
- 通过
usermod -d把该账号的家目录指向对应网站目录。 - 确保该目录的用户组归属和权限配置正确。
- 为该账号单独配置SSH密钥对,不设置密码登录。
这样多个客户共同使用一台VPS时,每个客户只能访问自己的网站目录,虽不十分完美,但已经是性价比很高的部署方式了。
需要某人临时操作服务器
比如外包工程师需要临时解决一个问题,开个临时账号,限定权限,给个密钥,用完立刻删除,具体流程是:
# 创建临时账号 useradd -m -s /bin/bash tempuser passwd tempuser # 限制它能执行的sudo命令(比如只能重启nginx) echo "tempuser ALL=(ALL) /usr/bin/systemctl restart nginx" >> /etc/sudoers.d/tempuser # 用完删除账号及家目录 userdel -r tempuser
这种操作方式既保留了对系统安全性的掌握,也没把root密码暴露出去。
常见问题解答
VPS服务器账号权限怎么分配才最合理?
按用户组分配,使用sudo管理提权,目录权限按组隔离,基本流程:先规划角色、再创建用户组、用 useradd -G 把用户加入组、通过 visudo 配置可执行命令范围、用 chmod 和 chown 控制目录访问。
多用户共用一个VPS时,会不会影响性能?
影响不大,VPS的负载主要看CPU、内存和带宽,登录用户数量对资源消耗几乎可以忽略,除非有人执行了极高负载的任务(如编译源码、抓取大量数据),才会互相影响,如果类似情况频繁发生,用 systemctl 限制CPU份额或者用cgroup做资源隔离即可。
每个人都要有root权限怎么办?
尽量不这样设计,如果确实需要,建议给特定用户开通sudo权限,而不是直接告诉他们root密码,你用 visudo 配置的sudo规则能记录每个用户执行过哪些特权命令,Linux本身的审计日志(/var/log/auth.log)也能追踪登录行为,直接把root密码发给所有人,前面说的所有安全设计就全部失去意义了。
多人协作用VPS是一个绕不开的话题,真正困难的部分不是技术操作,而是建立一个相对规范的使用习惯,先用用户组划分角色、限制sudo命令范围、再配置好目录权限和密钥登录,后面的管理工作会轻松很多,还是那句话,用独立的账号把每个人的操作边界划清楚,既保障安全,也留出了追溯问题的余地。