我正在尝试编写一个脚本,用于在多台机器上创建用户。我希望在任何时候都不知道用户的密码,但拥有公共 SSH 密钥对我来说是完全可以接受的。用户将需要使用 sudo,因此需要密码才能提升权限。用户是否可以在没有密码的情况下为自己设置密码来登录?到目前为止,我对这个密码创建方案的所有测试都未能找到让用户更改密码的方法。
这是目前的脚本。
# Must be run with root permissions
# sudo will be sufficient
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root" 1>&2
exit 1
fi
# Create User
user=newadmin
adduser $user --disabled-password --gecos "New Admin"
adduser $user sudo
adduser $user adm
# Create and populate authorized keys
keys=/home/$user/.ssh/authorized_keys
mkdir /home/$user/.ssh
chmod 700 /home/$user/.ssh
touch $keys
chmod 600 $keys
cat <<EOT >> $keys
${relevant_content_for-authorized_keys-file_here}
EOT
chown -R $user:$user /home/$user/.ssh
# Check that the file exists and that ownership is correct
# TODO: check permissions of file and directory also
if [ `stat -c '%U' $keys`==$user ]
then
echo "Successfully created $keys for $user"
else
echo "Failed to configure $keys properly for $user"
fi
如果必须的话,我会使用较短的密码有效期,但我宁愿他们无法提升权限,直到他们的密码被设置为我不知道的内容。
echo "password:$user" | chpasswd
chage -M 4 $user
是的,我知道我是一个偏执的系统管理员。:-)
答案1
您的问题没有多大意义,因为所讨论的用户具有 sudo 访问权限。
所以 ...
- 是的,用户可以更改 ssh 密钥上的密码。
和
- 具有 root 访问权限的用户可以更改系统上任何其他用户的密码或锁定帐户,而无需知道目标帐户的密码。
我不确定您如何授予他们 root 访问权限,或者 root 访问权限是否受到任何限制。如果您使用默认 sudo 配置,那么他们知道他们的密码,因此可以更改它。如果您使用 su ,一旦他们获得 root 访问权限,他们就可以做他们想做的事情,除非您使用 apparmor 或 selinux 等工具限制他们。
也许您可以锁定帐户并强制新用户在首次登录时设置密码。
从https://unix.stackexchange.com/questions/50699/force-pubkey-auth-user-to-set-password-at-first-login
将其添加到您的脚本中:
passwd -d $用户
chage -d0 $用户