ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Linux用户管理与权限设置完全指南

Linux用户管理与权限设置完全指南

1. Linux用户管理基础概念

在Linux系统中,用户管理是系统管理员最常接触的基础操作之一。与Windows系统不同,Linux采用多用户设计理念,每个用户都拥有独立的权限空间和工作环境。这种设计源于Unix的"一切皆文件"哲学,用户本质上就是访问系统资源的权限集合。

我刚接触Linux时,最困惑的就是为什么不能像Windows那样随意操作系统文件。直到理解了Linux严格的权限机制才明白,这正是其稳定性和安全性的基石。每个用户都有自己的UID(用户ID),系统通过这个数字标识来区分不同用户。

提示:UID为0的用户是超级用户root,拥有系统最高权限。普通用户的UID通常从1000开始分配。

用户信息主要存储在三个关键文件中:

  • /etc/passwd:保存用户账户信息
  • /etc/shadow:保存加密后的用户密码
  • /etc/group:保存用户组信息

2. 用户账户操作全流程

2.1 创建新用户

使用useradd命令创建新用户是最规范的做法。我建议新手养成使用完整参数的习惯,避免后续权限问题:

sudo useradd -m -s /bin/bash -G sudo newuser

参数说明:

  • -m:自动创建用户家目录(/home/newuser)
  • -s:指定默认shell(/bin/bash最常用)
  • -G:将用户加入附加组(sudo组可获得管理员权限)

创建后需要立即设置密码:

sudo passwd newuser

常见坑:忘记-m参数会导致用户没有家目录,登录后各种报错。如果遇到这种情况,可以手动创建目录并修改所有者:

sudo mkdir /home/newuser sudo chown newuser:newuser /home/newuser

2.2 用户属性修改

usermod命令可以修改现有用户属性。最常用的几个场景:

  1. 修改用户主组:
sudo usermod -g developers newuser
  1. 将用户加入新组(不影响原有组):
sudo usermod -aG docker newuser
  1. 锁定/解锁账户:
sudo usermod -L newuser # 锁定 sudo usermod -U newuser # 解锁

2.3 删除用户

正确的用户删除应该包含清理相关文件:

sudo userdel -r olduser

-r参数会同时删除用户家目录和邮件池。如果不加这个参数,系统只会删除账户信息,文件会保留。

3. 用户组深度管理

3.1 组的基本操作

创建新组:

sudo groupadd developers

删除组:

sudo groupdel developers

查看用户所属组:

groups username

3.2 组权限的实际应用

我管理服务器时最常用的技巧:通过组权限实现协作开发。比如让多个开发人员共同维护一个项目目录:

  1. 创建共享组:
sudo groupadd webdev
  1. 将用户加入组:
sudo usermod -aG webdev dev1 sudo usermod -aG webdev dev2
  1. 设置目录权限:
sudo chown -R :webdev /var/www/project sudo chmod -R 2775 /var/www/project

这里的2775中,2表示设置SGID位,保证新建文件自动继承组权限。

4. 文件权限机制详解

4.1 权限表示法

通过ls -l看到的权限字符串如drwxr-xr-x,分解来看:

d rwx r-x r-x │ │ │ │ │ │ │ └─ 其他用户权限 │ │ └─── 所属组权限 │ └────── 所有者权限 └──────── 文件类型(d=目录,-=普通文件,l=链接等)

权限字符对应数字:

  • r (读) = 4
  • w (写) = 2
  • x (执行) = 1

所以rwxr-xr--可以换算为754。

4.2 特殊权限位

除了基本的rwx,还有三个特殊权限位:

  1. SUID(Set User ID):以文件所有者身份执行

    • 设置:chmod u+s file
    • 典型应用:/usr/bin/passwd
  2. SGID(Set Group ID):以文件所属组身份执行

    • 设置:chmod g+s file
    • 对目录设置时,新建文件自动继承目录组
  3. Sticky Bit:只有所有者能删除/重命名

    • 设置:chmod +t dir
    • 典型应用:/tmp目录

4.3 权限修改实战

修改文件所有者:

sudo chown user:group file

递归修改目录权限:

sudo chmod -R 755 /path/to/dir

设置默认权限(umask):

umask 002 # 新建文件权限=666-002=664,目录=777-002=775

5. sudo机制深度解析

5.1 sudo配置原理

sudo的配置文件是/etc/sudoers,但永远不要直接编辑这个文件!正确的做法是:

sudo visudo

这个命令会进行语法检查,避免配置错误导致sudo不可用。

典型授权格式:

username ALL=(ALL:ALL) ALL

表示:

  • 用户username
  • 在所有主机上(第一个ALL)
  • 可以以任何用户和组身份((ALL:ALL))
  • 执行任何命令(最后一个ALL)

5.2 实用sudo技巧

  1. 免密码执行特定命令:
username ALL=(ALL) NOPASSWD: /usr/bin/apt update
  1. 限制命令参数(提高安全性):
username ALL=(ALL) /usr/bin/systemctl restart apache2
  1. 查看可用sudo权限:
sudo -l

5.3 sudo与su的区别

特性sudosu
认证方式当前用户密码目标用户密码
权限范围可精细控制全权或受限
日志记录详细记录基本记录
环境变量保持当前用户环境切换为目标用户环境

实际工作中,我建议:

  • 管理员日常使用sudo
  • 仅在必须完全切换用户环境时使用su

6. 权限问题排查指南

6.1 常见错误场景

  1. "Permission denied"但权限看似正确

    • 检查父目录权限(需要x权限才能进入)
    • 检查SELinux状态(getenforce)
  2. 无法删除文件

    • 检查文件所在目录是否有w权限
    • 检查文件是否被锁定(lsof)
  3. sudo报"user not in sudoers file"

    • 确保用户属于sudo组
    • 检查/etc/sudoers配置

6.2 实用诊断命令

查看文件详细属性:

ls -la

检查用户有效权限:

getfacl file

追踪权限问题:

strace -o trace.log command

查看已打开文件:

lsof +D /path

7. 安全最佳实践

  1. 最小权限原则

    • 用户只获得必要的最小权限
    • 服务账户使用专用低权限用户
  2. 定期审计

    sudo find / -nouser -o -nogroup # 查找无主文件 sudo auditd # 启用审计守护进程
  3. 密码策略

    • 修改/etc/login.defs设置密码有效期
    • 使用pam_cracklib强化密码复杂度
  4. 特权管理

    • 限制root直接登录(修改/etc/ssh/sshd_config)
    • 使用sudo代替su

我在管理生产服务器时,曾遇到过因为一个测试账户权限过大导致的安全事件。从那以后,我养成了这些习惯:

  • 新用户创建后立即设置合理权限
  • 定期review用户和组权限
  • 重要操作前先测试权限影响
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进