OpenLDAP
主にCentOSでの構成について記述。
CentOS 6での導入・基本設定
yumでインストール
# yum install openldap-servers openldap-clients
BDBの設定ファイル作成
ここではOpenLDAPと一緒に導入された設定例をコピー
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG # chown ldap:ldap /var/lib/ldap/DB_CONFIG
slapd起動
# service slapd start
RootDNのパスワード作成
# slappasswd
cn=configのパスワード設定
LDIFファイルは適当な場所・ファイル名で作成
# vi rootdnpw.ldif
rootdnpw.ldif
dn: olcDatabase={0}config,cn=config changetype: modify replace: olcRootPW olcRootPW: {SSHA}********
# ldapadd -Y EXTERNAL -H ldapi:/// -f rootdnpw.ldif
データベースのRootDN, Suffix, ACLの設定
LDIFファイルは適当な場所・ファイル名で作成
# vi init.ldif
init.ldif
# replace to your own domain name for "dc=example,dc=jp" section # specify the password generated above for "olcRootPW" section 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=example,dc=jp" read by * none dn: olcDatabase={2}bdb,cn=config changetype: modify replace: olcSuffix olcSuffix: dc=example,dc=jp dn: olcDatabase={2}bdb,cn=config changetype: modify replace: olcRootDN olcRootDN: cn=Manager,dc=example,dc=jp dn: olcDatabase={2}bdb,cn=config changetype: modify add: olcRootPW olcRootPW: {SSHA}******** dn: olcDatabase={2}bdb,cn=config changetype: modify add: olcAccess olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=Manager,dc=example,dc=jp" write by anonymous auth by self write by * none olcAccess: {1}to dn.base="" by * read olcAccess: {2}to * by dn="cn=Manager,dc=example,dc=jp" write by * read
# ldapmodify -Y EXTERNAL -H ldapi:/// -f init.ldif
CentOS 6でのその他の設定
Sambaスキーマファイルの組み込み
OpenLDAPでNTハッシュを扱うために利用するスキーマ
# ldapadd -Y EXTERNAL -H ldapi:/// -f samba.schema.ldif
samba.schema.ldifはsamba.schemaをLDIFに変換したもの。 変換方法については後述。
モジュールの組み込み
例ではsmbk5pwdを組み込んでいる。
# vi modules.ldif
modules.ldif
dn: cn=Module,cn=config objectClass: olcModuleList objectClass: olcConfig objectClass: top cn: Module olcModulePath: /usr/lib64/openldap olcModuleLoad: {0}smbk5pwd.la
# ldapadd -Y EXTERNAL -H ldapi:/// -f modules.ldif
NTハッシュ等の同期用のオーバレイ設定
smbk5pwdを利用することで、UserPasswordの更新時にsambaNTpassword等も併せて更新できる。 パスワードを同期するためにはEXOP(ldap EXtended OPeration, RFC3062)を利用する必要がある。 ldappasswdコマンドの他、Linuxのpasswdコマンドもpam_ldapの設定を適切に行うことでEXOPが利用される。
# vi smbk5pwd.ldif
#smbk5pwd for primary db dn: olcOverlay=smbk5pwd,olcDatabase={2}bdb,cn=config changetype: add objectClass: olcOverlayConfig objectClass: olcSmbK5PwdConfig olcOverlay: smbk5pwd olcSmbK5PwdEnable: samba
# ldapadd -Y EXTERNAL -H ldapi:/// -f smbk5pwd.ldif
スキーマファイルのLDIFファイルへの変換
cn=config形式でスキーマを追加する場合、スキーマのLDIFファイルを用意する必要がある。 slaptestコマンドを利用してスキーマファイルをLDIFファイルに変換する。
ダミーの設定ファイルを作成
例ではsamba.schemaが目的のスキーマファイル。 その他はデフォルトで読み込まれているスキーマ。
# vi dummy.conf
dummy.conf
include /path/to/makesambaldif/corba.schema include /path/to/core.schema include /path/to/cosine.schema include /path/to/duaconf.schema include /path/to/dyngroup.schema include /path/to/inetorgperson.schema include /path/to/java.schema include /path/to/misc.schema include /path/to/nis.schema include /path/to/openldap.schema include /path/to/ppolicy.schema include /path/to/collective.schema include /path/to/samba.schema
LDIFファイルが書き出されるディレクトリの作成
# mkdir dummydir
slaptestコマンドの実行
# slaptest -f dummy.conf -F dummydir
この例ではdummydir/cn=config/cn=schema/cn={12}samba.ldifにスキーマのLDIFファイルが書き出される。
LDIFファイルの編集
書き出されたLDIFファイルはダミーの設定ファイルの環境固有のID等も併せて記述されているので、他の環境で読み込むためにはこれを編集する必要がある。
# vi dummydir/cn=config/cn=schema/cn={12}samba.ldif
打消し線部分は削除し、下線部分を追記する。 cn={12}samba.ldif(抜粋)
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify. # CRC32 4f939ecfdn: cn={12}sambadn: cn=samba,cn=schema,cn=config objectClass: olcSchemaConfigcn: {12}sambacn: samba olcAttributeTypes: {0}( 1.3.6.1.4.1.7165.2.1.24 NAME 'sambaLMPassword' DESC 'L anManager Password' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.1 21.1.26{32} SINGLE-VALUE ) (中略) olcObjectClasses: {11}( 1.3.6.1.4.1.7165.2.2.16 NAME 'sambaTrustedDomain' DESC 'Samba Trusted Domain Object' SUP top STRUCTURAL MUST cn MAY ( sambaTrustTyp e $ sambaTrustAttributes $ sambaTrustDirection $ sambaTrustPartner $ sambaFla tName $ sambaTrustAuthOutgoing $ sambaTrustAuthIncoming $ sambaSecurityIdenti fier $ sambaTrustForestTrustInfo ) )structuralObjectClass: olcSchemaConfig entryUUID: 222e2e9c-7e64-1034-89dd-03986441f44c creatorsName: cn=config createTimestamp: 20150424002519Z entryCSN: 20150424002519.914319Z#000000#000#000000 modifiersName: cn=config modifyTimestamp: 20150424002519Z</nowiki>