当前位置: 首页 > news >正文

IMX6ULL开发板学习-02(Linux用户管理)

1. 概述

Linux 是一个多用户、多任务的操作系统。用户管理是系统安全的基础,包括创建、修改、删除用户账户和组,以及管理用户权限和认证信息。理解用户管理有助于合理分配资源、保证系统安全、审计用户行为。

2. 用户和组的概念

2.1 用户账户类型

  • 超级用户(root):UID 为 0,拥有系统最高权限,可以执行任何操作。

  • 系统用户:UID 通常 1-999(不同发行版可能不同),用于运行系统服务(如nobodysshdapache等),一般不用于登录。

  • 普通用户:UID 通常 1000 开始,用于日常操作,权限受限。

2.2 组的概念

组是用户的集合,用于简化权限管理。一个用户可以属于多个组。

  • 主组(初始组):用户创建时默认指定的组,用户的文件默认属于该组。

  • 附加组:用户加入的其他组,用于获得额外权限。

每个用户有唯一的用户名用户标识符(UID),每个组有唯一的组名组标识符(GID)


3. 重要的配置文件

用户和组的信息存储在以下四个关键文件中。

3.1/etc/passwd

存储用户账户的基本信息,每行代表一个用户,格式如下:

username:password:UID:GID:comment:home_directory:shell
  • username:登录名

  • password:早期存储加密密码,现在通常为x,表示密码存储在/etc/shadow

  • UID:用户ID

  • GID:主组ID

  • comment:用户全名或描述(GECOS字段)

  • home_directory:用户家目录

  • shell:登录后使用的shell(如/bin/bash),若为/sbin/nologin则禁止登录

示例:

alice:x:1001:1001:Alice Smith:/home/alice:/bin/bash

3.2/etc/shadow

存储用户的加密密码和密码策略信息,仅 root 可读,格式如下:

username:encrypted_password:last_change:min_days:max_days:warn_days:inactive_days:expire_date:reserved
  • username:用户名

  • encrypted_password:加密后的密码(若为!*表示账户被锁定)

  • last_change:上次更改密码距离1970-01-01的天数

  • min_days:两次修改密码的最小间隔天数

  • max_days:密码有效期(最大使用天数)

  • warn_days:密码过期前警告天数

  • inactive_days:密码过期后仍可登录的天数(宽限期)

  • expire_date:账户过期日期(距离1970-01-01的天数)

  • reserved:保留字段

示例:

alice:$6$randomsalt$encryptedhash:18934:0:99999:7:::

3.3/etc/group

存储组信息,每行格式:

