Devpi 的--restrict-modify
参数文档指定除了指定用户的访问权限外,还可以修改组的访问权限:
指定哪些用户/组可以创建其他用户及其索引。多个用户和组用逗号分隔。组需要以这样的冒号作为前缀:':group'。[...]
但是,没有关于如何实际创建组的文档;这是否直接与主机上可用的 Unix 组集成?
Devpi 的--restrict-modify
参数文档指定除了指定用户的访问权限外,还可以修改组的访问权限:
指定哪些用户/组可以创建其他用户及其索引。多个用户和组用逗号分隔。组需要以这样的冒号作为前缀:':group'。[...]
但是,没有关于如何实际创建组的文档;这是否直接与主机上可用的 Unix 组集成?
devpi
服务器本身不进行任何组管理。相反,它将其委托给身份验证插件。看一下devpiserver_auth_user
钩子规范:
返回包含身份验证验证结果的字典。必须返回带有以下值之一的键“状态”的 dict:
- "ok" - 认证成功
- “未知” - 没有匹配的用户,正在尝试其他插件
- "reject" - 密码无效,认证停止
可选地,插件可以使用结果字典的“组”键返回用户所属的组名列表。
AFAIK 目前只有使用 groups: 的插件devpi-ldap
,请查看其代码以获取使用示例。
至于将访问权限绑定到 unix 组,您可以轻松地自己编写这样的 auth 插件。这是一个不做任何真正身份验证的插件的愚蠢示例,只返回请求访问的用户所属的 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
在插件的设置脚本中添加 's 入口点,你就可以开始了:
from setuptools import setup
setup(
name='devpi-unix-group-auth',
py_modules=['myplugin'],
entry_points={
'console_scripts': {
'devpi_server': ['devpi-unix-group-auth = myplugin']
},
...
)