【笔记】gitlab+openldap使用memberof筛选登录用户

这几天在搞kerberos+nfs4 没搞成 之前搞了个openldap实现了分散控制集中管理(不是DCS...)

gitlab和nexus也支持ldap 虽然都不咋好用 但是在搞gitlab的时候发现memberOf这个玩意就是用不了

查了半天资料才知道这玩意默认是没加载的 特此记录笔记

参考:https://blog.csdn.net/u011607971/article/details/119037796

他是centos的系统(大概) 我是ubuntu 所以有些配置文件要改

先说系统环境 docker安装的osixia/openldap:1.4.0 里面openldap的版本是 slapd 2.4.50+dfsg-1~bpo10+1 

容器内系统是Linux openldap 5.4.0-137-generic #154-Ubuntu

ldap目录是这样的 无视那个kerberos及其相关元素 那玩意折腾的我想放弃了 学shiro都没他费劲

找个地方写个文件add_memberof_module.ldif 然后 ldapadd -Q -Y EXTERNAL -H ldapi:/// -f add_memberof_module.ldif 写进数据库 内容如下

dn: cn=module,cn=config
cn: module
objectClass: olcModuleList
olcModulePath: /usr/lib/ldap <------这里是你的ldap的lib库的位置

dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: memberof.la

然后是add_groupofnames_module.ldif 同样 ldapadd -Q -Y EXTERNAL -H ldapi:/// -f add_groupofnames_module.ldif 写进数据库

dn: olcOverlay=memberof,olcDatabase={1}mdb,cn=config <------我这里是{1}mdb 他是{2}hdb 应该是ldap版本差异 我是2.4.50 安装的时候都没见到让选hdb还是mdb
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member     
olcMemberOfMemberOfAD: memberOf

弄完了之后去添加组 类型为groupOfNames 注意不要选posixGroup 然后给这个组里添加用户 弄完了就像这样

然后去gitlab.rb改配置

gitlab_rails['ldap_enabled'] = true 
gitlab_rails['prevent_ldap_sign_in'] = false

###! **remember to close this block with 'EOS' below**
gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
  main: # 'main' is the GitLab 'provider ID' of this LDAP server
    label: 'LDAP'
    host: '10.0.0.1'
    port: 389
    uid: 'uid'
    bind_dn: 'cn=admin,dc=erika,dc=cn'
    password: '密码'
    encryption: 'plain' # "start_tls" or "simple_tls" or "plain"
    #verify_certificates: true
    #smartcard_auth: false
    active_directory: true
    allow_username_or_email_login: true
    lowercase_usernames: false
    block_auto_created_users: false
    base: 'ou=People,dc=erika,dc=cn'
    group_base: 'ou=Group,dc=erika,dc=cn'
    user_filter: '(memberOf=cn=gitlab,ou=Group,dc=erika,dc=cn)'
    attributes: 
      username: ['uid','cn','sAMAccountName']
      email: ['mail','email','userPrincipalName']
      name: 'cn'
      first_name: 'givenName'
      last_name: 'sn'
    ## EE only
    #group_base: ''
    #admin_group: ''
    #sync_ssh_keys: false
EOS

至于user_filter外面的括号括不括 我也不知道 反正这样能用 不过好像是多个条件才必须要加括号

然后gitlab-ctl reconfigure 等他重新加载完配置 就能用了 另外建议笔记本用户不要用ldap这种认证方式登录系统 在没连到ldap服务器的时候或者dns出错的时候登录会等好长时间 我感觉这玩意搞服务认证就够了

posted on 2023-01-25 21:21  绝对密位  阅读(348)  评论(0编辑  收藏  举报

导航