Kylin(麒麟)操作系统是基于 Linux 内核开发的国产操作系统,其用户和组管理机制与 Linux 系统一脉相承,核心目标是通过用户身份标识(UID)和组身份标识(GID)实现对文件、进程、系统资源的权限控制,保障系统安全性和资源分配合理性。本文将从基础概念、核心操作(命令行 + 图形界面)、权限关联、高级配置四个维度,详细讲解 Kylin 系统的用户和组管理。
一、核心概念:用户与组的基本定义
在 Kylin 系统中,“用户” 是访问系统的最小身份单元,“组” 是用户的集合(用于批量管理权限),二者通过 UID 和 GID 唯一标识,且遵循严格的权限规则。
1. 用户(User)分类
Kylin 系统中的用户分为三类,对应不同的系统权限和使用场景:
| 类型 | UID 范围 | 作用 | 示例 |
|---|---|---|---|
| 超级用户(root) | UID=0 | 拥有系统最高权限,可执行任何命令(如修改系统配置、删除核心文件),仅用于系统管理,不建议日常使用 | root |
| 系统用户(System User) | UID=1-999(默认) | 用于运行系统服务(如数据库、Web 服务),无登录权限,仅保障服务进程的身份隔离 | mysql(数据库服务用户)、www(Web 服务用户) |
| 普通用户(Regular User) | UID=1000+(默认) | 日常使用的用户,权限受限制(仅能操作自己目录下的文件,需 root 授权才能执行高权限操作) | user1、kylinuser |
2. 组(Group)分类
组分为两类,用于灵活分配权限(一个用户可属于多个组):
| 类型 | GID 范围 | 作用 | 示例 |
|---|---|---|---|
| 主组(Primary Group) | 与用户 UID 匹配(普通用户 GID 默认 = 1000+) | 用户创建时默认归属的组,用户的文件默认继承主组权限 | user1 的主组为 user1(GID=1000) |
| 附加组(Supplementary Group) | 任意有效 GID | 用户额外加入的组,用于获取该组的资源访问权限(如 “开发组” 成员可访问共享代码目录) | user1 加入 dev 组(GID=1001),获得 dev 组目录权限 |
3. 关键配置文件
用户和组的信息均存储在系统配置文件中,修改这些文件(需 root 权限)可直接管理用户 / 组(建议优先用命令行工具,避免手动改文件出错):
| 配置文件路径 | 作用 | 核心字段说明 |
|---|---|---|
/etc/passwd | 存储所有用户的基本信息(公开文件,无密码) | 用户名:密码占位符:UID:GID:用户说明:家目录:登录Shell例:user1:x:1000:1000:User1:/home/user1:/bin/bash |
/etc/shadow | 存储用户的密码信息(仅 root 可读取,加密存储) | 用户名:加密密码:密码最后修改时间:密码最小有效期:密码最大有效期:密码过期警告期:账号失效期:保留字段例:user1:$6$xxxx$xxxx:19500:0:99999:7::: |
/etc/group | 存储所有组的基本信息(公开文件) | 组名:组密码占位符:GID:组内成员列表例:dev:x:1001:user1,user2 |
/etc/gshadow | 存储组的密码信息(仅 root 可读取,用于 “组管理员” 功能) | 组名:加密组密码:组管理员:组内成员列表例:dev:$6$xxxx$xxxx:user1:user1,user2 |
二、命令行管理:用户与组的核心操作
Kylin 系统的用户 / 组管理以命令行为主,需通过root权限执行(可通过su - root切换到 root 用户,或在命令前加sudo)。
1. 用户管理命令
(1)创建用户:useradd
useradd是创建用户的基础命令,默认仅创建用户账号,需手动设置密码;若需自动创建家目录、分配 Shell,需加参数。
| 参数 | 作用 | 示例 |
|---|---|---|
-m | 自动创建用户的家目录(/home/用户名) | useradd -m user2(创建 user2,家目录为/home/user2) |
-d 目录路径 | 自定义家目录路径(替代默认/home/用户名) | useradd -m -d /opt/user3 user3(家目录设为/opt/user3) |
-s Shell路径 | 指定用户的登录 Shell(默认/bin/bash,/sbin/nologin表示无登录权限) | useradd -m -s /sbin/nologin mysql(创建系统用户 mysql,无登录权限) |
-u UID | 自定义 UID(需确保 UID 未被占用) | useradd -m -u 1005 user4(指定 user4 的 UID 为 1005) |
-g 主组名/主组GID | 指定用户的主组(需提前存在该组) | useradd -m -g dev user5(将 user5 的主组设为 dev) |
-G 附加组1,附加组2 | 指定用户的附加组(多个组用逗号分隔) | useradd -m -G dev,test user6(user6 加入 dev 和 test 两个附加组) |
-c "用户说明" | 添加用户备注(如姓名、部门) | useradd -m -c "研发部-张三" zhangsan |
(2)设置 / 修改用户密码:passwd
用户创建后必须设置密码才能登录,passwd命令用于管理密码(普通用户可修改自己的密码,root 可修改所有用户密码)。
| 命令格式 | 作用 | 示例 |
|---|---|---|
passwd 用户名 | 为指定用户设置密码(root 使用) | passwd user2(root 为 user2 设置密码,输入时密码不显示) |
passwd | 普通用户修改自己的密码(需先输入旧密码) | passwd(user2 登录后执行,修改自己的密码) |
passwd -l 用户名 | 锁定用户(锁定后无法登录,需 root 解锁) | passwd -l user2(锁定 user2) |
passwd -u 用户名 | 解锁被锁定的用户 | passwd -u user2(解锁 user2) |
passwd -d 用户名 | 清空用户密码(不建议,会导致用户无密码即可登录) | passwd -d user2(清空 user2 的密码) |
(3)修改用户信息:usermod
usermod用于修改已存在用户的属性(如 UID、家目录、组、Shell 等),参数与useradd类似。
| 常用参数 | 作用 | 示例 |
|---|---|---|
-u 新UID | 修改用户的 UID | usermod -u 1006 user2(将 user2 的 UID 改为 1006) |
-d 新家目录 -m | 修改家目录并自动迁移原内容(-m必加,否则仅改配置) | usermod -d /home/newuser2 -m user2(迁移 user2 的家目录) |
-g 新主组 | 修改用户的主组 | usermod -g test user2(将 user2 的主组改为 test) |
-G 新附加组列表 | 覆盖原附加组(若需新增而非覆盖,用-aG) | usermod -G dev,admin user2(覆盖为 dev 和 admin 组) |
-aG 新增附加组 | 新增附加组(不覆盖原有) | usermod -aG admin user2(给 user2 新增 admin 附加组) |
-s 新Shell | 修改登录 Shell | usermod -s /bin/sh user2(将 user2 的 Shell 改为/bin/sh) |
-L | 锁定用户(同passwd -l) | usermod -L user2 |
-U | 解锁用户(同passwd -u) | usermod -U user2 |
(4)删除用户:userdel
userdel用于删除用户,默认仅删除用户账号,需加参数才能删除家目录和邮件文件。
| 参数 | 作用 | 示例 |
|---|---|---|
| 无参数 | 仅删除用户账号(家目录、邮件保留) | userdel user2(删除 user2 账号,保留/home/user2) |
-r | 彻底删除用户(含家目录、邮件、日志等关联文件) | userdel -r user2(删除 user2 及所有关联文件,推荐使用) |
(5)查看用户信息:id/finger/cat /etc/passwd
id 用户名:查看用户的 UID、GID、所属组(最常用)例:id user1→ 输出uid=1000(user1) gid=1000(user1) groups=1000(user1),1001(dev),1002(test)finger 用户名:查看用户的详细信息(含家目录、Shell、登录时间)例:finger user1→ 输出用户备注、登录状态、家目录路径等cat /etc/passwd | grep 用户名:直接从配置文件中筛选用户信息例:cat /etc/passwd | grep user1→ 输出user1:x:1000:1000:User1:/home/user1:/bin/bash
2. 组管理命令
(1)创建组:groupadd
groupadd用于创建新组,默认分配未使用的最小 GID(系统组 1-999,普通组 1000+)。
| 参数 | 作用 | 示例 |
|---|---|---|
-g GID | 自定义 GID(需确保未被占用) | groupadd -g 1003 dev2(创建 dev2 组,GID=1003) |
-r | 创建系统组(GID 范围 1-999,用于系统服务) | groupadd -r dbgroup(创建系统组 dbgroup,供数据库服务使用) |
(2)修改组信息:groupmod
groupmod用于修改已存在组的属性(组名、GID)。
| 参数 | 作用 | 示例 |
|---|---|---|
-g 新GID | 修改组的 GID | groupmod -g 1004 dev2(将 dev2 的 GID 改为 1004) |
-n 新组名 | 修改组的名称 | groupmod -n dev_new dev2(将 dev2 改名为 dev_new) |
(3)删除组:groupdel
groupdel用于删除组,注意:若组是某个用户的主组,需先修改该用户的主组,否则无法删除组。
示例:
- 查看 dev 组是否是用户的主组:
cat /etc/passwd | grep :1001:(假设 dev 的 GID=1001) - 若 user1 的主组是 dev,先修改 user1 的主组:
usermod -g test user1 - 删除 dev 组:
groupdel dev
(4)添加 / 删除组成员:gpasswd
gpasswd用于管理组的成员(添加、删除),也可设置组密码(允许非 root 用户加入组)。
| 命令格式 | 作用 | 示例 |
|---|---|---|
gpasswd -a 用户名 组名 | 向组中添加成员 | gpasswd -a user1 dev(将 user1 加入 dev 组) |
gpasswd -d 用户名 组名 | 从组中删除成员 | gpasswd -d user1 dev(将 user1 从 dev 组中删除) |
gpasswd -M 用户名1,用户名2 组名 | 覆盖组的成员列表(多个用户用逗号分隔) | gpasswd -M user1,user2 dev(dev 组仅保留 user1 和 user2) |
gpasswd 组名 | 设置组密码(普通用户输入组密码即可加入该组) | gpasswd dev(设置 dev 组的密码) |
(5)查看组信息:groups/cat /etc/group
groups 用户名:查看用户所属的所有组(主组 + 附加组)例:groups user1→ 输出user1 : user1 dev testcat /etc/group | grep 组名:从配置文件中筛选组信息例:cat /etc/group | grep dev→ 输出dev:x:1001:user1,user2
三、图形界面管理:适合新手操作
Kylin 系统提供可视化的 “用户和组管理” 工具,适合不熟悉命令行的用户,操作路径如下(以 Kylin 4.0/5.0 为例):
1. 打开用户管理工具
- 点击桌面左上角的开始菜单→ 进入系统设置
- 在系统设置中找到用户账户(或 “用户和组”),点击进入
- 首次进入需验证 root 密码(或当前用户的 sudo 密码),验证通过后即可管理用户和组。
2. 用户管理(图形界面)
(1)创建用户
- 点击 “添加用户” 按钮,弹出 “新建用户” 窗口
- 填写核心信息:
- 用户名:自定义(如 user3)
- 密码:设置密码(需符合复杂度,如包含大小写、数字)
- 确认密码:重复输入密码
- 用户类型:选择 “标准用户”(普通用户)或 “管理员”(拥有 sudo 权限)
- 家目录:默认
/home/user3,可手动修改
- 点击 “确定”,完成用户创建。
(2)修改用户信息
- 在用户列表中选中需修改的用户(如 user3),点击 “修改” 按钮
- 可修改的内容包括:
- 密码:点击 “更改密码” 重新设置
- 用户类型:切换 “标准用户” 和 “管理员”
- 家目录:修改用户的家目录路径
- 登录 Shell:选择默认
/bin/bash或其他 Shell
- 点击 “确定” 保存修改。
(3)删除用户
- 选中需删除的用户,点击 “删除” 按钮
- 弹出确认窗口,选择 “删除文件”(彻底删除家目录等关联文件)或 “保留文件”(仅删除账号)
- 点击 “确定”,完成删除。
3. 组管理(图形界面)
- 在 “用户和组” 工具中切换到 “组” 标签页
- 创建组:点击 “添加组”,输入组名(如 dev3),点击 “确定”
- 修改组:选中组,点击 “修改”,可修改组名或 GID
- 管理组成员:选中组,点击 “成员”,在弹出窗口中勾选 / 取消勾选用户,完成成员添加 / 删除。
四、用户 / 组与文件权限的关联
用户和组的核心作用是控制文件 / 目录的访问权限,Kylin 系统通过 “所有者(Owner)- 所属组(Group)- 其他用户(Others)” 三级权限模型实现控制,需结合ls -l命令理解权限关联。
1. 查看文件权限:ls -l
执行ls -l /home/user1/test.txt,输出示例:-rw-r--r-- 1 user1 user1 1024 1月 1 10:00 /home/user1/test.txt
各字段含义(从左到右):
- 权限位(10 个字符):
-rw-r--r--- 第 1 位:文件类型(
-表示普通文件,d表示目录,l表示链接) - 第 2-4 位:所有者权限(
rw-:可读、可写、不可执行) - 第 5-7 位:所属组权限(
r--:仅可读) - 第 8-10 位:其他用户权限(
r--:仅可读)
- 第 1 位:文件类型(
- 链接数:
1(普通文件默认 1,目录默认 2) - 所有者:
user1(文件的创建者,默认是创建文件的用户) - 所属组:
user1(文件的所属组,默认是创建者的主组) - 文件大小:
1024(单位:字节) - 修改时间:
1月 1 10:00(文件最后修改的时间) - 文件路径:
/home/user1/test.txt
2. 修改文件的所有者和所属组:chown/chgrp
chown 新所有者:新所属组 文件/目录:同时修改文件的所有者和所属组例:chown user2:dev test.txt(将 test.txt 的所有者改为 user2,所属组改为 dev)chown 新所有者 文件/目录:仅修改所有者例:chown user2 test.txtchgrp 新所属组 文件/目录:仅修改所属组(等同于chown :新所属组)例:chgrp dev test.txt
注意:修改所有者 / 所属组需 root 权限,普通用户仅能修改自己创建的文件的所属组(且新组必须是该用户的附加组)。
五、高级配置:用户登录控制与安全策略
1. 限制用户登录(/etc/nologin)
若需临时禁止所有普通用户登录(仅 root 可登录),可创建/etc/nologin文件:
- 执行命令:
touch /etc/nologin - 普通用户登录时会提示
/etc/nologin文件的内容(可在文件中添加提示信息,如 “系统维护中,暂停登录”) - 恢复登录:删除
/etc/nologin文件:rm /etc/nologin
2. 限制用户登录 Shell(/etc/shells)
/etc/shells文件记录了系统允许的登录 Shell,若用户的 Shell 不在此列表中,无法登录系统。
- 查看允许的 Shell:
cat /etc/shells - 添加新 Shell:
echo "/bin/sh" >> /etc/shells(需确保/bin/sh存在)
3. 密码安全策略(/etc/login.defs)
/etc/login.defs是用户密码和账号的全局配置文件,可修改密码有效期、UID/GID 范围等:
PASS_MAX_DAYS 90:密码最大有效期 90 天(过期需修改)PASS_MIN_DAYS 0:密码修改后,最小 0 天可再次修改PASS_WARN_AGE 7:密码过期前 7 天开始提示UID_MIN 1000:普通用户最小 UID 为 1000GID_MIN 1000:普通用户最小 GID 为 1000
修改后需重启系统或重新加载配置(systemctl restart systemd-logind)生效。
六、常见问题与排查
创建用户时提示 “UID 已存在”
- 排查:
cat /etc/passwd | grep 1005(假设 UID=1005 已存在) - 解决:选择未被占用的 UID,如
useradd -m -u 1006 user2
- 排查:
删除组时提示 “组是某个用户的主组”
- 排查:
cat /etc/passwd | grep :1001:(假设组的 GID=1001) - 解决:先修改该用户的主组,如
usermod -g test user1,再删除组。
- 排查:
普通用户无法访问某目录
- 排查:
ls -ld /opt/dev(查看目录的权限和所属组) - 解决:若目录所属组是 dev,将用户加入 dev 组:
usermod -aG dev user1,或修改目录权限:chmod 750 /opt/dev(允许所属组读写执行)。
- 排查:
通过以上内容,可全面掌握 Kylin 系统的用户和组管理,无论是命令行的高效操作,还是图形界面的便捷配置,核心都是通过 UID/GID 和权限模型实现系统资源的安全管控。实际使用中,建议优先使用命令行工具(可批量操作、自动化脚本),并遵循 “最小权限原则”(如普通用户不授予 root 权限,系统服务用专用用户)。