DrQueueOnRails 集成 LDAP 验证

2022-06-12 09:57:04 浏览数 (1)

在做集群渲染管理软件时候遇到 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 用户登录了。

0 人点赞