2025.12 天津·天津中医药大学

对于 Linux 用户,尤其是新手来说,安全账户管理比以往任何时候都更加紧迫。强密码和智能管理不仅仅是建议——它们是在黑客自动化攻击和新漏洞几乎每天都在发生的背景下您的第一道有效防线。

在本指南中,我们将为您介绍在 Linux 上设置密码的不同方法。我们将从简单方法开始,然后过渡到自动化脚本,甚至涵盖企业环境中使用的专业级方法。到结束时,您将能够自信且安全高效地管理密码。

安全地创建用户帐户

第一步是为用户创建一个包含主目录和默认 shell 的账户:

1
sudo useradd -m -s /bin/bash newuser

Explanation: 解释:

  • m → Creates a home directory for the user
    m → 为用户创建主目录
  • s /bin/bash → Sets the default shell
    s /bin/bash → 设置默认 shell

You can check the account:
你可以检查账户:

1
id newuser

强密码是必须的

强密码不仅仅是复杂性,它还关乎不可预测性和长度。如今的攻击者使用密码列表和暴力破解工具,每秒可以测试数十亿次的猜测。像 BlueSky$2025! 这样的密码看起来很强,但它遵循了人类模式——单词+年份+符号——这使得它变得可预测。一个更好的密码看起来是随机的,例如:R7@hDpXv9Q!2

对于现代系统,12-16 个字符现在是安全密码的新基准。您可以在 RHEL 9 上使用以下命令检查系统的密码策略:

1
cat /etc/security/pwquality.conf

此文件定义了如下值:

  • minlen → Minimum password length
    minlen → 最小密码长度
  • minclass → Required character diversity
    minclass → 所需字符多样性

您可以直接在终端中生成一个:

1
tr -dc 'A-Za-z0-9!@#$%^&*' < /dev/urandom | head -c12

让我们快速分解一下:

  • tr -dc ‘A-Za-z0-9!@#$%^&*’:这个命令用于过滤随机数据,仅保留字母、数字和一些常见符号。
  • < /dev/urandom:它从一串随机数据中获取输入。
  • | head -c12:这仅获取前 12 个字符。

结果是随机生成的 12 字符字符串。你可以自由地将 12 更改为任何你需要的长度!

认识 PASSWD命令

单用户密码管理

在 Linux 密码方面, passwd 是您的首选工具。它具有交互性,非常适合一次处理一个用户。

定期更新您的凭证是一个明智的习惯。这很简单:

  1. Open your terminal. 打开您的终端。
  2. 输入 passwd 并按 Enter 键。
  3. 当提示时输入您的当前密码。
  4. 输入您的新密码,然后确认它。

就这样! passwd 确保您输入的新密码正确无误。

管理其他用户密码

如果你拥有 sudo 或 root 权限,你可以为其他用户设置或重置密码。这在有人忘记密码或你正在设置新账户时很有用。

在命令中添加 sudo

1
sudo passwd <username>

例如,要更改名为 Alex 的用户密码:

1
sudo passwd alex

因为你在使用 sudo ,所以不需要 Alex 的旧密码。系统将直接提示你输入并确认一个新密码。

自动化管理密码

passwd 非常适合一次性更改,但它需要交互操作。如果你需要一次性为多个用户设置密码或在脚本中设置, chpasswd 就非常适用。

它以简单的 username:password 格式读取输入。例如:

1
echo 'bella:ThisIsAStrongPassword123!' | sudo chpasswd

无需提示,无需麻烦。Bella 的密码立即设置完成。chpasswd 是自动化和批量用户管理的变革者。为了最大程度的安全,你可能永远不想在你的脚本中处理明文密码。相反,你可以使用预哈希密码,并告诉 chpasswd 输入已经使用 -e 标志加密过了。

1
echo 'test:$6$rounds=100000$lEsRRO/bBCaL.Xnl$sOZ018XCqYjHp4ANWCUjKMLF1W/1PQ.0JmiaBwpHvmm71yvmg0Jr0zHlBd1' | sudo chpasswd -e

让我们来分解一下:

  • test: → 用户名
  • $6$ → 告诉 Linux 这是一个 SHA-512 哈希值
  • rounds=100000$ → 散列算法运行了 100,000 次
  • lEsRRO/bBCaL.Xnl$ → “盐”,即使密码相同,也能使每个散列值唯一
  • sOZ018XCq... → 最终的哈希密码
  • -e 标志指示 chpasswd 密码已经加密。

passwd -e (它会过期密码)不同, chpasswd -e 直接跳过哈希处理,直接设置存储的哈希值。

强制首次登录必须变更密码

即使你设置了临时密码,最佳实践是强制用户在首次登录时更改密码。
你可以通过以下方式完成:

  1. passwd -e – 立即过期密码
  2. chage -d 0 – 将最后密码更改日期设置为 0,强制更新

使用 chage 的示例:

1
2
3
4
5
# Step 1: 设置临时密码
echo 'bella:ThisIsAStrongPassword123!' | sudo chpasswd

# Step 2: 强制下次登录密码过期
sudo chage -d 0 bella

在脚本中使用 chage 是明确的,无论密码是设置为明文还是预散列,它都能正常工作。

超越密码保护账户

强密码只是第一层。Linux 提供了多种方法来进一步加强账户安全。

1
2
3
4
5
6
7
8
# 锁定非活动账户,防止在不删除账户的情况下登录。
sudo usermod -L username

# 设置账户过期日期(适用于临时用户或承包商)
sudo chage -E 2025-12-31 username

# 限制服务账户的 shell 访问,这可以阻止直接登录,同时仍然允许该账户为后台服务使用。
sudo useradd -s /sbin/nologin serviceuser

结合这些设置与强密码策略,可为您提供分层保护——这正是良好安全性的核心所在。


再次检查您的设置

创建用户后,始终验证所有配置是否符合预期。

1
2
3
4
5
6
# 检查密码状态
sudo passwd -S username
# 检查账户密码生效时间
sudo chage -l username
# 检查账户属性,包括 UID, GID, and groups
sudo id username

如果该账户仅用于有限用途,可以考虑完全禁用密码登录,并切换到 SSH 密钥认证,以实现更安全、更易于管理的方案。

使用脚本整合所有内容

这是一个包含所有内容的完整 Bash 脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/bash
# 遇到错误立即退出
set -e

# 0. 检查是否以 root 身份运行
if [[ $EUID -ne 0 ]]; then
echo "错误:此脚本必须以 root 身份运行。请使用 sudo。" >&2
exit 1
fi

# 1. 确认用户名
read -p "Enter the new username: " NEW_USER

# 2. 创建随机密码
NEW_PASS=$(tr -dc 'A-Za-z0-9!@#$%^&*' < /dev/urandom | head -c16)

# 3. 创建账号
sudo useradd -m -s /bin/bash $NEW_USER

# 4. 设置密码
echo "$NEW_USER:$NEW_PASS" | sudo chpasswd
# OR use a pre-hashed password:
# echo "$NEW_USER:<hashed_password>" | sudo chpasswd -e

# 5. 设置下次登录重设密码
sudo chage -d 0 $NEW_USER

# 6. 显示密码
echo "---------------------------------------"
echo "User '$NEW_USER' has been created."
echo "Temporary Password: $NEW_PASS"
echo "The user will be required to change this password on their first login."
echo "---------------------------------------"

总结

从交互式 passwd 到自动化 chpasswd 以及使用 -e 的预哈希密码,您现在拥有完整的工具集,用于安全的 Linux 用户管理。结合强制首次登录更改,您的用户和系统将更加安全。


原文链接:Securely Adding Users in Linux: Best Practices for Safe Accounts