Kanboard是一个开源的看板管理项目,官方文档在此 Kanboard Documentation
开启openldap服务器
我们搭建好了openldap服务器之后,打开服务。(如果不知道怎么搭建openldap的,可以看这里点击打开链接)
docker run --name openldap -p 389:389 --d osixia/openldap #启动openldap服务
搭建kanboard服务器
跟搭建openldap服务器一样,搭建kanboard服务器同样也有两种方式,源码安装、docker搭建
因为本文的主要内容是介绍LDAP在kanboard的实现,所以简单明了的用docker来搭建kanboard服务器
docker pull kanboard/kanboard
docker run --name kanboard -p 8000:80--link openldap:ldaphost kanboard/kanboard #启动kanboard容器
关于上述的link参数,link就是在两个容器之间建立一种父子关系,父container中的web,可以得到子container上的信息。--link=container_name:name,这个可以在此容器的/etc/hosts文件中添加一个额外的name主机名。
kanboard的LDAP配置
docker exec -it kanboard bash #进入容器里面
vi /var/www/app/config.php
将下面内容添加到此文件中
// 启用LDAP认证(默认是false)
define('LDAP_AUTH', true);
// LDAP服务器主机名
define('LDAP_SERVER', 'ldaphost');
// LDAP服务器端口(默认是389)
define('LDAP_PORT', 389);
// 默认地,要求验证ldaps:// 形式的URL,设置为false则跳过验证
define('LDAP_SSL_VERIFY', false);
// 启用LDAP TLS认证
define('LDAP_START_TLS', false);
// 默认kanboard将ldap用户名小写以防止多重用户(数据库是区分大小的)
// 如果你想保留该案例,设置为true
define('LDAP_USERNAME_CASE_SENSITIVE', false);
// LDAP绑定类型: "anonymous", "user" or "proxy" 这个用来登陆LDAP服务器
define('LDAP_BIND_TYPE', 'proxy');
// proxy模式的LDAP 用户名
// user模式的LDAP匹配的用户名
define('LDAP_USERNAME', 'cn=admin,dc=example,dc=org');
// proxy模式的LDAP密码
define('LDAP_PASSWORD', 'admin');
// LDAP用户的DN
// Example for ActiveDirectory: CN=Users,DC=kanboard,DC=local
// Example for OpenLDAP: ou=People,dc=example,dc=com
define('LDAP_USER_BASE_DN', 'ou=users,dc=example,dc=org');
// 搜寻用户帐号时的LDAP匹配模式
// Example for ActiveDirectory: '(&(objectClass=user)(sAMAccountName=%s))'
// Example for OpenLDAP: 'uid=%s'
define('LDAP_USER_FILTER', '(|(uid=%s)|(mail=%s)');
// username的LDAP属性
// Example for ActiveDirectory: 'samaccountname'
// Example for OpenLDAP: 'uid'
define('LDAP_USER_ATTRIBUTE_USERNAME', 'uid');
// user full name的LDAP属性
// Example for ActiveDirectory: 'displayname'
// Example for OpenLDAP: 'cn'
define('LDAP_USER_ATTRIBUTE_FULLNAME', 'cn');
// 用户mail对应的LDAP属性
define('LDAP_USER_ATTRIBUTE_EMAIL', 'mail');
// 在用户的资料中寻找group的LDAP属性
define('LDAP_USER_ATTRIBUTE_GROUPS', 'memberof');
// LDAP attribute for user avatar image: thumbnailPhoto or jpegPhoto
define('LDAP_USER_ATTRIBUTE_PHOTO', '');
// LDAP attribute for user language, example: 'preferredlanguage'
// Put an empty string to disable language sync
define('LDAP_USER_ATTRIBUTE_LANGUAGE', '');
// 允许kanboard自动创建LDAP用户
define('LDAP_USER_CREATION', true);
// administrator的LDAP DN
// Example: CN=Kanboard-Admins,CN=Users,DC=kanboard,DC=local
define('LDAP_GROUP_ADMIN_DN', 'cn=Kanboard Admins,ou=groups,dc=example,dc=org');
// managers的LDAP DN
// Example: CN=Kanboard Managers,CN=Users,DC=kanboard,DC=local
define('LDAP_GROUP_MANAGER_DN', 'cn=Kanboard Managerse,ou=groups,dc=example,dc=org');
// 启动LDAP组权限
// The end-user will be able to browse LDAP groups from the user interface and allow access to specified projects
define('LDAP_GROUP_PROVIDER', true);
// groups的LDAP 基础DN
define('LDAP_GROUP_BASE_DN', 'ou=groups,dc=example,dc=org');
// LDAP组过滤
// Example for ActiveDirectory: (&(objectClass=group)(sAMAccountName=%s*))
define('LDAP_GROUP_FILTER', '(&(objectClass=groupOfNames)(cn=%s))');
// LDAP用户过滤
// If this filter is configured, Kanboard will search user groups in LDAP_GROUP_BASE_DN
// Example for OpenLDAP: (&(objectClass=posixGroup)(memberUid=%s))
define('LDAP_GROUP_USER_FILTER', '(&(objectClass=posixGroup)(memberUid=%s))');
// 组名对应与LDAP的属性
define('LDAP_GROUP_ATTRIBUTE_NAME', 'cn');
用户User的LDIF例子
dn: uid=manager,ou=Users,dc=kanboard,dc=local
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
uid: manager
sn: Lastname
givenName: Firstname
cn: Kanboard Manager
displayName: Kanboard Manager
mail: manager@kanboard.local
userPassword: password
memberOf: cn=Kanboard Managers,ou=Groups,dc=kanboard,dc=local
小组的LDIF例子
dn: cn=Kanboard Managers,ou=Groups,dc=kanboard,dc=local
objectClass: top
objectClass: groupOfNames
cn: Kanboard Managers
member: uid=manager,ou=Users,dc=kanboard,dc=local
将LDIF导入到openldap中、按照上述资料配置好kanboard,即可完成kanboard的LDAP认证。