Я пытаюсь защитить URL-адрес с помощью базовой аутентификации и хочу использовать пользователей из моего приложения Django, которые хранятся в базе данных Postgres. Пользователь app
разрешен доступ к этой базе данных, веб-приложение работает нормально, но сценарий аутентификации запускается не с тем пользователем.
WSGIDaemonProcess app user=app group=www-data home=/app
<VirtualHost>
# other stuff here
<Location /admin/protected>
AuthType Basic
AuthName "Login Required"
Require valid-user
AuthBasicProvider wsgi
WSGIAuthUserScript /app/scripts/auth.wsgi
</Location>
WSGIScriptAlias / /app/django.wsgi
WSGIProcessGroup app
</VirtualHost>
Это ошибка, которую я получаю в своих журналах:
OperationalError: FATAL: Ident authentication failed for user "www-data"
Есть ли способ изменить пользователя, у которого auth.wsgi
скрипт запускается?
Проверки системы аутентификации Apache выполняются в рабочих процессах Apache, а не в процессе демона WSGI. Система аутентификации Apache только сообщает, разрешен ли пользователю доступ к веб-приложению. Это не меняет пользователя, от имени которого работает рабочий процесс, и он будет продолжать работать как пользователь Apache. Если вы пытаетесь использовать доступ на основе доверия к базе данных в зависимости от того, от имени какого пользователя работает клиент, это не сработает.
Единственный вариант - запустить весь Apache в качестве пользователя приложения, установив глобальную директиву Apache User. Это вряд ли то, что вы действительно хотите делать. Или настройте базу данных, чтобы разрешить доступ пользователю www-data.