Linux 用户与权限多团队共用一台服务器怎么分一、一台服务器三个团队谁把谁的文件删了公司有台 64C/256G 的测试服务器运维、开发、数据三个团队共用。某天开发小王rm -rf /data/*把数据组的 ETL 结果全清了——因为大家都在用 root/data 谁都能写。这不是段子这是真实的生产事故。多团队共用一台服务器权限不分定时炸弹。今天把 Linux 用户与权限管理体系讲清楚用户/组怎么建、目录权限怎么分、sudo 怎么收口、ACL 怎么补位一套组合拳下来各团队互不干扰出问题可追溯。二、核心概念用户、组、权限三位一体Linux 权限模型就三句话每个文件属于一个用户owner和一个组group权限分三组owner / group / others每组有 read / write / execute用户可以属于多个组组是权限分配的基本单位# 查看文件权限ls-ld/data/backend# drwxrwx--- 2 deploy backend 4096 Jun 17 10:00 /data/backend# ││││││││││# │┴─┬─┘│┴─┬─┘│┴─┬─┘# type owner group others# rwx rwx --- → owner可读写执行group可读写执行others无权限多团队共用服务器的核心思路一个团队一个组目录归属对应组权限用 group 控制。三、实战多团队权限划分方案场景运维组ops、后端组backend、数据组data共用一台服务器。1. 创建团队组和用户# 1. 创建三个团队组groupaddopsgroupaddbackendgroupadddata# 2. 创建用户并加入对应组useradd-m-gops zhangsan# 运维张三useradd-m-gbackend xiaowang# 后端小王useradd-m-gdata lisi# 数据李四# 3. 验证idzhangsan# uid1001(zhangsan) gid1001(ops) groups1001(ops)idxiaowang# uid1002(xiaowang) gid1002(backend) groups1002(backend)2. 创建团队目录并设置权限# 1. 创建团队数据目录mkdir-p/data/ops /data/backend /data/data# 2. 设置目录归属组 ownershipchownroot:ops /data/opschownroot:backend /data/backendchownroot:data /data/data# 3. 设置权限ownerrwx, grouprwx, others---chmod770/data/opschmod770/data/backendchmod770/data/data# 4. 验证ls-ld/data/*# drwxrwx--- 2 root ops 4096 ... /data/ops# drwxrwx--- 2 root backend 4096 ... /data/backend# drwxrwx--- 2 root data 4096 ... /data/data这样各团队只能进自己的目录互不干扰。3. SGID新建文件自动继承组权限上面有个问题用户在 /data/backend 下新建的文件默认组是用户的主组backend这没问题。但如果某个用户通过附加组访问其他目录新建文件的组可能不对。SGID 解决这个问题# 给目录设置 SGIDchmodgs /data/backend# 效果在该目录下新建的文件/子目录自动继承目录的组su- xiaowangtouch/data/backend/test.txtls-l/data/backend/test.txt# -rw-r--r-- 1 xiaowang backend ... test.txt ← 组是 backend不是 xiaowang 的主组# 递归设置 SGID含已有子目录find/data-typed-execchmodgs{}\;4. Sticky Bit防止互相删文件770 权限下同组用户可以互相删除对方的文件因为组有 write 权限。加Sticky Bit后只有文件 owner 才能删自己的文件# 设置 Sticky Bit同 /tmp 的机制chmodt /data/backend# 验证ls-ld/data/backend# drwxrwx--T 2 root backend ... /data/backend# ↑ T Sticky Bit 生效# 效果小王能写 /data/backend但删不了同组小李的文件最佳实践组合# 目录权限 770 SGID Sticky Bit 3770chmod3770/data/backend# 3 SGID(2) Sticky(1)# 验证ls-ld/data/backend# drwxrws--T 2 root backend ... /data/backend5. 附加组跨团队协作运维小张偶尔需要查看后端日志但不需要写权限# 方案一把小张加入 backend 附加组给读写权限usermod-aGbackend zhangsanidzhangsan# uid1001(zhangsan) gid1001(ops) groups1001(ops),1002(backend)# 方案二推荐用 ACL 精细控制只给读权限setfacl-mu:zhangsan:rx /data/backend getfacl /data/backend# user::rwx# user:zhangsan:r-x ← 小张只读# group::rwx# mask::rwx# other::---附加组 vs ACL 怎么选场景方案一个人需要另一个组的完整读写权限附加组一个人只需要读权限ACL临时授权随时回收ACLsetfacl -x 删除多人统一管理附加组改组就行四、sudo 收口禁 root 直登按团队授权多人共用服务器用 root 操作无法追溯谁干了什么。必须做两件事1. 禁止 root SSH 直登# /etc/ssh/sshd_configPermitRootLogin no systemctl restart sshd2. 按团队配置 sudo 权限# /etc/sudoers.d/ops运维组全部权限%opsALL(ALL)ALL# /etc/sudoers.d/backend后端组只能重启自己的服务%backendALL(root)/usr/bin/systemctl restart backend-app, /usr/bin/systemctl status backend-app# /etc/sudoers.d/data数据组只能操作自己的目录和脚本%dataALL(root)/usr/bin/systemctl restart etl-*, /usr/local/bin/run_etl.sh验证 sudo 配置# 查看用户能执行哪些 sudo 命令sudo-lUxiaowang# User xiaowang may run the following commands:# (root) /usr/bin/systemctl restart backend-app, /usr/bin/systemctl status backend-app审计谁用了 sudo 做了什么# 查看 sudo 日志grepsudo/var/log/secure# CentOSgrepsudo/var/log/auth.log# Ubuntu# 或者 journalctljournalctl-tsudo--sincetoday五、ACL 补位传统权限搞不定的场景传统权限只能设 owner/group/others 三级ACL 可以给任意用户设权限1. ACL 基本操作# 给用户设权限setfacl-mu:zhangsan:rx /data/backend# 小张只读setfacl-mu:lisi:rwx /data/backend# 李四读写执行# 给组设权限setfacl-mg:ops:rx /data/backend# 运维组只读# 删除某条 ACLsetfacl-xu:zhangsan /data/backend# 清空所有 ACLsetfacl-b/data/backend# 递归设置目录已有文件setfacl-R-mu:zhangsan:rx /data/backend/# 默认 ACL新建文件自动继承setfacl-d-mu:zhangsan:rx /data/backend/2. maskACL 的天花板# mask 限制了 ACL 能给的最大权限setfacl-mu:zhangsan:rwx /data/backend setfacl-mm::rx /data/backend# 把 mask 设为 rxgetfacl /data/backend# user:zhangsan:rwx #effective:r-x ← 实际只有 rx# mask::r-x# 改 mask 会影响所有 ACL 用户的实际权限要小心3. ACL 典型场景场景新人入职需要临时查看数据组目录# 授权setfacl-R-mu:newguy:rx /data/data/ setfacl-d-mu:newguy:rx /data/data/# 新文件也继承# 离职或权限到期一键回收setfacl-R-xu:newguy /data/data/六、权限速查表需求命令创建团队组groupadd 组名创建用户并指定组useradd -m -g 组 用户用户加附加组usermod -aG 组 用户目录归属组chown root:组 目录目录权限770chmod 770 目录SGID新建文件继承组chmod gs 目录Sticky Bit防删他人文件chmod t 目录组合 3770chmod 3770 目录ACL 授权setfacl -m u:用户:权限 目录ACL 默认继承setfacl -d -m u:用户:权限 目录ACL 查看getfacl 目录ACL 删除setfacl -x u:用户 目录查看 sudo 权限sudo -lU 用户查看 sudo 日志journalctl -t sudo --since today七、总结一句话总结多团队共用服务器核心是一组一目录、770SGIDSticky、sudo 按组收口、ACL 补位精细控制。落地清单每个团队建一个专用组groupadd用户主组对应团队团队目录chmod 3770770 SGID Sticky Bit禁止 root SSH 直登PermitRootLogin nosudo 按组授权/etc/sudoers.d/按团队拆文件跨团队只读需求用 ACLsetfacl不用附加组给读写临时权限用 ACL 默认继承到期setfacl -x回收定期审计getfacl检查目录权限、sudo -lU检查 sudo 权限