Spec-Zone.ru › Varnish

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.

СМОТРИТЕ ТАКЖЕ

  • varnishd
  • VCL
  • getpeereid(3)
  • getsockopt(2)
  • getpeerucred(3C)
  • setppriv(2)

АВТОРСКИЕ ПРАВА

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API