Администратор не должен знать паролей пользователей, поэтому мы предлагаем пользователям самостоятельно сгенерировать хэш своего пароля и предоставить его администратору.
Сгенерировать хэш можно одним из следующих способов:
# если openssl версии 3 (например из homebrew)
openssl passwd -6
# если есть докер
docker run --rm -ti alpine:latest mkpasswd -m sha512
После этого хэш записывается в виде пары username:hash
в файл user.config
a.dudkin=$6$vJeefBDv$wAq0Vw/U93XTjak5cc.HIVdBCLHRWbr528TI/kP2Q.a2VYsYZkONE75FNYWwbx9tVh0daPaA6i.ScxHmpVnMt/
А вот и сам скрипт:
#!/bin/bash
set -eu
shadow_file="/etc/shadow"
users=($(<users.config))
cp $shadow_file $shadow_file-$(date +%F-%T).bak
for user in ${users[@]}; do
username=$(echo ${user%=*})
hash_str=$(echo ${user#*=})
if grep --quiet $username $shadow_file; then
echo "User: $username"
echo "Hash: $hash_str"
hash=$(echo $hash_str | sed -e 's|/|\\/|g')
sed -i "s/$username\:!!/$username\:$hash/g" $shadow_file
else
echo "User $username doesn't exist"
fi
done
Перед сменой пароля скрипт делает бэкап файла shadow. Также он проверяет, что искомый пользователь существует.