openldapとsssdによるLDAPS試行@gentoo linux

単一のホスト上でしか試していないが,tlsを用いてのldapの認証がgentooでできたのでメモしておく.

 

1) slapdの基本設定

まず,ldapのサーバーはopenldapをインストールし,その設定はslapd.confで記述し,テストし,問題なければslapd.dに書き込む.slapdが起動できることを確認する./etc/conf.d/slapdを編集し,slapd.confからslapd.dに設定情報の場所を移行させる.

slapdが起動しない場合,slapd.dとデータベースディレクトリが整合していないことが考えられる.また,slapd.dのパーミッションも重要(owner, groupともにldapにしておく).

 

・slapd.confの例
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema


pidfile /run/openldap/slapd.pid
argsfile /run/openldap/slapd.args

modulepath /usr/lib64/openldap/openldap

database hdb
suffix "dc=dummy,dc=org"
checkpoint 32 30
rootdn "cn=root,dc=dummy,dc=org"

rootpw {SSHA}xxenter your encrypted passwordxxxx

directory /var/lib/openldap-data

index objectClass eq
index uid pres,eq
index mail pres,sub,eq
index cn pres,sub,eq
index sn pres,sub,eq
index dc eq
access to attrs=userPassword,givenName,sn,photo
              by self write
              by anonymous auth
              by dn.base="cn=root,dc=dummy,dc=org" write
              by * none

access to *
              by self read
              by dn.base="cn=root,dc=dummy,dc=org" write
              by * read

 

・slapd.confをテストし,slapd.dに流し込む

slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d

-F以下がなければ,単なるテスト.

 

・slapd.confではなくslapd.dでの設定で動作させる(/etc/conf.d/slapd).

#OPTS_CONF="-f /etc/${INSTANCE}/slapd.conf"
OPTS_CONF="-F /etc/${INSTANCE}/slapd.d"

ここまでできても,slapcatで何も表示されないはず.すなわち,データベースは空.

ここからは,ldifファイルを作成し,食わせていき,データベースを構築する.

 

・ldifファイルの例

# dummy.org
dn: dc=dummy,dc=org
dc: dummy
o: Dummy Family
objectClass: dcObject
objectClass: organization
description: Dummy family

# root, dummy.org
dn: cn=root,dc=dummy,dc=org
cn: root
description: LDAP administrator
objectClass: organizationalRole
objectClass: top
roleOccupant: dc=dummy,dc=org

# People, dummy.org
dn: ou=People,dc=dummy,dc=org
ou: People
objectClass: top
objectClass: organizationalUnit

# Groups, dummy.org
dn: ou=Group,dc=dummy,dc=org
ou: Group
objectClass: top
objectClass: organizationalUnit

・ldifを食わせる.

ldapadd -D "cn=root,dc=dummy,dc=org" -W  -f base.ldif

よくわからんが,""のなかの記述は先にslapd.confで設定したrootdnのものと一致していなくてはならない.

・間違って食わせたデータを削る例

ldapdel -D "cn=root,dc=dummy,dc=org" -W ou=Group,dc=dummy,dc=org

・アカウントのldifの例

dn: uid=bionic,ou=People,dc=tatsumi,dc=org
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: bionic
cn: Bionic Ubuntu
sn: Ubuntu
givenName: Bionic
title: Linux OS
userPassword: {SSHA}xxenter your encrypted passwordxxxx
loginShell: /bin/bash
uidNumber: 9999
gidNumber: 9999
homeDirectory: /home/bionic/
description: This is an example user

dn: cn=bionic,ou=Group,dc=tatsumi,dc=org
objectClass: posixGroup
cn: bionic
gidNumber: 9999
memberUid: bionic

注) slapd.confをいじった後は常にテストし,slapd.dに反映させる.うまく行かない場合は,slapd.dを削除してやり直す.データベースディレクトリを削除してやり直す.

注) ldapadd, ldapdelを用いてldifファイルを食わせていく.dcの記載等が間違っていると,食ってくれないし,エラーメッセージは不親切.

 

2)slapdのデータベース情報をキャッチする

/etc/openldap/ldap.confを設定し,

ldapsearch -xでデータベース情報がキャッチできるか,確認.ここまでできていれば,slapdは動くはず.

ldap.confの例

BASE dc=dummy,dc=org
URI ldap://111.111.113.133

 

