Сервер 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