slappasswd
是 OpenLDAP 中用于生成加密密码的工具。它对于安全地存储LDAP密码非常重要。下面详细介绍它的使用方法:
基本用法
1. 交互式模式(最常用)
slappasswd
执行后:
-
系统会提示:
New password:
(输入密码,不会显示) -
再次提示:
Re-enter new password:
(确认密码) -
输出加密后的密码,如:
{SSHA}qv8X8l4GHWgoh35fQr0NvYGM+OdfcR1P
2. 命令行直接指定密码
# 不安全的做法,密码会留在命令历史中
slappasswd -s "your_password"# 从文件读取密码(相对安全)
slappasswd -s "$(cat /path/to/password_file)"
常用参数选项
# 指定加密算法
slappasswd -h {MD5} # 使用MD5加密
slappasswd -h {SHA} # 使用SHA加密
slappasswd -h {SSHA} # 使用加盐的SHA(默认,最推荐)
slappasswd -h {CRYPT} # 使用crypt加密
slappasswd -h {SMD5} # 使用加盐的MD5# 指定密码
slappasswd -s "mypassword123"# 输出到文件而不是屏幕
slappasswd -s "mypassword123" -o /path/to/encrypted_password_file# 显示帮助信息
slappasswd -H
实际应用示例
场景1:创建LDAP用户时生成加密密码
# 生成加密密码
slappasswd -s "user123password"
# 输出:{SSHA}8Qxd9zrWcBzJCW2rGv9Q7Vp3x5Yzabc1# 在LDIF文件中使用
cat > add_user.ldif << EOF
dn: uid=user1,ou=people,dc=linx-info,dc=com
objectClass: inetOrgPerson
uid: user1
cn: Test User
sn: User
userPassword: {SSHA}8Qxd9zrWcBzJCW2rGv9Q7Vp3x5Yzabc1
EOF
场景2:修改现有用户密码
# 生成新密码
NEW_PASSWORD_HASH=$(slappasswd -s "new_password_123")# 创建修改文件
cat > change_pass.ldif << EOF
dn: uid=user1,ou=people,dc=linx-info,dc=com
changetype: modify
replace: userPassword
userPassword: $NEW_PASSWORD_HASH
EOF# 执行修改
ldapmodify -H ldap://your-server -D "cn=admin,dc=linx-info,dc=com" -W -f change_pass.ldif
场景3:批量创建用户脚本
#!/bin/bash
USERNAME=$1
PLAIN_PASSWORD=$2# 生成加密密码
ENCRYPTED_PASS=$(slappasswd -s "$PLAIN_PASSWORD")cat > /tmp/add_$USERNAME.ldif << EOF
dn: uid=$USERNAME,ou=people,dc=linx-info,dc=com
objectClass: inetOrgPerson
uid: $USERNAME
cn: $USERNAME
sn: $USERNAME
userPassword: $ENCRYPTED_PASS
EOFecho "LDIF file created for user: $USERNAME"
支持的加密算法比较
算法 | 示例输出 | 安全性 | 说明 |
---|---|---|---|
{SSHA} | {SSHA}qv8X8l4GHWg... |
★★★★★ | 加盐SHA,最推荐 |
{SHA} | {SHA}5baa61e4c9... |
★★★★ | 不加盐SHA |
{SMD5} | {SMD5}4Qxd9zrWcBz... |
★★★ | 加盐MD5 |
{MD5} | {MD5}5d41402ab... |
★★ | 普通MD5,较弱 |
{CRYPT} | {CRYPT}ab1C2d3E... |
★★★★ | 系统crypt |
安全最佳实践
-
使用SSHA:
# 总是使用加盐的SHA slappasswd -h {SSHA} -s "your_password"
-
避免密码泄露:
# 错误:密码会留在历史中 slappasswd -s "password123"# 正确:交互式输入 slappasswd
-
文件权限:
# 如果输出到文件,设置严格权限 slappasswd -s "password123" -o /tmp/pass.txt chmod 600 /tmp/pass.txt
验证密码(如果需要)
虽然 slappasswd
只用于生成,但您可以用以下方式验证:
# 生成测试
HASH1=$(slappasswd -s "test123")
HASH2=$(slappasswd -s "test123")# 两个哈希值应该不同(因为盐值不同),但都能验证同一密码
echo "Hash 1: $HASH1"
echo "Hash 2: $HASH2"
在LDAP配置中使用
在 slapd.conf
或动态配置中,root密码通常也这样设置:
# 生成root密码
slappasswd -s "admin_secret_password"# 在配置中使用
olcRootPW: {SSHA}qv8X8l4GHWgoh35fQr0NvYGM+OdfcR1P
记住:永远不要使用明文密码存储在任何LDAP条目中!总是使用 slappasswd
生成的加密哈希。