冲击发电机

slapddgen的Python项目详细描述


扇耳光

注意:此工具非常先进。对我有用,可能对你有用。

注意:如果 打开cn=schema中的任何文件,因为这将破坏ldif格式。

slapddgen生成一个可以加载到openldap中的slapd.d 用slapd-f指向服务器。这将启动服务器 对于联机配置,akaolc,表示配置 它本身存储在目录服务器中,而不是slapd.conf

用法

此工具的输入包含在config.json中,或其他 --指向配置文件。有太多事情要做 使用环境变量或cli开关。把东西从 config.json肯定会爆炸,不过对于模块来说, acl、索引和唯一的空数组应该没问题。

一旦安装了slapddgen,就可以用slapddgen generate--config_file=/path/to/config.json--output_dir=/path/to/write/config/to运行它

修改模板

如果你知道你在做什么,你可以在 模板/slapd.d以满足您的需要。如果您已经安装了pip slapddgen会很烦人,因此在这种情况下,克隆存储库和 执行pip install-e.将更有帮助。

码头工人

还有一个示例dockerfile可用于打包 都在码头集装箱里。这对测试很有用 除此之外。

建筑

VERSION=$(git rev-parse --abbrev-ref HEAD)
docker build --no-cache=true\
    --build-arg BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')\
    --build-arg COMMIT=$(git rev-parse HEAD)\
    --build-arg VERSION=${VERSION}\
    -t ldap:${VERSION} .

在构建发行版时,请使用git describe--abbrev=0--tags 对于版本

运行

docker run -it -p 3389:389 -p 6636:636 ldap

这将向主机公开容器中的端口389,即ldap://url 在端口3389上(因此您不需要绑定到特权端口)并执行 端口636相同,ldaps://

您可以使用--entrypoint=/bin/sh更改入口点。一旦你做到了 仍然可以通过运行 slapd-u ldap-g ldap-d 256

生产

在为生产目的运行它时,确保 配置和数据可以保存到磁盘。否则你会从 每次重新启动容器时,都会刷新和清空目录服务。

为此,您可能应该卷装入以下内容:

  • 配置:/etc/openldap
  • 数据库:/var/lib/openldap/openldap data

创建一个单独的用户,ldapd,默认为55555的uid。这个 是为了确保您可以正确映射主机用户和容器用户,这样您就不会 进入卷装载的权限问题。

要更改容器中ldapd用户的uid,必须 重新生成并传入--build arg uid=<;number>;

配置

slapddgen为您生成一组配置,并假设 编辑布局:

- {{suffix}}
--- {{baseOU}},{{suffix}}
----- ou=accounts,{{baseOU}},{{suffix}}
----- ou=groups,{{baseOU}},{{suffix}}
----- ou=policy,{{baseOU}},{{suffix}}

当然,您可以通过修改模板自行更改此设置。

生成的配置使用联机/动态配置,aka olc,aka olcconfig。因此,不需要谈论slapd.conf 在ldapmodify的帮助下应用ldif来配置openldap服务器 进一步,

生成的slapd.d目录可用于启动OpenLDAP服务器 从零开始。以下部分假设您运行了slapddgen和 解释生成的配置中的一些内容。

cn=config.ldif

以下设置是与Alpine相关的默认设置:

olcConfigFile: /etc/openldap/slapd.conf
olcConfigDir: /etc/openldap/slapd.d/
olcArgsFile: /run/openldap/slapd.args
olcPidFile: /run/openldap/slapd.pid

值得注意的是:

olcPasswordCryptSaltFormat: $6$rounds=50000$%.16s

这使用了地下室的SHA512和50000发子弹(钥匙拉伸)。这与 olcdatabase={-1}frontend.ldif中的olcpasswordhash设置以及 olcppolicyhashcleartextolcoverlay={2}ppolicy.ldif,olcdatabase={2}mdb,cn=config中

cn=module{0}.ldif,cn=config

