[openldap]用OpenLDAP统一认证SVN/GitLAB/openVPN并分割

2022-05-20 14:17:54 浏览数 (1)

当IT系统的数量增多,统一管理各个信息系统的用户信息就是一件很有必要的事情,否则一个个系统去开通和注销用户,不但操作繁琐容易出错,而且可能会出现不安全的情况。比如张三离职后注销了人资系统的帐号却还在可以登录办公系统,或者李四离开公司还可以登录公司内部网络。

目录服务器就是专为统一认证用户信息设计,我们最熟悉的轻量级目录服务器,除了Windows Active Directory,就是Linux下的OpenLDAP了。

这里我们更进一步,不但使用openldap统一认证,而且使用其过滤功能分离权限,避免一个人有了账户就可以登录任意系统。

也就是说v**用户不一定可以使用svn和gitlab,反过来svn用户也不一定可以使用v**和gitlab服务。

具体的做法就是使用inetOrgPerson对象的businessCategory属性来定义svn/gitlab/openvpn权限。

配置如下:

SVN

代码语言:javascript复制
<Location /svn>
......
    AuthLDAPURL "ldap://x.x.x.x:389/ou=people,dc=example,dc=com?cn??(&(businessCategory=*svn*)(objectClass=inetOrgPerson))"
    Require valid-user
    AuthBasicProvider ldap
......
</Location>

GitLab

代码语言:javascript复制
gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = {
  'main' => {
  'label' => 'OpenLDAP',
  'host' =>  'x.x.x.x',
  'port' => 389,
  'uid' => 'cn',
  'encryption' => 'plain',
  'verify_certificates' => true,
  'active_directory' => false,
  'base' => 'ou=people,dc=example,dc=com',
  'allow_username_or_email_login' => false,
  'user_filter' => '(&(businessCategory=*git*)(objectClass=inetOrgPerson))',
  }
}

openvpn

安装包 openvpn-auth-ldap

主配置文件

/etc/openvpn/server.conf

代码语言:javascript复制
plugin /usr/lib64/openvpn/plugins/openvpn-auth-ldap.so /etc/openvpn/auth/ldap.conf

该插件配置文件

/etc/openvpn/auth/ldap.conf

代码语言:javascript复制
<LDAP>
    URL ldap://x.x.x.x:389
</LDAP>

<Authorization>
    BaseDN "ou=people,dc=example,dc=com"
    SearchFilter    "(&(cn=%u)(businessCategory=*vpn*))"
    RequireGroup false
</Authorization>

通过上面的配置,svn/gitlab/openldap服务都通过openldap统一认证用户,但是各个系统用户权限还是独立的,不会出现一个用户注册后可以登录任意系统的情况,开通权限也很简单,直接给businessCategory赋值使其包含过滤关键字就可以了。如"vpn git"就可以使用vpn和git,"svn git"就可以使用svn和git,"vpn git svn"就是都可以访问。

说明

ldap是一个广泛通用的协议,几乎所有操作系统,网络设备,和应用程序都可以使用它来进行用户认证。

上面使用businessCategory属性只是为了方便而已,实际用户可以自己创建对象和属性,比如创建一个名为XPerson的对象,在里面创建一个名为xNet的属性,一样可以用来作限制。

实际上ldap可以看作一个为专用于认证的数据库,新建属性类似传统数据库里面为表添加自定义字段。

PS: pve下有OpenLDAP的lxc容器模板,整个安装配置只需要几分钟。

0 人点赞