在做集群渲染管理软件时候遇到 LDAP 问题,DrQueueOnRails 是 DrQueue 的 ruby web 接口,只有 LDAP 一种验证方式,就有了下面的安装步骤。
目录
- 1 安装 LDAP
- 2 修改 LDAP 配置文件
- 3 修改 slapd.conf
- 4 ldap_bind: Invalid credentials (49) 错误问题解决
安装 LDAP
代码语言:javascript复制yum install openldap-servers openldap-clients
修改主机名:
代码语言:javascript复制hostname master.local.com
sysctl -w kernel.hostname=master.local.com
echo '192.168.8.123 master.local.com master' >> /etc/hosts
sed -i 's/HOSTNAME=.*$/HOSTNAME=master.local.com/g' /etc/sysconfig/network
修改 LDAP 配置文件
代码语言:javascript复制vim /etc/openldap/ldap.conf
BASE dc=local.com
URI ldap://192.168.8.123
cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown -R ldap:ldap /var/lib/ldap
修改 slapd.conf
代码语言:javascript复制vim /etc/openldap/slapd.conf
找到并修改如下内容:
suffix "dc=local.com"
rootdn "cn=master,dc=local.com"
rootpw geek #ldapadd 时候要用的密码,中间用俩 TAB 键
测试配置文件是否正确:
代码语言:javascript复制slaptest -u -f /etc/openldap/slapd.conf
config file testing succeeded
创建待验证的用户:
代码语言:javascript复制useradd geek
echo '123456' | passwd --stdin geek
安装迁移工具:
代码语言:javascript复制yum -y install migrationtools
会把一些迁移用户相关信息的脚本放在 /usr/share/migrationtools 下 修改迁移脚本:
代码语言:javascript复制vim /usr/share/migrationtools/migrate_common.ph
# Default DNS domain
$DEFAULT_MAIL_DOMAIN = "local.com";
# Default base
$DEFAULT_BASE = "dc=local.com";
创建基本数据文件:
代码语言:javascript复制cd /usr/share/migrationtools/
./migrate_base.pl > base.ldif
编辑 base.ldif 文件,删除其它条目,保留如下信息:
代码语言:javascript复制dn: dc=local.com
dc: local.com
objectClass: top
objectClass: domain
dn: ou=People,dc=local.com
ou: People
objectClass: top
objectClass: organizationalUnit
dn: ou=Group,dc=local.com
ou: Group
objectClass: top
objectClass: organizationalUnit
创建用户数据库文件:
代码语言:javascript复制./migrate_passwd.pl /etc/passwd ./user.ldif
编辑 user.ldif 文件,只保留 geek 用户相关条目:
代码语言:javascript复制dn: uid=geek,ou=People,dc=local.com
uid: geek
cn: geek
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$6$tFEuTisK$PA0x.Ib1nOmiafK4wedqTnT06nQGJxVnzzpHQYu1O8SPXy5o32KkXKzzkn3w1LM0vpauFgjDQ4FudpnoS2t6O.
shadowLastChange: 15907
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 500
gidNumber: 500
homeDirectory: /home/geek
创建用户组数据库文件:
代码语言:javascript复制./migrate_group.pl /etc/group groups.ldif
编辑 groups.ldif 文件,只保留 geek 组的条目:
代码语言:javascript复制dn: cn=geek,ou=Group,dc=local.com
objectClass: posixGroup
objectClass: top
cn: geek
userPassword: {crypt}x
gidNumber: 500
启动服务:
代码语言:javascript复制/etc/init.d/slapd restart
chkconfig slapd on
依次添加 base.ldif、user.ldif、groups.ldif 到 LDAP 中:
代码语言:javascript复制ldapadd -D "cn=master,dc=local.com" -W -x -f base.ldif
Enter LDAP Password: # 输入在 /etc/openldap/slapd.conf 中 rootpw 项的值.
ldap_bind: Invalid credentials (49)
ldap_bind: Invalid credentials (49) 错误问题解决
如果出现如上错误,检查密码是否对应。或者重新生成 slapd.d 下的配置数据:
代码语言:javascript复制rm -fr /etc/openldap/slapd.d/*
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
chown -R ldap:ldap /etc/openldap/slapd.d/
/etc/init.d/slapd restart
这样就没有问题了。
编辑 DrQueueOnRails 目录中 config 下的 env 文件:
代码语言:javascript复制vim .../DrQueueOnRails/config/environment.rb
# LDAP variables
ENV['LDAP_TREEBASE'] ||= "dc=local.com"
ENV['LDAP_HOST'] ||= "master.local.com"
ENV['LDAP_PORT'] ||= "389"
ENV['LDAP_FILTER'] ||= "uid"
ENV['LDAP_ATTRS'] ||= "cn"
# user status, quota (disk space in GB), job priorities
ENV['USER_STATUS'] ||= "demo,student,advanced,admin,ldapuser1" #在这里添加新的用户
ENV['USER_QUOTA'] ||= "0.5,5,15,35,55,55" # 用户的磁盘配额
ENV['USER_PRIO'] ||= "100,500,750,1000,2000,2000" # 用户执行任务时候的优先级
ENV['USER_ADMIN_PW'] ||= "password"
改完重新 db 一下。 在数据库中添加 ldap 用户记录:
代码语言:javascript复制mysql -uroot -p
use DrQueueOnRails;
insert into profiles(name,email,avatar,ldap_account,status,accepted) values('Geek Account','geek@local.com','NULL','geek','geek','0');
重启 apache,就可以用 ldap 用户登录了。