Задача: Забыл пароль при обращении к своему сервису Mercurial Web где у меня хранятся все наработки скриптов. Т.е. при очередном обращении к сервису не помню какой пароль присвоен учетной записи. Вот дела.

Есть система, на которой поднята связка Mercurial + Web, повторить такое можете если обратитесь к заметке "Web-доступ к Mercurial на Ubuntu 18.04"

ekzorchik@srv-code:~$ uname -a && lsb_release -a
Linux srv-code 4.15.0-175-generic #184-Ubuntu SMP Thu Mar 24 17:48:36 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.6 LTS
Release:        18.04
Codename:       bionic
ekzorchik@srv-code:~$

У меня в каталоге /var/www/html/hg есть репозитарии и вот при клонировании одного из них я получаю ошибку авторизации:

ekzorchik@srv-us2204a:~$ hg clone http://172.35.35.8/hg/locale.sh
http authorization required for http://172.35.35.8/hg/locale.sh
realm: Mercurial repositories
user: ekzorchik
password: чтобы я ни вводил в качестве пароль, все отбивка - ошибка
abort: authorization failed
ekzorchik@srv-us2204a:~$

Шаг №1: Чтобы изменить пароль, который хранится в каталоге hgusers:

ekzorchik@srv-code:~$ ls -la /var/www/html/hg/hgusers
-rw-r--r-- 1 ekzorchik www-data 48 Apr 14  2022 /var/www/html/hg/hgusers
ekzorchik@srv-code:~$ cat /var/www/html/hg/hgusers
ekzorchik:$apr1$87S/0RhI$O9xxLhOluArr3N5QL/lwz.
ekzorchik@srv-code:~$

Поступаю так, если нужно создать файл:

ekzorchik@srv-bionic:~$ sudo htpasswd -c /var/www/html/hg/hgusers ekzorchik
New password: 712mbddr@
Re-type new password: 712mbddr@
Adding password for user ekzorchik

Удаляю пользователя ekzorchik из файла hgusers:

ekzorchik@srv-code:~$ sudo htpasswd -D /var/www/html/hg/hgusers ekzorchik
Deleting password for user ekzorchik
ekzorchik@srv-code:~$

Добавляю одного пользователя и добавляю другого пользователя: (Как оказалось ниже я ошибался на этот счет ниже, я перезатирал файл)

ekzorchik@srv-code:~$ sudo htpasswd -c /var/www/html/hg/hgusers ekzorchik
New password: указываю к примеру пароль 712mbddr@
Re-type new password: повторяю указанный пароль 712mbddr@
Adding password for user ekzorchik
ekzorchik@srv-code:~$ sudo htpasswd -c /var/www/html/hg/hgusers user1
New password: указываю к примеру пароль 712mbddr@
Re-type new password: повторяю указанный пароль 712mbddr@
Adding password for user user1
ekzorchik@srv-code:~$ cat /var/www/html/hg/hgusers
user1:$apr1$oLRLrBl9$fxtQgzpTQDHrY7TfTcT/q1
ekzorchik@srv-code:~$

Шаг №2: Перезапускаю Webсервис для активации внесенных изменений:

ekzorchik@srv-code:~$ sudo systemctl restart apache2

Шаг №3: Проверяю, что обратившись через браузер к URL адресу http://172.35.35.8/hg я смогу авторизоваться:

Не могу авторизоваться на Web Mercurial

указываю

  • Имя пользователя: ekzorchik
  • Пароль: 712mbddr@

и нажимаю "Вход", но меня выбрасывает опять на окно аутентификации, значит что-то не работает, логи говорят:

Wed Dec 07 08:11:39.902602 2022] [auth_basic:error] [pid 3307] [client 172.35.35.28:65474] AH01618: user ekzorchik not found: /hg, referer: http://172.35.35.8/

см. файл сайта для Web-сервиса Apache2:

ekzorchik@srv-code:~$ sudo bash -c "cat /etc/apache2/sites-enabled/hg.conf"
<Virtualhost *:80>
ScriptAlias /hg "/var/www/html/hg/hgwebdir.cgi"
<Directory /var/www/html/hg>
Options +ExecCGI
</Directory>
<Location /hg>
AuthType Basic
AuthName "Mercurial repositories"
AuthUserFile /var/www/html/hg/hgusers
Require valid-user ekzorchik
</Location>
</Virtualhost>
ekzorchik@srv-code:~$