3)データベース情報を受け取る方の設定

sssdをインストール./etc/sssd/sssd.confを設定する./etc/nsswitch.confを設定し直す./etc/pam.d/配下のファイルを設定し直す.

sssd起動確認.sssd.confのパーミッション(chmod 600 /etc/sssd/sssd.conf)も重要.

情報が取れているか,getent passwd [ldapアカウント名]で確認.

su やssh, loginでldapアカウントがログインできるか確認.

・sssd.confの例.

 [sssd]
config_file_version = 2
services = nss, pam
domains = genfic
debug_level = 5

[nss]
filter_users = root,ldap,named,avahi,haldaemon,dbus,radiusd,news,nscd

[domain/genfic]
id_provider = ldap
auth_provider = ldap
ldap_search_base = dc=dummy,dc=org
ldap_uri = ldap://111.111.113.133,ldap://127.0.0.1

・/etc/nsswitch.conf (sss追加箇所抜粋)

group: sss files
passwd: sss files
shadow: sss files
sudoers: sss files

・/etc/pam.d/system-auth

#%PAM-1.0

auth sufficient pam_sss.so forward_pass
auth required pam_unix.so try_first_pass nullok
auth optional pam_permit.so
auth required pam_env.so

#account [default=bad success=ok user_unknown=ignore authinfo_unavail=ignore] pam_sss.so
account required pam_unix.so
account optional pam_permit.so
account required pam_time.so

password sufficient pam_sss.so
password required pam_unix.so try_first_pass nullok sha512 shadow
password optional pam_permit.so

session required pam_mkhomedir.so skel=/etc/skel/ umask=0077
session required pam_limits.so
session required pam_unix.so
session optional pam_sss.so
session optional pam_permit.so

・/etc/pam.d/su

#%PAM-1.0
auth sufficient pam_rootok.so

auth sufficient pam_sss.so forward_pass retry=2
auth required pam_unix.so

account [default=bad success=ok user_unknown=ignore authinfo_unavail=ignore] pam_sss.so
account required pam_unix.so

session required pam_unix.so
session optional pam_sss.so

・/etc/pam.d/passwd

#%PAM-1.0
password sufficient pam_sss.so
password required pam_unix.so sha512 shadow nullok

 

4)tlsによる暗号化

自己証明書を作成し,slapd.confをtls動作するように修正,slapd.dに流し込む.slapd再起動.sssd.confもtls動作するように修正.sssd再起動.3)の方法で問題なく情報がキャッチでき,ログインできるか確認.認証局の証明書とその設定は今の所不要.

 ・自己証明書作成

openssl req -new -x509 -nodes -out slapdcert.pem -keyout slapdkey.pem -days 365

注) tls動作するのは url ldaps://.....である. .....は自己証明書作成時に記入した Common nameと一字一句異なってはならない.出来たslapdcert.pemとslapdkey.pemは例えば/etc/openldap/ssl/にコピーし,パーミッションを変更.

# chmod -R 755 /etc/openldap/ssl/
# chmod 400 /etc/openldap/ssl/slapdkey.pem
# chmod 444 /etc/openldap/ssl/slapdcert.pem
# chown ldap /etc/openldap/ssl/slapdkey.pem

 ・slapd.confのtls設定(末尾に追加し,slaptestでslap.dに流し込む)

TLSCipherSuite DEFAULT
TLSCertificateFile /etc/openldap/ssl/slapdcert.pem
TLSCertificateKeyFile /etc/openldap/ssl/slapdkey.pem
TLSCipherSuite HIGH:MEDIUM:-SSLv2:-SSLv3

・/etc/openldap/ldap.confのtls設定(ldap://ではなくldaps://)

URI ldaps://111.111.113.133
TLS_REQCERT hard

TLS_CACERT /etc/openldap/ssl/slapdcert.pem

・/etc/conf.d/slapdのtls設定(ldaps://が入っていること)

OPTS="${OPTS_CONF} -h 'ldaps:// ldap:// ldapi://%2fvar%2frun%2fopenldap%2fslapd.sock'"

・sssd.confのtls設定(ldap://ではなくldaps://)

ldap_tls_reqcert = hard
ldap_uri = ldaps://111.111.113.133,ldaps://127.0.0.1

3)4)はsssdではなく,nslcdでも可能であることを確認した.boot時は多くても片方しか自動起動させないほうが無難.