冒险岛079

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 13|回复: 0

Day 06 用户与用户组管理

[复制链接]

613

主题

13

回帖

1961

积分

管理员

积分
1961
发表于 昨天 06:00 | 显示全部楼层 |阅读模式
Linux 是天生的多用户操作系统。这意味着什么?你的服务器上可以同时存在几十个用户,各干各的,互不干扰——前提是你把用户和权限管理搞明白了。

这篇文章带你吃透 Linux 用户与用户组管理的核心知识。读完之后,你能清楚地回答三个问题:用户信息到底存在哪?怎么增删改用户?用户组又是怎么回事?

先搞懂 Linux 的多用户体系

在 Linux 的世界里,每个用户都有一个唯一的数字编号,叫 UID(User ID)。系统内部认的不是用户名,而是这个数字。

用户大致分三类:

  • root 用户:UID 为 0,拥有系统最高权限,能干任何事。权力大,风险也大,日常操作别用它。
  • 系统用户:UID 通常在 1-999 之间,给各种服务进程用的,比如 nginx、mysql。这些用户一般不能登录系统。
  • 普通用户:UID 从 1000 开始,就是你我这样的真实使用者。

    每个用户必须属于至少一个用户组。创建用户时,系统默认会建一个同名的组作为主组。你还可以把用户加到别的组里(附加组),方便做权限管理。

    坦白说,很多新手觉得用户组没什么用。但当你管理一台多人协作的服务器时,用户组就是最省心的权限管理方式——给组设权限,组里的人自动继承,不用一个一个改。

    三个关键文件,用户信息的"数据库"

    Linux 没有用花哨的数据库存用户信息,就是三个纯文本文件。了解它们的结构,排查问题时能帮大忙。

    /etc/passwd —— 用户账号信息

    别被名字骗了,这个文件里其实没有密码(早期有,后来挪走了)。每一行代表一个用户,用冒号分隔成 7 个字段:
    1. username:x:UID:GID:描述信息:家目录:登录Shell
    复制代码

    举个真实的例子:
    1. zhangsan:x:1001:1001:Zhang San:/home/zhangsan:/bin/bash
    复制代码

    逐个字段解读:

    | 字段 | 含义 | 示例 |
    |------|------|------|
    | username | 用户名 | zhangsan |
    | x | 密码占位符,实际密码在 shadow 文件 | x |
    | UID | 用户 ID | 1001 |
    | GID | 主组 ID | 1001 |
    | 描述信息 | 备注,可以为空 | Zhang San |
    | 家目录 | 用户登录后的默认目录 | /home/zhangsan |
    | 登录 Shell | 用户使用的命令解释器 | /bin/bash |

    如果登录 Shell 是
    1. /sbin/nologin
    复制代码
    ,说明这个用户不能交互登录,通常是系统服务用户。

    /etc/shadow —— 密码的真正藏身处

    这个文件只有 root 能读,存放加密后的密码和密码策略信息:
    1. zhangsan:$6$xxxx...:19800:0:99999:7:::
    复制代码

    关键字段包括:加密密码、上次修改时间、最短修改间隔、最长有效期、过期前警告天数等。如果密码字段是
    1. !!
    复制代码
    1. *
    复制代码
    ,表示账号被锁定或没设密码。

    /etc/group —— 用户组信息

    每行一个组,4 个字段:
    1. groupname:x:GID:组成员列表
    复制代码
    1. developers:x:1002:zhangsan,lisi
    复制代码

    组成员列表里用逗号分隔。注意,用户的主组关系记录在
    1. /etc/passwd
    复制代码
    的 GID 字段里,不会出现在这个成员列表中。

    用户管理实操

    创建用户:useradd

    最基本的用法:
    1. useradd zhangsan
    复制代码

    这会自动完成:创建用户、分配 UID、创建同名主组、建立家目录。但新用户还没密码,不能登录。

    更常用的是带参数创建:
    1. useradd -m -s /bin/bash -G developers -c "张三" zhangsan
    复制代码

    参数解释:

    1. -m
    复制代码
    :强制创建家目录
    1. -s /bin/bash
    复制代码
    :指定登录 Shell
    1. -G developers
    复制代码
    :加入附加组
    1. -c "张三"
    复制代码
    :添加备注信息

    创建完别忘了设密码。

    设置密码:passwd
    1. passwd zhangsan
    复制代码

    系统会让你输入两次新密码。普通用户只能改自己的密码,root 可以改任何人的。

    几个实用技巧:
    1. # 锁定用户(禁止登录)
    2. passwd -l zhangsan
    3. # 解锁用户
    4. passwd -u zhangsan
    5. # 强制用户下次登录时修改密码
    6. passwd -e zhangsan
    复制代码

    修改用户:usermod

    用户创建后需要调整?用
    1. usermod
    复制代码
    ,参数和
    1. useradd
    复制代码
    很像:
    1. # 修改用户名
    2. usermod -l newname zhangsan
    3. # 修改家目录并迁移文件
    4. usermod -d /home/newname -m zhangsan
    5. # 添加附加组(注意 -a 参数,不加会覆盖原有附加组)
    6. usermod -aG docker zhangsan
    7. # 修改登录 Shell
    8. usermod -s /sbin/nologin zhangsan
    复制代码

    这里有个坑要特别提醒:
    1. -G
    复制代码
    不加
    1. -a
    复制代码
    会直接替换所有附加组。比如用户原来在 developers 和 docker 两个组,你执行
    1. usermod -G test zhangsan
    复制代码
    ,用户就只剩 test 这一个附加组了。所以追加组的时候,
    1. -aG
    复制代码
    两个参数要一起用。

    删除用户:userdel
    1. # 只删除用户,保留家目录
    2. userdel zhangsan
    3. # 连家目录一起删
    4. userdel -r zhangsan
    复制代码

    我的建议是:生产环境别轻易加
    1. -r
    复制代码
    。万一用户目录里有重要数据,删了就找不回来了。先把用户删掉(或锁定),确认没问题后再手动清理目录。

    用户组管理

    创建组:groupadd
    1. # 创建普通组
    2. groupadd developers
    3. # 指定 GID 创建
    4. groupadd -g 2000 devops
    复制代码

    删除组:groupdel
    1. groupdel developers
    复制代码

    注意:如果某个用户的主组是这个组,删除会失败。你得先把用户的主组改掉。

    修改组:groupmod
    1. # 改组名
    2. groupmod -n newname oldname
    3. # 改 GID
    4. groupmod -g 3000 developers
    复制代码

    管理组成员:gpasswd

    除了
    1. usermod -aG
    复制代码
    ,还可以用
    1. gpasswd
    复制代码
    来管理组成员:
    1. # 添加用户到组
    2. gpasswd -a zhangsan developers
    3. # 从组中移除用户
    4. gpasswd -d zhangsan developers
    复制代码

    怎么说呢,
    1. gpasswd
    复制代码
    在移除组成员时比
    1. usermod
    复制代码
    方便得多——
    1. usermod
    复制代码
    没有"从某个组中移除"的直接选项。

    几个常用的查询命令

    日常管理中,经常需要查看用户和组的信息:
    1. # 查看当前用户的 UID、GID 和所属组
    2. id zhangsan
    3. # 查看用户属于哪些组
    4. groups zhangsan
    5. # 查看当前登录的是谁
    6. whoami
    7. # 查看系统当前所有登录用户
    8. who
    复制代码
    1. id
    复制代码
    命令输出示例:
    1. uid=1001(zhangsan) gid=1001(zhangsan) groups=1001(zhangsan),1002(developers)
    复制代码

    一目了然:UID、主组、附加组全有了。

    实际运维中的几点建议

    第一,别把所有事都用 root 做。 给自己建个普通用户,需要权限时用
    1. sudo
    复制代码
    。这不是多此一举——一个手滑的
    1. rm -rf /
    复制代码
    就够你哭的。

    第二,善用用户组管理权限。 比如项目目录设置为某个组可读写,把相关人员加进组就行,比一个个设 ACL 省事多了。

    第三,离职员工的账号要及时处理。 先用
    1. passwd -l
    复制代码
    锁定,确认没有遗留工作后再用
    1. userdel
    复制代码
    清除。

    第四,定期检查 /etc/passwd 和 /etc/shadow。 看看有没有异常用户,UID 为 0 的账号除了 root 不应该再有别的。

    Linux 的用户管理看起来命令不少,但核心逻辑很简单:用户和组是权限管理的基本单元,三个文本文件记录了所有信息,增删改查各有对应的命令。把这些吃透了,日常管理基本不会卡壳。
  • 您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    果子博客
    扫码关注微信公众号

    Archiver|手机版|小黑屋|风叶林

    GMT+8, 2026-3-24 05:56 , Processed in 0.212926 second(s), 19 queries .

    Powered by 风叶林

    © 2001-2026 Discuz! Team.

    快速回复 返回顶部 返回列表