文書の過去の版を表示しています。
目次
OpenLDAP Server
認証を LDAP で行うために、 OpenLDAP をインストールする。
インストール
apt-get でインストールする。
$ sudo apt-get install slapd ldap-utils
- slapd : デーモン
- ldap-utils : 管理ユーティリティ
設定
認証に必要なスキーマを追加する。
$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif $ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/nis.ldif $ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif
以下を backend.example.com.ldif というファイル名で任意の場所に作成。
- backend.example.com.ldif
# Load dynamic backend modules dn: cn=module,cn=config objectClass: olcModuleList cn: module olcModulepath: /usr/lib/ldap olcModuleload: back_hdb # Database settings dn: olcDatabase=hdb,cn=config objectClass: olcDatabaseConfig objectClass: olcHdbConfig olcDatabase: {1}hdb olcSuffix: dc=example,dc=com olcDbDirectory: /var/lib/ldap olcRootDN: cn=admin,dc=example,dc=com olcRootPW: secret olcDbConfig: set_cachesize 0 2097152 0 olcDbConfig: set_lk_max_objects 1500 olcDbConfig: set_lk_max_locks 1500 olcDbConfig: set_lk_max_lockers 1500 olcDbIndex: objectClass eq olcLastMod: TRUE olcDbCheckpoint: 512 30 olcAccess: to attrs=userPassword by dn="cn=admin,dc=example,dc=com" write by anonymous auth by self write by * none olcAccess: to attrs=shadowLastChange by self write by * read olcAccess: to dn.base="" by * read olcAccess: to * by dn="cn=admin,dc=example,dc=com" write by * read
- “olcRootPW: secret” は任意のパスワードに変更する。
- “dc=example,dc=com” 部分は環境に合わせて変更する。
LDIFをディレクトリに追加する。
$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f backend.example.com.ldif
以下を frontend.example.com.ldif というファイル名で任意の場所に作成。
- frontend.example.com.ldif
# Create top-level object in domain dn: dc=example,dc=com objectClass: top objectClass: dcObject objectclass: organization o: Example Organization dc: Example description: LDAP Example # Admin user. dn: cn=admin,dc=example,dc=com objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator userPassword: secret dn: ou=people,dc=example,dc=com objectClass: organizationalUnit ou: people dn: ou=groups,dc=example,dc=com objectClass: organizationalUnit ou: groups dn: uid=john,ou=people,dc=example,dc=com objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount uid: john sn: Doe givenName: John cn: John Doe displayName: John Doe uidNumber: 1000 gidNumber: 10000 userPassword: password gecos: John Doe loginShell: /bin/bash homeDirectory: /home/john shadowExpire: -1 shadowFlag: 0 shadowWarning: 7 shadowMin: 8 shadowMax: 999999 shadowLastChange: 10877 mail: john.doe@example.com postalCode: 31000 l: Toulouse o: Example mobile: +33 (0)6 xx xx xx xx homePhone: +33 (0)5 xx xx xx xx title: System Administrator postalAddress: initials: JD dn: cn=example,ou=groups,dc=example,dc=com objectClass: posixGroup cn: example gidNumber: 10000
- “dc=example,dc=com” 部分は環境に合わせて変更する。
- “dc: Example” は “dc=example,dc=com” に依存する。“dc=home,dc=example,dc=com” であれば Home。
エントリを LDAP のディレクトリに追加する。
$ sudo ldapadd -x -D cn=admin,dc=example,dc=com -W -f frontend.example.com.ldif
- “dc=example,dc=com” 部分は環境に合わせて変更する。
正常に登録されているかをチェック。
$ ldapsearch -xLLL -b "dc=example,dc=com" uid=john sn givenName cn dn: uid=john,ou=people,dc=example,dc=com cn: John Doe sn: Doe givenName: John
- -x: SASL の認証メソッドを使用しない (デフォルト)
- -LLL: LDIFスキーマ情報を表示しない
TLS SSL の設定
暗号回線を使用できるように追加の設定を行う。
必要なライブラリをインストール。
$ sudo apt-get install gnutls-bin
自己署名サーバ証明書の作成で作成した、
- CAの証明書
- サーバの証明書
- サーバの秘密鍵
のパスを OpenLDAP に登録して暗号回線を使用できるようにする。
sudo ldapmodify -Y EXTERNAL -H ldapi:///
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0
設定項目を入力する。
dn: cn=config add: olcTLSCACertificateFile olcTLSCACertificateFile: /etc/ssl/certs/cacert.pem - add: olcTLSCertificateFile olcTLSCertificateFile: /etc/ssl/certs/server_cert.pem - add: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/ssl/private/server_key.pem
入力が終わったら Ctrl + D か、エンターを2回。
modifying entry "cn=config"
次に、 slapd の設定を変更して SSL を利用可能にする。
$ sudo vi /etc/default/slapd
SLAPD_SERVICES に ldaps:/// を追加。
SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///"
openldap ユーザを ssl-cert グループに追加して、証明書と鍵を読み込めるようにする。
$ sudo adduser openldap ssl-cert
Adding user `openldap' to group `ssl-cert' ... Adding user openldap to group ssl-cert Done.
slapd を再起動。
$ sudo /etc/init.d/slapd restart
Stopping OpenLDAP: slapd. Starting OpenLDAP: slapd.
で完了。
LDAP 操作用ソフト
コマンドでユーザの追加や管理とかめんど過ぎるので、クライアントソフトを使う。
Apache Directory Studio これが良い感じ。
phpLDAPadmin をインストール
ユーザが自分のパスワードをブラウザで変更可能にするために、 phpLDAPadmin をインストールする。
apt-get でインストール。
$ sudo apt-get install phpldapadmin
インストールが終わると、 /etc/apache2/conf.d/phpldapadmin が作成され、http://<HOSTNAME>/phpldapadmin でとりあえずアクセスできるようになる。
ブラウザでアクセスされるファイルは、 /usr/share/phpldapadmin/ に格納されている。
設定ファイルを変更する。
$ sudo vi /etc/phpldapadmin/config.php
DB操作コマンド
olcRootPW を変更
この、 dn: olcDatabase={1}hdb,cn=config に設定されているパスワードは何に使うのかよくわからないけど、とりあえずハッシュ化した解読困難なものに変更しておく。
パスワードをハッシュする
本当は Salted SHA2 とか使いたいんだけど、 OpenLDAP では使えないようなので Salted SHA を使用する。
$ slappasswd -h {SSHA}
パスワードを2回入力。
$ slappasswd -h {SSHA} New password: Re-enter new password: {SSHA}3l29mzESsaUCUtEMERjBqPrO+u5WXIfQ
最後の行の {SSHA}… をパスワードとして設定する。
ハッシュしたパスワードを設定する
$ sudo ldapmodify -Y EXTERNAL -H ldapi:///
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0
コマンドを入力できる状態になるので以下を入力
dn: olcDatabase={1}hdb,cn=config changetype: modify replace: olcRootPW olcRootPW: {SSHA}3l29mzESsaUCUtEMERjBqPrO+u5WXIfQ
入力したら Ctrl + D で完了する。
modifying entry "olcDatabase={1}hdb,cn=config"
完了。
アクセス権の閲覧
フロントエンドのアクセス権を閲覧。
$ sudo ldapsearch -c -Y EXTERNAL -H ldapi:/// -LLL -b cn=config olcDatabase={1}hdb olcAccess
バックエンド?のアクセス権を閲覧
$ sudo ldapsearch -c -Y EXTERNAL -H ldapi:/// -LLL -b cn=config olcDatabase=config olcAccess
アクセス権の変更
現状の設定だと、 anonymous で閲覧は可能になっているので、以下のように変更する。
- cn=admin, は全てに書き込み許可
- anonymous で認証はできる
- 認証後は一般ユーザは自分の項目のみ閲覧可能
- ただし自分のパスワードは変更可能
参考
-
- Setting up ACL の節がうまくいかない
- Ubuntu 10.10 のマニュアルを参考にした