Я пытаюсь заставить Squid3 использовать обычную аутентификацию.
Но, хотя я предоставляю правильное имя пользователя / пароль, аутентификация не удалась!
мой ACL и http_access в squid.conf
:
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
acl SSL_ports port 443
acl SSL_ports port 80
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
auth_param basic program /usr/lib/squid3/ncsa_auth /etc/squid3/users
auth_param basic realm Private
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
acl ncsa_users proxy_auth REQUIRED
http_access allow ncsa_users
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all
Я создаю /etc/squid3/users
с:
htpasswd /etc/squid3/users myusername
Когда я настраиваю прокси-сервер в Firefox, и он запрашивает пароль, я предоставляю правильное имя пользователя / пароль, но это не удается, и он запрашивает снова.
В чем проблема?
Обнаружили проблему:
htpasswd
использует -m
(шифрование пароля с помощью модифицированной версии Apache MD5)
, но Squid (Squid 3.1.20 on Репозиторий Ubuntu 13.04) ncsa_auth
использует системную функцию crypt
(unistd.h
или crypt.h
) для проверки пароля (при наличии crypt()
- я не проверял другие сценарии)
Так что если мы запускаем /usr/lib/squid3/ncsa_auth /etc/squid3/users
и проверяем имя пользователя / пароль вручную, получим:
~$ /usr/lib/squid3/ncsa_auth /etc/squid3/users
user pass
Segmentation fault (core dumped)
Решение:
для создания файла пароля следует использовать переключатель -d
:
htpasswd -d /etc/squid3/users myusername
(использование -d говорит htpasswd
использовать системную функцию crypt
)
Удачи