云计算百科
云计算领域专业知识百科平台

Linux到底为什么要设置用户:用户组?

Linux 为什么要设置“用户:用户组”?
这不是历史遗留,而是 操作系统安全模型的基石。其核心目标是:在多用户共享系统资源的前提下,实现最小权限原则(Principle of Least Privilege)和职责隔离。


一、设计哲学:为什么需要身份?

▶ 1. 多用户系统的本质需求
  • Unix 起源:
    • 1970 年代大型机 → 多人共享一台计算机
    • 必须防止:
      • 用户 A 删除用户 B 的文件
      • 普通用户修改系统配置
  • 现代映射:
    • 即使单用户桌面,进程也需隔离(浏览器 ≠ 数据库 ≠ Web 服务)
▶ 2. 最小权限原则(PoLP)

“任何实体(用户/进程)只应拥有完成其任务所必需的最小权限。”

  • 用户:普通用户不能删除 /bin
  • 进程:Nginx 以 www-data 运行,无法读取 /root/.ssh

💡 核心认知:
用户 = 身份,用户组 = 角色,权限 = 能力边界


二、安全机制:用户与用户组如何工作?

▶ 1. 文件权限三元组

每个文件有三组权限:

$ ls -l /etc/passwd
-rw-r–r– 1 root root 2345 Jan 1 10:00 /etc/passwd
↑↑↑ ↑↑↑ ↑↑↑
u g o

  • u (user):文件所有者(root)→ 可读写
  • g (group):所属组(root)→ 可读
  • o (other):其他用户 → 可读
▶ 2. 用户组的协作价值
  • 场景:开发团队共享代码目录# 创建 dev 组
    sudo groupadd dev

    # 将用户加入组
    sudo usermod -aG dev alice
    sudo usermod -aG dev bob

    # 设置目录属组
    sudo chown -R :dev /project
    sudo chmod -R 775 /project # 组内可读写执行

  • 结果:
    • Alice 和 Bob 可互相修改文件
    • 其他用户无权访问
▶ 3. 进程身份继承
  • 启动时绑定身份:# PHP-FPM 配置
    [www]
    user = deploy
    group = deploy

  • 运行时权限:
    • 该进程只能访问 deploy 用户有权操作的文件
    • 即使代码被注入,攻击者也无法读取 /etc/shadow

三、工程实践:为什么程序员必须理解?

▶ 1. Web 服务部署
组件用户原因
Nginx www-data 静态文件只读,无法写入 PHP 代码
PHP-FPM deploy 可写入日志/缓存,但无法修改 Nginx 配置
MySQL mysql 数据目录隔离,防提权
▶ 2. Docker 容器安全
  • 最佳实践:RUN addgroup -g 1001 app && adduser -u 1001 -G app app
    USER app # 避免以 root 运行

  • 价值:
    • 容器逃逸后,攻击者仅获得低权限用户
▶ 3. CI/CD 权限控制
  • GitHub Actions Runner:
    • 以专用用户 actions 运行
    • 无法访问宿主机其他用户数据

四、避坑指南

陷阱破局方案
所有文件设为 root:root Web 服务无法写入日志 → 500 错误
忽略用户组协作 团队成员需 sudo 才能修改文件 → 效率低下
以 root 运行应用 一旦漏洞利用 → 整台服务器沦陷

五、终极心法

**“用户不是账户,
而是信任的边界——

  • 当你 创建用户,
    你在划定身份;
  • 当你 分配组,
    你在定义协作;
  • 当你 设置权限,
    你在铸造安全。

真正的系统安全,
始于对身份的敬畏,
成于对细节的精控。”


结语

从今天起:

  • Web 服务绝不以 root 运行
  • 团队项目用用户组管理权限
  • 容器内使用非 root 用户
  • 因为最好的系统安全,
    不是防火墙,
    而是每一字节的归属自觉。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Linux到底为什么要设置用户:用户组?
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!