部署精简版LDAP

Linux大区 1年前 (2022) 导航君
9 0 0

准备环境(干净环境)

  • centos7
  • python3.6(yum安装)
  • redis5(可以yum安装,自行百度)
  • sqlite3(需要3.9以上,自带的不行需要编译安装)
  • liteAuth

开始部署liteAuth

yum install python3 git -y
python3 -m pip install --upgrade pip
mkdir /data/ldap -p  
python3 -m venv /data/ldap/liteAuth_env  ##创建虚拟环境,python3.6
cd /data/ldap/liteAuth_env
git clone https://github.com/gojuukaze/liteAuth.git  ##版本是0.1.0
source bin/activate   ##切换到虚拟环境
cd liteAuth/
pip install --upgrade pip  ##升级虚拟环境pip,默认pip3
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/  ##安装基本依赖
pip install Twisted==20.3.0  ##安装低点版本,否则启动时会报_PY3找不到的错误
pip install simpleui==4.0.2  ##安装需要模块
./lite_auth.py init    ##安装

配置liteAuth

cat > config/lite_auth_config.py <<EOF
DEBUG = False
"""
http server 配置
"""
HTTP_LISTEN = '0.0.0.0:9300'
# 访问lite auth的站点地址,填ip或域名
LITE_AUTH_URL = 'http://127.0.0.1:9080'
# 一定要以 / 结尾
ADMIN_URL = 'admin/'
# 用户信息中禁止用户自主修改的属性字段,管理员组不会被限制
# 非属性字段用户是不能自己修改的,不用添加
READONLY_ATTRIBUTES = ['mail']
# ------ 通知 -------
# 通知backend,用于发送密码过期,账户锁定等通知给用户。
# 目前支持 Email(只支持smtp),FeiShu,SMS
# 如果使用自定义的backend,key为绝对路径
NOTIFICATION_BACKEND = {
    # 'Email': {
    #     'host': 'smtp.163.com',
    #     'port': '25',
    #     'username': 'xx@163.com',
    #     'password': 'xx'
    # },
    # 'FeiShu': {
    #     'app_id': 'cli_xx',
    #     'app_secret': 'xx'
    # },
    # 短信,
    # 由于不同短信服务商对接方式不一样,无法给个通用的短信backend,需要短信通知你可以自行开发个backend。
    # 对于不熟悉python的公司,可以使用提供的SMS backend,你需要开发个新接口用于接收backend提交的发送短信的请求
    # 这个接口的参数为:mobile, msg
    # 'SMS': {
    #     'url': 'http://xxx', # 你的接口地址
    #     'method':'post', # 只支持 post, get
    #     'json': True, # 提交json格式的数据
    # },
}
# 密码过期通知
PASSWORD_EXPIRATION_NOTIFICATION = {
    # 运行时间
    'crontab': '0 8 * * *',
    # 还剩几天时发通知,不用写0
    'days': [30, 10, 7, 3, 2, 1]
}
"""
ldap server 配置
(虽然下面是ldap的配置,但对应的代码不一定在ldap server中,可能放到了ldap api中)
"""
LDAP_LISTEN = '0.0.0.0:9389'
# 最多返回多少用户
SEARCH_LIMIT = 1000
# 用于ldap请求的用户名,此用户不能登录管理后台,相当于只读用户
# 如果在初始化后修改了此项,你需要进admin手动修改uid
LDAP_USER = 'ldap'
# ----- LDAP_API -------
# http服务的地址,ldap服务会请求这个地址。
# 其实就是LITE_AUTH_URL,不过建议写内网地址
LDAP_API_URL = 'http://127.0.0.1:9080'
# LDAP_API http请求的超时时间,秒
# 一般不需要修改,
# 如果遇到errorMessage为HttpServerNeverReceived错误,可以尝试调大此项
# (如果出现需要修改此项才能正常返回的情况,请反馈给我)
LDAP_API_TIMEOUT = 3
# LDAP_API登录凭证的有效期,秒 (同时也是ldap连接的超时时间)
# ldap_bind会获取登录凭证以供后续请求验证身份
LDAP_API_AUTH_EXPIRY = 60
# ldap字段对应的liteAuth字段(key必须是全小写,value区分大小写)
# ldap请求时会把filter条件中的key替换为map中的值
LDAP_FIELD_MAP = {
    'cn': 'uid',
    'sn': 'uid',
    'userpassword': 'password',
    'ou': 'groups',
}
# liteAuth字段对应的ldap字段(key区分大小写,value必须是全小写)
# ldap返回用户信息时,会把用户属性的key替换为map中的值
LITE_AUTH_FIELD_MAP = {}
"""
策略配置
"""
# ------ 用户锁定策略 ------
# 最大连续登录失败次数,0表示无限制
MAX_LOGIN_ATTEMPT_NUM = 15
# n秒后重置登录失败次数
RESET_LOGIN_ATTEMPT_NUM_AFTER = 60
# 锁定时间,秒
USER_LOCK_DURATION = 60 * 3
# ------ 密码校验 ------
# 密码校验器
# 如果使用自定义的校验器,key为绝对路径,如: 'your_path.your_validator.FooValidator'
PASSWORD_VALIDATORS = {
    # 长度校验,min_length: 1-30
    'LengthValidator': {'min_length': 8},
    # 密码重用校验,禁止使用前num次使用的密码,0-5
    'ReuseValidator': {'num': 2},
    # 常见密码校验,禁止过于简单的密码,如:1234
    'CommonValidator': {},
    # 属性相似度校验,禁止和uid,mail相似的密码
    'UserInfoSimilarityValidator': {},
    # 复杂度校验
    'CharacterValidator': {
        'character_types': 2,  # 包含的多少种不同字符, 1-4
        'symbols': r'''!"#$%&'()*+,-./:<=>?@[\]^_`{|}~'''  # 允许的标点。 注意:格式是 r'''标点'''
    },
}
# ------ 密码其他配置 ------
# 密码有效期,天
MAX_PASSWORD_AGE = 36500
"""
LOG配置
"""
LOG_PATH = './log'
# 多大后切割,默认10mb
LOG_MAX_BYTES = 1024 * 1024 * 10
# 保留几分
LOG_BACKUP_COUNT = 10
EOF

