如何在 NetBSD 上用一行命令更改 root 密码?在 FreeBSD 上,命令如下
echo "password" | pw mod user root -h 0 ;
答案1
pw
NetBSD在其默认安装中不支持该命令。您可以:
- 编译
pw
NetBSD 的命令并将其安装到您的系统上 - 编写一个执行相同功能的实用程序
- 通过直接操作影子文件来更新密码
请注意,根据您的脚本,您应该大概使用-H
(并提供适当加密的密码) 而不是-h
。
在系统中传递未加密的密码 (尤其是如果您正在执行类似 的操作echo "password"
) 是一个坏主意,因为它可能导致您的密码暴露给任何登录用户 (或服务)。
答案2
usermod
与交换机一起使用-p
。它包含在基础系统中,无需构建pw
。
答案3
我们遇到了类似的用例:自动创建具有糟糕密码的演示用户,绕过所有密码策略。事不宜迟,下面是根据邮件列表建议的一种卑鄙但有效的黑客方法:
伯恩壳功能
# example: set_password_insecure sybil magic
# $1: username
# $2: password
set_password_insecure() {
if [ -z "$1" ]; then
echo 'Missing username' >&2
return 1
fi
( PASSWORD_HASH="$(/usr/bin/pwhash "$2" | /usr/bin/sed 's@[\\$/]@\\&@g')"
/usr/bin/env EDITOR="in_place_sed() { /usr/bin/sed \"\$1\" \"\$2\" > \"\$2.bak.\$\$\" && /bin/mv \"\$2.bak.\$\$\" \"\$2\" ;}; in_place_sed 's/^$1:[^:]*:/$1:$PASSWORD_HASH:/' " \
/usr/sbin/vipw
)
}
伯恩壳命令
( USERNAME='mallory' PASSWORD='sex'; \
PASSWORD_HASH="$(/usr/bin/pwhash "$PASSWORD" | /usr/bin/sed 's@[\\$/]@\\&@g')"
/usr/bin/env EDITOR="in_place_sed() { /usr/bin/sed \"\$1\" \"\$2\" > \"\$2.bak.\$\$\" && /bin/mv \"\$2.bak.\$\$\" \"\$2\" ;}; in_place_sed 's/^$USERNAME:[^:]*:/$USERNAME:$PASSWORD_HASH:/' " \
/usr/sbin/vipw )
- 适用于
sh
和bash
(已shells/bash
安装),可能zsh
也适用于(未经测试)。 - 假定以 root 身份运行,如果没有,则添加
sudo
(已security/sudo
安装)或su - root -c
之前/usr/bin/env
。 sed
/mv
hack 是由于EDITOR
限制 + NetBSDsed
+ 要求没有其他依赖项 / 不必要的临时项 / 环境污染。