学习目标
- 理解本节涉及的核心主题:Linux 用户与组管理、账户与密码管理、
passwd- 设置和更改密码、chage- 修改密码过期信息。 - 掌握重点命令或工具:
passwd、chage。 - 能够结合示例完成常见操作,并理解关键参数、使用场景与结果差异。
- 能够识别本节相关的常见风险、易错点或排查思路。
学习重点
- 主题范围:Linux 用户与组管理、账户与密码管理、
passwd- 设置和更改密码、chage- 修改密码过期信息、密码配置文件、管理用户密码复杂度和有效期 - 重点命令:
passwd、chage - 学习重点:命令用途、关键参数、典型场景、与相近命令的区别
- 复习方式:先理解场景,再动手练习,最后对照结果检查
Linux 用户与组管理
账户与密码管理
账户与密码管理涉及用户密码的设置、修改、策略配置等,确保系统的安全性和用户的访问控制。通过合理的密码管理策略,可以有效防止未经授权的访问和数据泄露。
passwd - 设置和更改密码
passwd 命令用于设置和更改用户账户的密码。它可以用于修改当前用户的密码或其他用户的密码(需要超级用户权限)。
设置用户密码
为特定用户设置密码:
sudo passwd 用户名
示例:为用户 alice 设置密码
sudo passwd alice
操作流程:
- 系统提示输入新密码:
Enter new UNIX password: - 系统提示确认新密码:
Retype new UNIX password: - 密码设置成功后,显示:
passwd: password updated successfully
修改当前用户密码
命令:
passwd
示例:当前用户更改自己的密码
passwd
操作流程与输出与上述相同。
强制用户更改密码(chage 命令)
使用 chage 命令可以强制用户在下次登录时更改密码,确保密码安全性。
命令:
sudo chage -d 0 用户名
示例:强制用户 bob 在下次登录时更改密码
sudo chage -d 0 bob
说明:
-d 0:将密码的上次更改日期设置为 0,表示密码已过期,用户需更改密码。
chage - 修改密码过期信息
chage(change age)命令用于管理用户密码的过期信息,设置密码的有效期、最小修改天数、警告天数等,增强账户安全性。
查看用户密码信息(chage -l username)
命令:
sudo chage -l 用户名
示例:查看用户 alice 的密码信息
sudo chage -l alice
输出示例:
Last password change : Apr 27, 2024
Password expires : May 27, 2024
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 30
Number of days of warning before password expires : 7
设置密码过期策略
通过 chage 命令,可以设置用户密码的过期策略,包括最大天数、最小天数和警告天数。
命令语法:
sudo chage [选项] 用户名
常用选项:
-m:设置密码的最小修改天数。-M:设置密码的最大有效天数。-W:设置密码过期前的警告天数。-E:设置账户的过期日期。-I:设置密码过期后的不活动天数。
常用选项与命令示例
示例 1:设置用户 bob 的密码策略
- 最小天数:用户在更改密码后至少需要等待 5 天才能再次更改密码。
- 最大天数:密码在 60 天后过期,需更改密码。
- 警告天数:在密码过期前 10 天开始警告用户。
sudo chage -m 5 -M 60 -W 10 bob
说明:
-m 5:最小天数为 5 天。-M 60:最大天数为 60 天。-W 10:密码过期前 10 天开始警告。
示例 2:设置用户 charlie 的账户过期日期为 2025-12-31
sudo chage -E 2025-12-31 charlie
示例 3:查看用户 david 的所有密码过期信息
sudo chage -l david
应用场景:
- 安全策略实施:强制用户定期更改密码,防止密码被长期使用导致安全风险。
- 账户生命周期管理:设置账户的过期日期,自动禁用不再需要的账户。
- 用户密码管理:确保用户密码符合组织的安全要求,降低被破解的风险。
密码配置文件
Linux 系统使用多个配置文件来管理用户账户、密码和组信息。这些文件包含了用户的基本信息、加密密码、所属组等,确保系统的用户管理和权限控制。
/etc/passwd 文件结构与作用
/etc/passwd 文件存储了系统中所有用户的基本信息,包括用户名、UID、GID、用户全名、家目录路径和默认 shell。每行代表一个用户账户,字段之间用冒号(:)分隔。
文件格式:
用户名:密码:UID:GID:用户全名:家目录:默认 shell
示例:
root:x:0:0:root:/root:/bin/bash
alice:x:1000:1000:Alice Johnson:/home/alice:/bin/bash
bob:x:1001:1001:Bob Smith:/home/bob:/bin/zsh
字段解释:
- 用户名:用户的登录名。
- 密码:占位符
x,实际密码存储在/etc/shadow文件中。 - UID:用户标识符,
0通常为 root 用户。 - GID:组标识符,指向
/etc/group文件中的组。 - 用户全名:用户的描述信息。
- 家目录:用户的主目录路径。
- 默认 shell:用户登录后的默认 shell 程序。
/etc/shadow 文件结构与作用
/etc/shadow 文件存储了用户的加密密码及密码相关的过期信息。由于该文件包含敏感信息,仅 root 用户可读写。
文件格式:
用户名:加密密码:最后更改日期:最小天数:最大天数:警告天数:不活动天数:过期日期:保留字段
示例:
root:$6$randomsalt$encryptedpassword:18295:0:99999:7:::
alice:$6$anothersalt$anotherencryptedpassword:18300:0:99999:7:::
bob:$6$yetanothersalt$yetanotherencryptedpassword:18305:0:99999:7:::
字段解释:
- 用户名:用户的登录名。
- 加密密码:使用哈希算法加密后的密码。
- 最后更改日期:自 1970-01-01 起的天数,表示最后一次更改密码的日期。
- 最小天数:两次密码更改之间的最小天数。
- 最大天数:密码的最大有效天数,超过后需要更改密码。
- 警告天数:密码过期前的警告天数。
- 不活动天数:密码过期后的不活动天数,超过后账户将被禁用。
- 过期日期:账户过期的绝对日期,自 1970-01-01 起的天数。
- 保留字段:目前未使用,保留为未来扩展。
/etc/group 文件结构与作用
/etc/group 文件存储了系统中所有组的信息,包括组名、GID 和组成员。每行代表一个组,字段之间用冒号(:)分隔。
文件格式:
组名:密码:GID:组成员
示例:
root:x:0:
developers:x:1001:alice,bob,charlie
sudo:x:27:alice,david
字段解释:
- 组名:组的名称。
- 密码:占位符
x,通常不使用。 - GID:组标识符。
- 组成员:组内成员的用户名,多个成员用逗号分隔。
应用场景:
- 权限管理:通过组控制用户对文件和目录的访问权限。
- 资源分配:为不同组分配不同的系统资源,确保资源的合理利用。
- 安全控制:限制特定组用户对敏感文件和目录的访问,增强系统安全性。
管理用户密码复杂度和有效期
为了提高系统安全性,必须配置用户密码的复杂度和有效期,防止弱密码和密码被长期使用导致的安全风险。Linux 使用 PAM(Pluggable Authentication Modules)来配置密码策略。
配置 PAM(Pluggable Authentication Modules)
PAM 提供了灵活的认证机制,通过配置模块,可以定义密码的复杂度、有效期等策略。
编辑 /etc/pam.d/common-password
在基于 Debian 的系统(如 Ubuntu)中,密码策略配置通常位于 /etc/pam.d/common-password 文件中。使用文本编辑器(如 nano、vim)编辑该文件,并配置 pam_pwquality.so 模块。
示例:
sudo nano /etc/pam.d/common-password
配置示例:
password requisite pam_pwquality.so retry=3 minlen=8 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1
字段解释:
retry=3:用户最多可尝试 3 次输入符合要求的密码。minlen=8:密码最小长度为 8 个字符。dcredit=-1:至少包含 1 个数字。ucredit=-1:至少包含 1 个大写字母。ocredit=-1:至少包含 1 个特殊字符。lcredit=-1:至少包含 1 个小写字母。
说明:
pam_pwquality.so:PAM 模块,用于检查密码质量。requisite:如果此模块失败,整个认证过程将失败。
使用 pam_pwquality.so 模块
pam_pwquality.so 提供了灵活的密码质量检查选项,通过配置可以设定密码复杂度要求。
常用选项:
minlen:最小密码长度。dcredit:数字字符的最小数量(负值表示至少)。ucredit:大写字母的最小数量(负值表示至少)。lcredit:小写字母的最小数量(负值表示至少)。ocredit:特殊字符的最小数量(负值表示至少)。retry:允许用户重新输入密码的次数。maxrepeat:限制密码中连续重复字符的数量。maxclassrepeat:限制密码中连续同类字符的数量。
示例:
password requisite pam_pwquality.so retry=3 minlen=12 dcredit=-2 ucredit=-2 ocredit=-1 lcredit=-1
解释:
minlen=12:密码最小长度为 12 个字符。dcredit=-2:至少包含 2 个数字。ucredit=-2:至少包含 2 个大写字母。ocredit=-1:至少包含 1 个特殊字符。lcredit=-1:至少包含 1 个小写字母。
设置密码策略与安全要求
通过配置 PAM,可以设定多种密码策略,以增强系统安全性。
最小长度
确保密码具有足够的长度,增加破解难度。
示例:
在 /etc/pam.d/common-password 中设置密码最小长度为 10 个字符:
password requisite pam_pwquality.so retry=3 minlen=10
必须包含字符类型(大写、小写、数字、特殊字符)
强制密码包含多种字符类型,防止使用简单密码。
示例:
在 /etc/pam.d/common-password 中设置密码必须包含至少 1 个大写字母、1 个小写字母、1 个数字和 1 个特殊字符:
password requisite pam_pwquality.so retry=3 minlen=8 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1
密码历史与重用限制
防止用户重复使用旧密码,提高密码安全性。
配置方式:
通过 pam_unix.so 模块,设置密码历史限制。
示例:
在 /etc/pam.d/common-password 中添加 remember 选项,保存用户最近 5 个密码:
password requisite pam_pwquality.so retry=3 minlen=8 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1
password sufficient pam_unix.so use_authtok remember=5
说明:
remember=5:用户不能重复使用最近 5 个密码。
示例配置与最佳实践
示例:增强密码安全性的 PAM 配置
password requisite pam_pwquality.so retry=3 minlen=12 dcredit=-2 ucredit=-2 ocredit=-1 lcredit=-1
password sufficient pam_unix.so use_authtok remember=5
说明:
minlen=12:密码最小长度为 12 个字符。dcredit=-2:至少包含 2 个数字。ucredit=-2:至少包含 2 个大写字母。ocredit=-1:至少包含 1 个特殊字符。lcredit=-1:至少包含 1 个小写字母。remember=5:禁止用户重复使用最近 5 个密码。
最佳实践:
- 最小权限原则:为不同级别的用户设置不同的密码策略,确保高权限用户拥有更严格的密码要求。
- 定期审查与更新:定期检查和更新密码策略,适应新的安全威胁和技术发展。
- 用户教育:教育用户选择强密码,避免使用易猜测的密码组合,提高整体系统安全性。
- 备份配置文件:在修改 PAM 配置文件前,备份原始文件,确保在配置错误时能够恢复。
总结
Linux 用户与组管理是系统安全和资源分配的基础,通过创建与删除用户和组、管理用户和组的权限、配置 sudo 权限以及实施严格的密码管理策略,可以有效地控制用户对系统资源的访问,提升系统的安全性和稳定性。
以下是基于具体实例的应用总结:
- 添加新用户并配置其属性
sudo useradd -m -d /home/alice -s /bin/bash -G developers -c "Alice Johnson" alice sudo passwd alice - 修改用户的默认 shell 和所属组
sudo usermod -s /bin/zsh -aG sudo alice - 删除用户并同时删除其家目录
sudo userdel -r bob - 创建新组并添加用户到该组
sudo groupadd admins sudo usermod -aG admins charlie - 设置文件权限和所属组
sudo chown alice:developers /home/alice/Projects/project_alpha sudo chmod 755 /home/alice/Projects/project_alpha - 配置
sudo权限
使用visudo编辑/etc/sudoers文件,添加以下行以授予用户alice所有sudo权限:alice ALL=(ALL:ALL) ALL - 设置密码策略
编辑/etc/pam.d/common-password,添加或修改以下行以增强密码复杂度和管理密码有效期:password requisite pam_pwquality.so retry=3 minlen=12 dcredit=-2 ucredit=-2 ocredit=-1 lcredit=-1 password sufficient pam_unix.so use_authtok remember=5 - 强制用户更改密码
sudo chage -d 0 alice
Linux 网络管理
网络基本配置
网络基本配置包括查看网络接口、配置 IP 地址和路由、以及配置 DNS 服务器。这些操作确保系统能够正确连接到网络,并与其他设备进行通信。
查看网络接口
了解系统中的网络接口及其状态是进行网络配置和故障排除的基础。Linux 提供了多种命令来查看和管理网络接口信息。
使用 ifconfig 查看网络接口信息
ifconfig(interface configuration)是一个传统的网络配置工具,用于显示和配置网络接口。然而,随着 ip 命令的引入,ifconfig 在现代系统中逐渐被淘汰,但仍在一些旧系统中使用。
基本用法:
ifconfig
示例输出:
eth0 Link encap:Ethernet HWaddr 00:1A:2B:3C:4D:5E
inet addr:192.168.1.10 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:123456 errors:0 dropped:0 overruns:0 frame:0
TX packets:654321 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:987654321 (987.6 MB) TX bytes:1234567890 (1.2 GB)
说明:
- eth0:网络接口名称。
- inet addr:IP 地址。
- Bcast:广播地址。
- Mask:子网掩码。
- UP:接口状态为启用。
- RX/TX packets:接收/发送的数据包数量。
- RX/TX bytes:接收/发送的数据字节数。
使用 ip addr 查看网络接口信息
ip 命令是现代 Linux 系统中推荐使用的网络配置工具,功能强大,灵活性高。
基本用法:
ip addr
示例输出:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:1a:2b:3c:4d:5e brd ff:ff:ff:ff:ff:ff
inet 192.168.1.10/24 brd 192.168.1.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::21a:2bff:fe3c:4d5e/64 scope link
valid_lft forever preferred_lft forever
说明:
- eth0:网络接口名称。
- <BROADCAST,MULTICAST,UP,LOWER_UP>:接口状态标志。
- inet:IPv4 地址及子网掩码。
- inet6:IPv6 地址。
使用 ip link 查看网络接口状态
ip link 命令用于查看和管理网络接口的状态信息。
基本用法:
ip link
示例输出:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 00:1a:2b:3c:4d:5e brd ff:ff:ff:ff:ff:ff
说明:
- lo:回环接口。
- eth0:以太网接口。
- UP:接口已启用。
- LOWER_UP:物理链路已连接。
常见网络接口状态解释
- UP:接口已启用。
- DOWN:接口已禁用。
- BROADCAST:支持广播。
- MULTICAST:支持多播。
- LOOPBACK:回环接口,用于本地通信。
- LOWER_UP:物理链路已连接。
配置 IP 地址和路由
配置 IP 地址和路由是确保系统能够在网络中正确通信的关键步骤。根据需求,可以配置静态 IP 地址或使用动态主机配置协议(DHCP)获取 IP 地址。
配置静态 IP 地址
使用 ip addr add 命令
ip 命令可以用于临时配置网络接口的 IP 地址,这些配置在系统重启后不会保留。
示例:为 eth0 接口添加静态 IP 地址
sudo ip addr add 192.168.1.20/24 dev eth0
sudo ip link set eth0 up
说明:
- 192.168.1.20/24:要分配的 IP 地址和子网掩码。
- dev eth0:指定网络接口。
注意事项:
- 该配置为临时配置,重启后失效。要实现永久配置,需要编辑网络配置文件。
编辑网络配置文件
不同的 Linux 发行版使用不同的网络配置工具和文件。以下以 Debian/Ubuntu 和 CentOS/RHEL 为例进行说明。
Debian/Ubuntu 使用 /etc/network/interfaces
- 打开配置文件
sudo nano /etc/network/interfaces - 添加静态 IP 配置
auto eth0 iface eth0 inet static address 192.168.1.20 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 8.8.8.8 8.8.4.4 - 应用配置
sudo systemctl restart networking
CentOS/RHEL 使用 NetworkManager 或 /etc/sysconfig/network-scripts/
- 编辑配置文件
sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0 - 添加静态 IP 配置
DEVICE=eth0 BOOTPROTO=static ONBOOT=yes IPADDR=192.168.1.20 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=8.8.8.8 DNS2=8.8.4.4 - 应用配置
sudo systemctl restart network
使用 Netplan(Ubuntu 18.04 及以上版本)
- 编辑 Netplan 配置文件
sudo nano /etc/netplan/01-netcfg.yaml - 添加静态 IP 配置
network: version: 2 renderer: networkd ethernets: eth0: dhcp4: no addresses: [192.168.1.20/24] gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8,8.8.4.4] - 应用配置
sudo netplan apply
使用 dhclient 获取动态 IP 地址
DHCP(Dynamic Host Configuration Protocol)允许系统自动获取 IP 地址及其他网络配置信息。
命令:
sudo dhclient eth0
说明:
- eth0:指定要获取动态 IP 的网络接口。
注意事项:
- 确保网络中有 DHCP 服务器提供 IP 地址分配服务。
- 该配置为临时配置,重启后可能需要重新获取 IP 地址。
配置默认网关
默认网关用于指示数据包发送到其他网络的路径。
使用 ip route add 命令
示例:
sudo ip route add default via 192.168.1.1
说明:
- default:表示默认路由。
- via 192.168.1.1:指定默认网关的 IP 地址。
编辑网络配置文件
为了实现永久配置,需将默认网关添加到网络配置文件中。
Debian/Ubuntu 使用 /etc/network/interfaces
auto eth0
iface eth0 inet static
address 192.168.1.20
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8 8.8.4.4
CentOS/RHEL 使用 /etc/sysconfig/network-scripts/ifcfg-eth0
GATEWAY=192.168.1.1
Netplan 配置示例
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
addresses: [192.168.1.20/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8,8.8.4.4]
本节总结
- 本节主要围绕 Linux 用户与组管理、账户与密码管理、
passwd- 设置和更改密码、chage- 修改密码过期信息、密码配置文件 展开。 - 需要重点掌握的命令或工具包括:
passwd、chage。 - 学习时应优先抓住「命令解决什么问题、在什么场景下使用、执行后会产生什么结果」。
- 对涉及权限、覆盖、网络、系统服务、删除或安全配置的操作,建议先在测试环境练习。
复习建议
- 先用自己的话复述本节每个主题或命令的作用,避免只记参数不懂用途。
- 按原文示例至少手敲一遍典型命令,并观察输出变化。
- 对高风险操作先确认路径、权限和目标对象,再执行实际命令。
- 可优先复习这些高频命令:
passwd、chage。