Проверьте пользователя и пароль на файл, созданный htpasswd

Есть ли способ из командной строки проверить пользователя и пароль на файл, созданный htpasswd, инструментом, предоставляемым Apache?

Ответ 1

Предполагая, что вы создаете пароль, используя следующую команду и "myPassword" в качестве пароля

htpasswd -c /usr/local/apache/passwd/passwords username

Это создаст файл, который выглядит как

username:$apr1$sr15veBe$cwxJZHTVLHBkZKUoTHV.k.

$apr1 $- метод хэширования, sr15veBe - соль, а последняя строка - хешированный пароль. Вы можете проверить его с помощью openssl, используя

openssl passwd -apr1 -salt sr15veBe myPassword

который выведет

$apr1$sr15veBe$cwxJZHTVLHBkZKUoTHV.k.

Конвейер, который вы могли бы использовать, будет следующим:

username="something"
htpasswd -c /usr/local/apache/passwd/passwords $username
****Enter password:****

salt=$($(cat passwords | cut -d$ -f3)
password=$(openssl passwd -apr1 -salt $salt)
****Enter password:****

grep -q $username:$password passwords 
if [ $? -eq 0 ]
 then echo "password is valid"
else 
 echo "password is invalid"
fi

Вам может потребоваться изменить команду openssl, так как команда Apache htpasswd немного склеивается в каждой системе.

Для получения дополнительной информации посетите страницу Apache по теме http://httpd.apache.org/docs/2.2/misc/password_encryptions.html

Ответ 2

Для этого можно использовать инструмент htpasswd.

# create htpasswd_file with user:password
$ htpasswd -cb htpasswd_file user password
Adding password for user user

# verify password for user
$ htpasswd -vb htpasswd_file user wrongpassword
password verification failed

$ htpasswd -vb htpasswd_file user password
Password for user user correct.

Статус выхода 0 для успеха, 3 для отказа.