Можно ли использовать devpi-server для создания групп?

Документы Devpi для параметра --restrict-modify указывают, что помимо указания прав доступа для пользователя права доступа также могут быть изменены для группы:

укажите, какие пользователи/группы могут создавать других пользователей и их индексы. Несколько пользователей и групп разделяются запятыми. Перед группами должно стоять двоеточие: ':group'. [...]

Однако нет документации о том, как на самом деле создать группу; интегрировано ли это напрямую с группами Unix, доступными на хост-компьютере?


person 0xdd    schedule 18.04.2018    source источник


Ответы (1)


Сервер devpi сам не занимается управлением группами. Вместо этого он делегирует его плагинам аутентификации. Взгляните на спецификацию ловушек devpiserver_auth_user:

вернуть dict, содержащий результаты проверки подлинности. Диктовка должна быть возвращена с ключом «статус» с одним из следующих значений:

  • "ok" - аутентификация прошла успешно
  • "неизвестно" - нет подходящего пользователя, пробуются другие плагины
  • "reject" - неверный пароль, аутентификация прекращается

При желании плагин может вернуть список имен групп, членом которых является пользователь, используя ключ «groups» результирующего словаря.

Насколько я знаю, в настоящее время существует только плагин, использующий группы: devpi-ldap, ознакомьтесь с его кодом для примера использования.

Что касается привязки прав доступа к unix-группам, то такой плагин авторизации можно было бы написать самостоятельно. Вот глупый пример плагина, который не выполняет никакой реальной аутентификации, а только возвращает группы unix, к которым принадлежит пользователь, запрашивающий доступ:

# myplugin.py

import grp
from pluggy import HookimplMarker


@hookimpl(tryfirst=True)
def devpiserver_auth_user(userdict, username, password):
    # get all groups for the user
    groups = [group.gr_name for group in grp.getgrall() if username in group.gr_mem]
    return {'status': 'ok', 'groups': groups}

Теперь добавьте точку входа devpi в сценарий установки плагина, и все готово:

from setuptools import setup

setup(
    name='devpi-unix-group-auth',
    py_modules=['myplugin'],
    entry_points={
    'console_scripts': {
        'devpi_server': ['devpi-unix-group-auth = myplugin']
    },
    ...
)
person hoefling    schedule 25.04.2018