ldapserver@centos7


最近仕事で認証がらみのことをよくやるようになったので、
ldapサーバを設定してみる。

ldapというのは、アクティブディレクトリで使われるプロトコルである。

というか、ldapといったらADつまりWindowsサーバである場合がほとんどではないだろうか。

Windowsサーバを買ったり借りたりするのはまだまだ高価なので、

さくらのクラウドで借りているcentos7で作ってみる。




インストール

yum install openldap openldap-servers openldap-lclients


DB設定をつくる(exampleをコピー)

cp /userr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG


パスワード生成(この値をあとで使う)

[root@adam ~]# slappasswd
New password: 
Re-enter new password: 
{SSHA}xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


firewallでldapを許可

[root@adam ~]# firewall-cmd a--add-service=ldap --zone=public
success
[root@adam ~]# firewall-cmd --add-service=ldap --zone=public --permanent
success



slapd を起動

[root@adam ~]# systemctl enable slapd
[root@adam ~]# systemctl enable slapdstart slapd


設定はファイルを直接編集するのではなく、
.ldifという拡張子のついたファイルを作ってそこに設定内容を書き、
それをコマンドで読み込ませておこなう。


.ldifファイルは任意の場所で任意の名前で作ってよいようだ。


rootパスワードの設定(slappasswdで生成された値を書く)

[root@adam]# cat rootpw.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx



ここではまったのが、「replace: olcRootPW」の部分だ。
参考にした複数の情報では「add: olcRootPW」になっていたが、
それだと下記のようなエラーになる。


[root@adam]#  ldapadd -Y EXTERNAL -H ldapi:/// -f rootpw.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"
ldap_modify: Inappropriate matching (18)
additional info: modify/add: olcRootPW: no equality matching rule


成功すると下記のようになる

[root@adam]# ldapadd -Y EXTERNAL -H ldapi:/// -f rootpw.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"


(なんでこうするのかはわからない。後で調べる)
→たぶん、参考にしたある情報ではrootpasswordを直接書き込んでいて、
olcRootPWのエントリがすでにあったから「add」ができなかったのだと思う。
デフォルト状態であればaddでよいはず。


ドメイン名

[root@adam]# cat change-domain.ldif
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
  read by dn.base="cn=Manager,dc=monqy,dc=net" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=monqy,dc=net

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=monqy,dc=net

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx



[root@adam]# ldapmodify -Y EXTERNAL -H ldapi:/// -f .change-domain.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"



組織情報(Users, Groups)



[root@adam]# cat org.ldif
dn: dc=monqy,dc=net
objectClass: dcObject
objectClass: organization
dc: monqy
o: monqy

dn: ou=Users,dc=monqy,dc=net
objectClass: organizationalUnit
ou: Users

dn: ou=Groups,dc=monqy,dc=net
objectClass: organizationalUnit
ou: Groups
[root@adam]#



[root@adam]# ldapadd -x -D "cn=Manager,dc=monqy,dc=net" -W -f org.ldif
Enter LDAP Password:
adding new entry "dc=monqy,dc=net"

adding new entry "ou=Users,dc=monqy,dc=net"

adding new entry "ou=Groups,dc=monqy,dc=net"




クライアントからアクセスしてみる。

WindowsにJXPlorerというアプリをインストールする。

左上の connect to DSAというアイコンをクリックし、
ldapサーバのホスト名を入力して「はい」をクリックすると、
上記で設定したUsersやGroupsが表示される。


実際の認証は、後程