配置加载的模块。值得注意的是olcmodulepath和 相对于olcmodulepatholcmoduleload

olcdatabase={-1}前端.ldif,cn=config

前端数据库是一个特殊的伪数据库,包含设置 作为默认值应用于所有其他olcdatabases。

两个有趣的条目是:

olcMonitoring: FALSE
olcPasswordHash: {CRYPT}

olcmontioring禁用所有数据库的监视覆盖。它将会是 为olcdatabase={2}mdb.ldif显式启用。另一个确保我们 始终使用{crypt}作为密码哈希机制。哪些设置是 应用于密码散列由olcpasswordcryptsaltformat定义

olcdatabase={0}config.ldif,cn=config

这里唯一感兴趣的是olcaccess条目,它定义了 允许实体读/写cn=config

olcdatabase={1}monitor.ldif,cn=config

与上一节一样,olcaccess是唯一有趣的部分。

olcdatabase={2}mdb.ldif,cn=config

这个很有趣,因为它定义了 DIT中的条目,以及其他类似ACL的条目。

感兴趣的:

olcSuffix: dc=example,dc=com
olcRootDN: cn=Manager,dc=example,dc=com
olcRootPW: {CRYPT}super-long-hash
olcMonitoring: TRUE
olcDbMaxSize: 536870912
olcDbDirectory: /var/lib/openldap/openldap-data
olcDbIndex: objectClass eq
olcDbIndex: uid eq,sub
olcDbIndex: uidNumber eq
olcDbIndex: gidNumber eq
olcDbIndex: member eq
olcDbIndex: memberof eq

olcsuffix为所有条目定义默认后缀。olcrootdn是 此数据库"根"用户的DN,并且可以修改任何内容,而不考虑ACL。 olcrootpwolcrootdn的密码,由 slappasswd-h{crypt}'-c'$6$rounds=50000$%.16s'

olcmonitoring启用对此数据库和olcdbdirectory的监视 包含存储此数据库的磁盘上的路径。

olcdbindex条目定义openldap将为我们维护的索引 帮助加快搜索速度。

olcdbmaxsize定义将分配的内存映射的大小 对于数据库。它在运行时不能超过这个值 可以将其设置为更高的值,然后重新启动。值以字节为单位, 我们的默认值是半吉比特(GiB)。

与往常一样,还有许多olcaccess条目控制对 数据。

olcoverlay={0}memberof.ldif,olcdatabase={2}mdb,cn=config

这里我们存储覆盖的成员的配置。成员 覆盖将虚拟属性memberof添加到DIT存储中的任何条目 这个dn是什么成员。