а вот добавленная учетная запись user1 не будет работать она не перечислена в "Require valid-user", пока не важно. Нужно разобрать почему не идет аутентификация: — я баран, ключ "-с" не добавляем пользователя, а перезатирает:

ekzorchik@srv-code:~$ sudo mv /var/www/html/hg/hgusers /etc/apache2/
ekzorchik@srv-code:~$ cat /etc/apache2/hgusers
user1:$apr1$oLRLrBl9$fxtQgzpTQDHrY7TfTcT/q1
ekzorchik@srv-code:~$ sudo nano /etc/apache2/sites-enabled/hg.conf
<Virtualhost *:80>
ScriptAlias /hg "/var/www/html/hg/hgwebdir.cgi"
<Directory /var/www/html/hg>
Options +ExecCGI
</Directory>
<Location /hg>
AuthType Basic
AuthName "Mercurial repositories"
AuthUserFile /etc/apache2/hgusers
Require valid-user ekzorchik
</Location>
</Virtualhost>
ekzorchik@srv-code:~$ sudo htpasswd -c /etc/apache2/hgusers ekzorchik
New password:
Re-type new password:
Adding password for user ekzorchik
ekzorchik@srv-code:~$ cat /etc/apache2/hgusers
ekzorchik:$apr1$GUKFO2K.$.8z8t903MqnQ7ARZ82oUe.
ekzorchik@srv-code:~$
ekzorchik@srv-code:~$ sudo systemctl restart apache2
ekzorchik@srv-code:~$ 
ekzorchik@srv-code:~$ curl -I -u ekzorchik:712mbddr@ http://172.35.35.8/hg
HTTP/1.1 200 Script output follows
Date: Wed, 07 Dec 2022 05:29:51 GMT
Server: Apache/2.4.29 (Ubuntu)
Vary: Accept-Encoding
Content-Type: text/html; charset=ascii
ekzorchik@srv-code:~$

Шаг №4: Проверяю, могу ли я теперь с клонировать нужный репозитарий с измененными аутентификационными данными:

ekzorchik@srv-us2204a:~$ hg clone http://172.35.35.8/hg/dproject
http authorization required for http://172.35.35.8/hg/dproject
realm: Mercurial repositories
user: ekzorchik
password:
destination directory: dproject
requesting all changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 3 changes to 2 files
new changesets 25066b9f886f:6bf843a703d1
updating to branch default
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
ekzorchik@srv-us2204a:~$

Вот теперь успешно.

Шаг №5: А так ну все же как в файле hgusers перечислить несколько пользователей:

где "-c" -> создать новый файл паролей, если он уже есть, то ключ "-c" использовать не надо, т. к. будет пересоздан файл паролей.

ekzorchik@srv-code:~$ sudo htpasswd /etc/apache2/hgusers test1
New password: 712mbddr@
Re-type new password: 712mbddr@
Adding password for user test1
ekzorchik@srv-code:~$ cat /etc/apache2/hgusers
ekzorchik:$apr1$GUKFO2K.$.8z8t903MqnQ7ARZ82oUe.
test1:$apr1$ZU6p7Aak$BBuGtJUj.1wmtbFZT0ax1.
ekzorchik@srv-code:~$
ekzorchik@srv-code:~$ sudo nano /etc/apache2/sites-enabled/hg.conf
<Virtualhost *:80>
ScriptAlias /hg "/var/www/html/hg/hgwebdir.cgi"
<Directory /var/www/html/hg>
Options +ExecCGI
</Directory>
<Location /hg>
AuthType Basic
AuthName "Mercurial repositories"
AuthUserFile /etc/apache2/hgusers
Require valid-user ekzorchik test1
</Location>
</Virtualhost>
ekzorchik@srv-code:~$ sudo apache2ctl configtest
Syntax OK
ekzorchik@srv-code:~$ sudo systemctl restart apache2

Итого, я сам себе буратино, который забыл пароль, забыл, как добавлять пользователей в файл доступа к репозитариям, но теперь все поправимо и задокумментировано, если вдруг опять наступлю на те же самые грабли, то мой блок меня выручит. На этом я прощаюсь, с уважением автор блога Олло Александр aka ekzorchik.