「Linux用户账号管理」用户账户分类与核心文件

218 阅读5分钟

用户账户分类

超级用户(root)

  • UID固定为0,拥有系统最高权限(可修改所有文件、进程和配置),例如rm -rf /强制删除整个系统。
  • 账户示例:
    root:x:0:0:root:/root:/bin/bash
    
  • 谨慎使用,避免误操作导致系统崩溃。
  • 处理方式
    # 避免直接登录 root,改用 sudo
    $ sudo apt update          # 临时获取 root 权限执行命令
    $ su - root               # 切换到 root 用户(需密码)
    

系统用户

  • 用途:运行系统服务、守护进程或应用程序。
  • UID范围:1-999(CentOS/RHEL)或 1-499(旧版 Debian/Ubuntu)
  • 特点:
    • 由系统自动创建,用于运行后台服务(如nginx、mysql)。
    • 无登录 Shell(通常设置为 /sbin/nologin),不可交互使用。
    • 主目录通常位于 /var 或 /run
    • 示例账户:
    mysql:x:105:111:MySQL Server,,,:/var/lib/mysql:/bin/false   # MySQL 服务账户
    nginx:x:107:113:Nginx web server:/var/lib/nginx:/usr/sbin/nologin
    

普通用户

  • 用途:用户日常操作
  • UID范围:1000~60000(不同Linux发行版可能不同),权限受限。
  • 特点:
    • 拥有登录 Shell(如 /bin/bash)
    • 主目录在 /home/用户名
    • 文件权限受限(无法修改系统关键文件)
    • 用于日常操作,如文件编辑、软件安装等。
    • 示例账户:
    id alice  # 输出:uid=1000(alice) gid=1000(alice) groups=1000(alice)
    
    • 创建示例:
    # 创建用户
    $ sudo useradd -m -s /bin/bash alice
    
    # 设置密码
    $ sudo passwd alice
    

用户账户管理文件

/etc/passwd

/etc/passwd 是 Linux 系统中存储用户账户信息的关键配置文件,它以明文形式记录了系统所有用户的基本属性。每行对应一个用户,字段用冒号分隔。 文件结构(每行7个字段,用冒号 : 分隔)

username:password:UID:GID:GECOS:homedir:shell

示例记录

root:x:0:0:root:/root:/bin/bash
nginx:x:103:107:Nginx web server:/var/lib/nginx:/usr/sbin/nologin
bob:x:1001:1001:Bob Smith, Room 101, +123456:/home/bob:/bin/bash

字段详解

字段顺序字段名说明示例值
1username登录用户名nginx, bob, root
2password密码占位符
x 表示密码在 /etc/shadow
*! 表示账户禁用
x
3UID用户ID(User ID):
0=root
1-999=系统账户
1000+=普通用户
0, 103, 1001
4GID主组ID(Group ID)1001
5GECOS描述信息(全名、联系方式等)Bob Smith, +123456
6homedir用户主目录路径/home/bob
7shell用户登录时默认 Shell(/sbin/nologin 禁止登录)/bin/bash