假设您有三个groupofnames引用成员中的用户 属性。然后,该用户的memberof属性将包含 这三个域名的域名系统。请注意,memberof将只包含 直接/直接成员,而不是任何继承的成员(它将 不递归地展开成员属性。

感兴趣的设置是:

olcMemberOfDangling: error
olcMemberOfDanglingError: constraintViolation
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf

olcmemberoftanging指定在发生 修改将导致悬挂引用,返回 键入olcmemberofdangingerror

olcmemberofrefinit指定使用引用完整性 覆盖(请参阅下一节)。

olcmemberofgroupoc指定监视的对象类 悬垂的参考。这通常只对gorups有用,我们使用 groupofnames表示组。olcmemberofad指定使用的属性 要在中存储组成员,即成员olcmmemberofmadd 指定存储关系的属性,memberof

olcoverlay={1}refint.ldif,olcdatabase={2}mdb,cn=config

这将配置引用完整性覆盖。参照完整性 将负责更新对存储在 如果dn被重命名/移动,则返回属性。

注意:

olcRefintAttribute: owner
olcRefintAttribute: manager
olcRefintAttribute: memberOf
olcRefintAttribute: member
olcRefintAttribute: roleOccupant
olcRefintModifiersName: cn=Manager,dc=example,dc=com

olcrefintatattributes指定要强制执行的属性 的引用完整性。这只能是存储 一个杰出的名字。

olcrefintmodifiersname指定将存储在修饰符名称中的内容 由引用更新的任何项的操作属性 完整性覆盖。

olcoverlay={2}ppolicy.ldif,olcdatabase={2}mdb,cn=config

密码策略覆盖允许配置特定的最小值 密码要求(如存储在userpassword 属性)。

注意:

VERSION=$(git rev-parse --abbrev-ref HEAD)
docker build --no-cache=true\
    --build-arg BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')\
    --build-arg COMMIT=$(git rev-parse HEAD)\
    --build-arg VERSION=${VERSION}\
    -t ldap:${VERSION} .
0

olcppolicyHashClearText表示服务器将自动散列 使用olcpasswordhash以明文形式发送的任何密码

olcppolicydefault在DIT中定义存储 可以设置其他设置的默认密码策略。条目 应该有objectClass:pwdpolicy。其设置已记录在案 这里

您可以在ou=策略中创建其他/不同的密码策略 树的一部分,并通过添加pwdpolicysubentry将其附加到用户 属性,指向不同的策略。

olcppolicyUseLockout指示服务器是否应返回 尝试时,无效凭据false)提示绑定或accountlocked (true)代替。此配置默认为false 能够使用此功能枚举帐户。

olcoverlay={3}唯一.ldif,olcdatabase={2}mdb,cn=config

唯一覆盖允许在 树的一部分(或整棵树)。尽管rdn总是被强制到 唯一(例如,不能有两个人具有相同的uid) 其他属性不是,最关键的是像uidnumbergidnumber家庭目录

可以通过添加窗体的olcuniqueuri条目来创建约束: LDAP://[基本DN]?[属性…]?范围[?过滤]

例如,如果要强制实施uniquegidnumbers,可以执行以下操作: ldap:///?盖数?子< /代码>。不幸的是,这将强制执行gidnumberposixAccountposixGroup的约束,因此 能够创建posixAccount并将gidNumber设置为aposixGroups gid,这是不可取的。而是这样做:

VERSION=$(git rev-parse --abbrev-ref HEAD)
docker build --no-cache=true\
    --build-arg BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')\
    --build-arg COMMIT=$(git rev-parse HEAD)\
    --build-arg VERSION=${VERSION}\
    -t ldap:${VERSION} .
1

现在,约束将在 树,不是整体。

cn=schema.ldif,cn=config

没有任何相关的东西可以在这里看到或改变。它只需要存在。一次 服务器已启动此项将自动更新 使用服务器的内部对象类和属性(主要是 olc*对象类和属性。

cn=*.ldif,cn=schema,cn=config

包含服务器加载的架构文件。

更新这个是相当棘手的。"最简单"的方法是生成slapd.conf 使用模式的include语句,然后将其转储 使用slapdest-f/path/to/slapd.conf-f/path/to/slapd.d

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Oracle将休眠为ISO 8601日期格式   当有线程时,swing计时器不会停止。睡在Java里面   如何使用swing在java中清空密码字段值(字符串)   如何在编辑文本字段上设置单词java(安卓)   单独类中的java OkHttp请求   java Tomcat配置文件/上下文xml似乎已经崩溃了。请确保它是可分析和有效的。有关详细信息,请参阅服务器日志   java在科尔多瓦的ActivityResult上传递   java如何在映射中保持插入顺序。工厂?   “DataOutputStream”和“ObjectOutputStream”之间的java差异   java从FTP文件列表中获取项目的时间戳   java如何在spring security中为每个人忽略一些资源/URL?   模板类嵌套时新的Java泛型类构造函数问题   java读取并查找文件大小为1GB的行   java如何使用字符串say“stop”停止整数格式的while循环   java是否可以在应用程序启动之间将JVM保留在内存中?   java Springboot出现“出现意外错误(类型=内部服务器错误,状态=500)”的问题