启动liteAuth

./lite_auth.py start

配置nginx转发

cat > /etc/nginx/conf.d/local.conf <<EOF
server {
    # 如果你修改了LITE_AUTH_URL,改为对应的值
    listen       9080;
    server_name  127.0.0.1 192.168.31.170;
    # 替换为你的路径
    root /data/ldap/liteAuth_env/liteAuth;
    location / {
        try_files $uri @proxy_to_app;
    }
    location @proxy_to_app {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_host;
        # we don't want nginx trying to do something clever with
        # redirects, we set the Host: header above already.
        proxy_redirect off;
        # 如果你修改了HTTP_LISTEN,改为对应的值
        proxy_pass http://127.0.0.1:9300;
    }
}
EOF

登录前端配置

 ​http://192.168.31.170:9080/
部署精简版LDAP

部署精简版LDAP

部署精简版LDAP
部署精简版LDAP

相关模块版本

## pip list
Package           Version
----------------- ---------
asgiref           3.4.1
attrs             21.2.0
Automat           20.2.0
certifi           2021.10.8
cffi              1.15.0
chardet           3.0.4
click             7.1.2
constantly        15.1.0
cryptography      36.0.0
Django            3.2.5
django-crontab    0.7.1
gevent            20.9.0
greenlet          1.1.2
gunicorn          20.0.4
hyperlink         21.0.0
idna              2.10
incremental       21.3.0
jsonfield         3.1.0
ldaptor           19.1.0
passlib           1.7.4
pip               21.3.1
pyasn1            0.4.8
pyasn1-modules    0.2.8
pycparser         2.21
PyHamcrest        2.0.2
pyOpenSSL         21.0.0
pyparsing         3.0.6
pytz              2021.3
requests          2.24.0
service-identity  21.1.0
setuptools        39.2.0
simpleui          4.0.2
six               1.16.0
sqlparse          0.4.2
treq              20.4.1
Twisted           20.3.0
typing_extensions 4.0.1
urllib3           1.25.11
zope.event        4.5.0
zope.interface    5.4.0

spug运维平台的实践

  • 在liteAuth创建用户
    部署精简版LDAP
  • 在spug上配置ldap
    部署精简版LDAP
  • 登录spug测试
    部署精简版LDAP
    部署精简版LDAP
版权声明:导航君 发表于 2022年6月25日 上午8:21。
转载请注明:部署精简版LDAP | 第八网址导航

相关文章

暂无评论

暂无评论...