安全特性

  • 密码分离
    • 实际加密密码存储在 /etc/shadow(仅 root 可读)
    • /etc/passwd 必须全局可读(如 ls -l 显示 -rw-r--r--
  • 禁用账户
    # 在密码字段添加 "!" 禁用用户
    sudo usermod -L bob    # 锁定后显示为: bob:!x:1001:...
    

查看用户账户信息

# 查看/etc/passwd文件内容
cat /etc/passwd
# 查看指定用户信息
grep bob /etc/passwd
# bob:x:1001:1001::/home/bob:/bin/bash

解析

  • cat /etc/passwd:显示所有用户账户的基本信息。
  • grep bob /etc/passwd:查看bob用户账户的基本信息。

用户类型在文件中的体现

用户类型UID 特征示例记录片段
超级用户UID = 0root:x:0:0:root:/root:/bin/bash
系统账户UID 1-999syslog:x:104:108::/home/syslog:/bin/false
普通用户UID ≥ 1000alice:x:1002:1002::/home/alice:/bin/bash
无登录权限Shell = /sbin/nologinnginx:...:/usr/sbin/nologin

注意事项

  1. 避免手动编辑:尽量使用 usermod, useradd 等命令修改用户属性,防止格式错误。
  2. 备份文件:修改前先备份:
    sudo cp /etc/passwd /etc/passwd.bak
    
  3. 语法检查:修改后运行 pwck 验证文件有效性:
    sudo pwck /etc/passwd
    

/etc/shadow

/etc/shadow 是 Linux 系统中存储用户账户密码及安全策略的核心文件,通过隔离敏感信息解决 /etc/passwd 的安全隐患。权限为640(仅root可读),字段用冒号分隔。 文件结构(每行9字段,冒号 : 分隔)

username:encrypted_password:lastchg:min:max:warn:inactive:expire:reserved

典型记录

root:$y$j9T$8Sdk...xP1$:19669:0:99999:7:::
bob:$6$5bFz...Kb1$:19670:5:30:10:15:21000:

字段详解

字段顺序字段名说明示例值
1username用户名(与 /etc/passwd 对应)root, bob
2encrypted_password加密密码
$算法$salt$hash(如 $6$=SHA-512)
!!! = 账户禁用
* = 服务账户(无密码登录)
$6$5bFz...Kb1$
3lastchg上次修改密码的时间(距 1970-01-01 的天数)19669
4min密码修改最短间隔天数(0=随时可改)5
5max密码有效最大天数(99999=永不过期)30
6warn密码到期前警告天数10
7inactive密码过期后宽限天数(超时则禁用账户)15
8expire账户绝对过期日期(距 1970-01-01 的天数,空=永不过期)21000
9reserved保留字段

核心安全机制

  1. 强制权限控制

    $ ls -l /etc/shadow
    -rw-r----- 1 root shadow 1432 Jun 22 15:45 /etc/shadow  # 仅root和shadow组可读
    
  2. 密码哈希算法标识

    前缀算法安全性
    $1$MD5⚠️ 弱
    $2a$Blowfish
    $5$SHA-256✅✅
    $6$SHA-512✅✅✅
    $y$Yescrypt✅✅✅✅
  3. 账户状态控制

    # 禁用账户(添加 ! 到密码字段)
    sudo usermod -L bob   # 生成: bob:!$6$...: 
    
    # 解锁账户
    sudo usermod -U bob
    

查看用户密码信息

# 查看/etc/shadow文件内容(需root权限)
cat /etc/shadow

# 查看指定用户策略(需root权限)
grep bob /etc/shadow
# bob:$6$5bFz...Kb1$:19670:5:30:10:15:21000:

解析

  • sudo cat /etc/shadow:以root权限查看加密密码信息(普通用户无权查看)。
  • grep bob /etc/shadow:以root权限查看bob用户加密密码信息(普通用户无权查看)。

/etc/passwd 的关键区别

特性/etc/passwd/etc/shadow
主要用途存储用户基本信息(UID/GID等)存储密码和安全策略
可见性全局可读仅 root 访问
密码字段x(密码占位符)加密后的密码哈希值
安全风险泄露账户结构泄露会导致密码被暴力破解
修改工具usermod, vipwpasswd, chage, vipw -s

黄金准则

  1. 永不手动编辑
    必须使用专用命令:
    sudo passwd bob    # 修改密码
    sudo chage -E 2026-01-01 bob  # 设置过期时间
    
  2. 自动备份
    # 通过rsync备份
    sudo rsync -av /etc/shadow /backup/
    
  3. 定期审计
    # 检查空密码账户
    sudo awk -F: '$2 == "" {print $1}' /etc/shadow
    
理论练习

题目/etc/passwd文件中,用户字段的第七个字段表示什么?
答案:登录Shell(如/bin/bash)。

题目/etc/passwd中,若用户字段的第六个字段为/sbin/nologin,表示什么?
答案:用户无登录权限(通常为系统用户)。

题目/etc/shadow文件中,密码字段为!!表示什么?
答案:用户无密码或禁用登录。

题目/etc/shadow中,密码字段为*表示什么?
答案:用户账户被禁用(无密码)。

知识总结
  1. 用户账户分类: 超级用户(root)、普通用户、系统用户。
  2. 核心管理文件
    • /etc/passwd:存储用户基本信息。
    • /etc/shadow:存储用户加密密码和密码策略。