Скрипт для замены пароля пользователя на хэш в Linux

Администратор не должен знать паролей пользователей, поэтому мы предлагаем пользователям самостоятельно сгенерировать хэш своего пароля и предоставить его администратору.

Сгенерировать хэш можно одним из следующих способов:

# если 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. Также он проверяет, что искомый пользователь существует.

Был ли наш пост полезен?

Нажмите на звезду, чтобы оценить мои труды!

Средний рейтинг: 0 / 5. Количество голосов: 0

Пока голосов нет. Проголосуй первым!

Мне жаль, что пост вам не помог 🙁

Позвольте мне исправиться.

Поделитесь, что можно улучшить?

Похожие посты