VMOD unix - Утилиты для сокетов Unix-домена
СИНОПСИС
import unix [as name] [from "path"] STRING user() STRING group() INT uid() INT gid()
ОПИСАНИЕ
Этот VMOD предоставляет информацию о правах процесса-партнёра (пользователь и группа владельца процесса), подключённого к Varnish-листенеру через сокет Unix-домена, если платформа это поддерживает.
Примеры:
import unix;
sub vcl_recv {
# Return "403 Forbidden" if the connected peer is
# not running as the user "trusteduser".
if (unix.user() != "trusteduser") {
return( synth(403) );
}
# Require the connected peer to run in the group
# "trustedgroup".
if (unix.group() != "trustedgroup") {
return( synth(403) );
}
# Require the connected peer to run under a specific numeric
# user id.
if (unix.uid() != 4711) {
return( synth(403) );
}
# Require the connected peer to run under a numeric group id.
if (unix.gid() != 815) {
return( synth(403) );
}
}
Получение прав партнёра возможно на платформе, поддерживающей одно из следующего:
-
getpeereid(3)(например, FreeBSD и другие системы, основанные на BSD) - опция сокета
SO_PEERCREDдляgetsockopt(2)(Linux) -
getpeerucred(3C)(SunOS и потомки)
В SunOS и производных системах права PRIV_PROC_INFO добавляются к дочернему процессу Varnish во время загрузки VMOD, см. setppriv(2).
На большинстве платформ возвращаемое значение — это эффективный пользователь или группа, которые действовали, когда процесс-партнёр инициировал подключение.
STRING user()
Возвращает имя пользователя владельца процесса-партнёра.
Ограничено: client, backend.
STRING group()
Возвращает имя группы владельца процесса-партнёра.
Ограничено: client, backend.
INT uid()
Возвращает числовой идентификатор пользователя владельца процесса-партнёра.
Ограничено: client, backend.
INT gid()
Возвращает числовой идентификатор группы владельца процесса-партнёра.
Ограничено: client, backend.
ОШИБКИ
Все функции в этом VMOD подчиняются следующим ограничениям:
- Ни одна из них не может быть вызвана в
vcl_init{}илиvcl_fini{}. Если одна из них вызывается вvcl_init{}, то программа VCL не загрузится с сообщением об ошибке от VMOD. -
Если вызов происходит на платформе, которая не поддерживается, то вызывается ошибка VCL. Сообщение об ошибке записывается в журнал (с тегом
VCL_Error), а для всех подпрограмм VCL, кромеvcl_synth{}, управление немедленно переходит кvcl_synth{}, со статусом ответа 503 и строкой причины «VCL failed».Если ошибка происходит во время
vcl_synth{}, тоvcl_synth{}прерывается, и отправляется строка ответа «503 VCL failed». - Если текущий листенер не является сокетом Unix-домена или попытка чтения прав завершается неудачно, то сообщение об ошибке
VCL_Errorзаписывается в журнал. Функции STRING (unix.user() и unix.group()) возвращаютNULL, а функции INT (unix.uid() и unix.gid()) — -1.
СМОТРИТЕ ТАКЖЕ
АВТОРСКИЕ ПРАВА
This document is licensed under the same conditions as Varnish itself. See LICENSE for details. SPDX-License-Identifier: BSD-2-Clause Authors: Geoffrey Simmons <geoffrey.simmons@uplex.de>
Copyright © 2006 Verdens Gang AS
Copyright © 2006–2020 Varnish Software AS
Licensed under the BSD-2-Clause License.
https://varnish-cache.org/docs/7.4/reference/vmod_unix.html