学习目标

  • 理解本节涉及的核心主题:Linux 用户与组管理、账户与密码管理、passwd - 设置和更改密码、chage - 修改密码过期信息。
  • 掌握重点命令或工具:passwdchage
  • 能够结合示例完成常见操作,并理解关键参数、使用场景与结果差异。
  • 能够识别本节相关的常见风险、易错点或排查思路。

学习重点

  • 主题范围:Linux 用户与组管理、账户与密码管理、passwd - 设置和更改密码、chage - 修改密码过期信息、密码配置文件、管理用户密码复杂度和有效期
  • 重点命令:passwdchage
  • 学习重点:命令用途、关键参数、典型场景、与相近命令的区别
  • 复习方式:先理解场景,再动手练习,最后对照结果检查

Linux 用户与组管理

账户与密码管理

账户与密码管理涉及用户密码的设置、修改、策略配置等,确保系统的安全性和用户的访问控制。通过合理的密码管理策略,可以有效防止未经授权的访问和数据泄露。

passwd - 设置和更改密码

passwd 命令用于设置和更改用户账户的密码。它可以用于修改当前用户的密码或其他用户的密码(需要超级用户权限)。

设置用户密码

为特定用户设置密码:

sudo passwd 用户名

示例:为用户 alice 设置密码

sudo passwd alice

操作流程:

  1. 系统提示输入新密码:
    Enter new UNIX password:
    
  2. 系统提示确认新密码:
    Retype new UNIX password:
    
  3. 密码设置成功后,显示:
    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 文件中。使用文本编辑器(如 nanovim)编辑该文件,并配置 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

  1. 打开配置文件
    sudo nano /etc/network/interfaces
    
  2. 添加静态 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
    
  3. 应用配置
    sudo systemctl restart networking
    

CentOS/RHEL 使用 NetworkManager /etc/sysconfig/network-scripts/

  1. 编辑配置文件
    sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0
    
  2. 添加静态 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
    
  3. 应用配置
    sudo systemctl restart network
    

使用 Netplan(Ubuntu 18.04 及以上版本)

  1. 编辑 Netplan 配置文件
    sudo nano /etc/netplan/01-netcfg.yaml
    
  2. 添加静态 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]
    
  3. 应用配置
    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 - 修改密码过期信息、密码配置文件 展开。
  • 需要重点掌握的命令或工具包括:passwdchage
  • 学习时应优先抓住「命令解决什么问题、在什么场景下使用、执行后会产生什么结果」。
  • 对涉及权限、覆盖、网络、系统服务、删除或安全配置的操作,建议先在测试环境练习。

复习建议

  • 先用自己的话复述本节每个主题或命令的作用,避免只记参数不懂用途。
  • 按原文示例至少手敲一遍典型命令,并观察输出变化。
  • 对高风险操作先确认路径、权限和目标对象,再执行实际命令。
  • 可优先复习这些高频命令:passwdchage