group_name:password:GID:user_list
  • group_name:组名

  • password:组密码(一般不使用,可为空或x,对应/etc/gshadow

  • GID:组ID

  • user_list:属于该组的成员列表(用逗号分隔,不包含主组中的用户)

示例:

developers:x:2001:alice,bob

3.4/etc/gshadow

存储组密码和组管理员信息,格式:

group_name:encrypted_password:administrators:members
  • group_name:组名

  • encrypted_password:组密码(若为!或空表示无密码)

  • administrators:组管理员列表(可以修改组成员)

  • members:组成员列表


4. 用户管理命令

4.1 创建用户:useradd

语法useradd [选项] 用户名

常用选项:

  • -c "注释":指定用户描述

  • -d 家目录:指定家目录路径

  • -m:若家目录不存在则自动创建(默认)

  • -M:不创建家目录

  • -g 主组:指定主组(可以是组名或GID)

  • -G 附加组:指定附加组(多个用逗号分隔)

  • -s shell:指定登录shell

  • -u UID:指定UID

  • -e 过期日期:账户过期日期(格式 YYYY-MM-DD)

  • -f 非活动天数:密码过期后账户被禁用的宽限期

示例

# 创建用户 alice,主组为 staff,附加组为 developers,shell 为 /bin/bash useradd -g staff -G developers -s /bin/bash -c "Alice Smith" alice # 创建系统用户(无家目录,不创建密码) useradd -r -s /sbin/nologin my_service # 指定 UID 和过期日期 useradd -u 1500 -e 2025-12-31 bob

注意useradd默认行为由/etc/default/useradd/etc/login.defs控制。

4.2 修改用户:usermod

语法usermod [选项] 用户名

常用选项(与useradd类似):

  • -c-d-g-G-s-u-e-f-L(锁定用户)、-U(解锁用户)

  • -l 新用户名:修改登录名

  • -m:与-d连用,将旧家目录内容移动到新家目录

示例

# 修改用户主组 usermod -g users alice # 将用户加入附加组(保留原有附加组,需要指定 -a 选项) usermod -aG sudo alice # 修改登录名 usermod -l alice_new alice # 锁定用户 usermod -L alice

4.3 删除用户:userdel

语法userdel [选项] 用户名

常用选项:

  • -r:同时删除用户的家目录和邮件池(/var/mail/用户名)

示例

userdel -r alice # 删除用户 alice 及其家目录

4.4 设置密码:passwd

语法passwd [选项] [用户名]

若不指定用户名,则修改当前用户的密码。

常用选项:

  • -l:锁定用户密码(在/etc/shadow密码字段前加!

  • -u:解锁用户密码

  • -d:删除密码(用户无需密码登录,危险)

  • -e:强制用户下次登录时修改密码

  • -S:显示密码状态信息

示例

passwd alice # 设置或修改 alice 的密码(交互式) passwd -e alice # 强制 alice 下次登录修改密码 passwd -l alice # 锁定用户 alice

4.5 密码策略管理:chage

用于修改密码老化信息。

语法chage [选项] 用户名

常用选项:

  • -l:列出当前密码老化信息

  • -m 天数:修改密码最小间隔

  • -M 天数:修改密码最大有效期

  • -W 天数:修改警告天数

  • -I 天数:修改非活动天数

  • -E 日期:修改账户过期日期(YYYY-MM-DD)

示例

chage -l alice # 查看 alice 密码策略 chage -M 90 -W 7 alice # 设置密码最长90天,提前7天警告 chage -E 2025-12-31 alice # 设置账户过期日期

4.6 其他用户管理相关命令

  • newusers:从文件批量创建用户

  • chpasswd:批量更新用户密码(可从标准输入读取)

  • pwconv/pwunconv:转换密码到 shadow 或反之(通常自动维护)


5. 组管理命令

5.1 创建组:groupadd

语法groupadd [选项] 组名

常用选项:

  • -g GID:指定 GID

  • -r:创建系统组(GID 小于 1000)

示例

groupadd developers groupadd -g 2000 staff

5.2 修改组:groupmod

语法groupmod [选项] 组名

常用选项:

  • -n 新组名:修改组名

  • -g 新GID:修改 GID

示例

groupmod -n devs developers # 将 developers 改名为 devs

5.3 删除组:groupdel

语法groupdel 组名

注意:不能删除用户的主组(即 /etc/passwd 中某用户的主组)。

5.4 管理组成员:gpasswd

语法gpasswd [选项] 组名

常用选项:

  • -a 用户名:将用户添加到组

  • -d 用户名:将用户从组中移除

  • -A 用户列表:设置组管理员(可以管理组成员)

  • -M 用户列表:设置组成员列表(会覆盖原有成员)

示例

gpasswd -a alice developers # 将 alice 加入 developers 组 gpasswd -d alice developers # 从组中移除 alice gpasswd -M alice,bob,charlie developers # 设置组成员

5.5 组密码(不常用)

可以使用gpasswd 组名设置组密码,允许用户通过newgrp临时切换主组。


6. 用户和组查询命令

6.1id- 显示用户身份信息

id # 显示当前用户 id alice # 显示指定用户 # 输出示例:uid=1001(alice) gid=1001(alice) groups=1001(alice),27(sudo)

6.2who/w- 显示登录用户

who # 显示当前登录的用户、终端、时间 w # 更详细,包括负载、登录时间、执行的命令

6.3groups- 显示用户所属组

groups alice # 显示 alice 所属的所有组

6.4finger- 查询用户信息(需安装)

finger alice # 显示用户的家目录、shell、上次登录等

6.5last- 显示最近登录记录

读取/var/log/wtmp,显示用户登录历史。

last -10 # 显示最近10条登录记录 last alice # 显示 alice 的登录记录

6.6lastlog- 显示所有用户上次登录时间

读取/var/log/lastlog

lastlog lastlog -u alice # 仅显示 alice

7. 切换用户和提权

7.1su- 切换用户

语法su [选项] [用户名]

  • 不加用户名则切换到 root。

  • --l--login:以登录方式切换,会加载目标用户的环境变量和家目录。

  • -c 命令:以目标用户身份执行单条命令。

示例

su - # 切换到 root,且使用 root 的环境 su - alice # 切换到 alice su -c "systemctl restart nginx" # 以 root 执行命令后退出

7.2sudo- 以其他用户权限执行命令

sudo允许授权用户以超级用户或其他用户身份执行命令,需要配置/etc/sudoers(使用visudo编辑)。

常用选项

  • -u 用户名:以指定用户身份执行(默认 root)

  • -l:列出当前用户可执行的 sudo 命令

  • -k:强制下次需要密码

/etc/sudoers 配置示例

# 允许 alice 执行所有命令 alice ALL=(ALL) ALL # 允许 bob 无需密码重启服务 bob ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx # 允许 wheel 组的所有成员执行任何命令 %wheel ALL=(ALL) ALL

示例

sudo -u alice whoami # 以 alice 身份执行 whoami sudo systemctl restart sshd # 以 root 执行 sudo -l # 查看自己可执行的 sudo 命令

8. 用户管理相关文件与目录

8.1/etc/skel/- 用户模板目录

当使用useradd且创建家目录时,系统会将/etc/skel/下的所有文件(如.bashrc.profile)复制到新用户的家目录。管理员可在此放置默认配置文件。

8.2/var/log/secure/var/log/auth.log

记录用户认证相关的日志,包括登录尝试、sudo 使用等,是安全审计的重要依据。

8.3/etc/login.defs

定义用户创建时的默认参数,如 UID/GID 范围、密码加密方式、密码过期默认值等。

8.4/etc/default/useradd

useradd的默认配置,如默认 shell、家目录前缀、默认组等。

http://www.cnnetsun.cn/news/1780186.html

相关文章:

  • 暗黑3终极按键助手D3KeyHelper:5分钟上手,彻底解放双手的免费神器
  • 十五五——详解商用车企业“十五五”战略规划框架大纲【附全文阅读】
  • DFS深度优先搜索
  • MySQL8.0大小写敏感坑爹实录:lower_case_table_names从报错到解决的完整过程
  • DDoS攻击简介,简单复现DOS攻击(通过虚拟机单个源攻击,并且分析攻击源)
  • PyCharm高效开发秘籍:集成Phi-4-mini-reasoning插件实现智能编程
  • 为什么头部云厂商已在Q1完成AOT灰度?揭秘Python原生编译在K8s Serverless中节省38%冷启成本的真实案例
  • 【限时开源】20年沉淀的Python MCP服务模板黄金配置矩阵(含17项性能基线数据+压测对比报告)
  • rk3588 适配音频解码芯片 ALC5616
  • Android点击事件分发流程
  • 网盘下载新思路:如何在不破解限速的情况下获得更流畅的下载体验
  • Hex Editor Neo十六进制编辑与磁盘数据查看工具:解决二进制文件与磁盘底层编辑难题
  • 中兴光猫工厂模式终极指南:zteOnu工具完整教程
  • Steam成就管理解决方案:高效解锁与管理游戏成就的5个核心方法
  • 3个疑问:MifareOneTool能否解决你的智能卡操作难题?
  • 抖音无水印批量下载实战指南:3步解决内容备份难题
  • 万象视界灵坛参数详解:候选标签最大长度(77 tokens)与截断策略说明
  • 告别繁琐研究!DeerFlow快速入门:开箱即用的个人深度研究助理
  • 为什么大多数AI Agent项目会失败:10个常见陷阱
  • 01-服务注册发现详解
  • 3大核心功能:《工业队长》DoubleQoLMod-zh模组的智能效率优化指南
  • MifareOneTool智能卡操作完全指南:从问题解决到技术原理
  • 如何用drawio-desktop构建跨平台的专业图表工作流
  • Qwen2.5-7B新手部署:如何用最简单的方法运行阿里大模型
  • Python 上位机 + Claude Code 实现试剂研发全自动迭代闭环系统
  • GLM-OCR与计算机组成原理的关联:从指令集到AI推理的算力支撑
  • CAJ格式转换高效解决方案:从学术文献处理痛点到全流程指南
  • DamaiHelper抢票神器:从原理到实战的智能抢票全攻略
  • 浏览器渲染层文档提取技术:kill-doc的技术架构与实现原理深度解析
  • Career-Ops:求职专用智能体