タグ別アーカイブ: OpenLDAP

Mac OS X 10.7.5でOpenLDAPを使って認証させたかった

0. 始めに

Mac OS X 10.7.5でOpenLDAPを使って認証させたかった。
うちのLANはUNIX系システムの認証にLDAPを利用している。全部で20〜30ホストぐらいあるのだけれど認証を一元化できるので非常に便利で助かっている。

ところでMacBookをもっているのだけれど、この認証もLDAPに参加できないかと思ってみた。画面共有だとかローカルユーザだとか、UIDを一致させたかった。ノートパソコンなので持ち出すことがある。なのでLDAPのスレーブにしてしまって親元サーバから認証情報をもらい、ローカルホストで認証を掛けようと思ってみた。
そこでまずはMac OS XなホストをLDAPクライアントにしてみた。これが意外にも大変だった。

続きを読む Mac OS X 10.7.5でOpenLDAPを使って認証させたかった

FreeBSDのホストをLDAPのクライアントにする方法

1. LDAP最強?

最近、ホストをどんどんとLDAP管理下へ移行している。LDAPはその守備範囲が広く、いろいろなことができるようなのだけれど、主に自分のところではユーザ管理を行わせている。

ユーザ管理とは、UNIXユーザの管理をLDAPで行い、認証をかけることだ。

具体的には*nixなホストでログインするためのユーザ情報をLDAP上に置き、認証をかけたいホストはLDAPサーバへ認証の可否を聞きに行く。LDAPサーバで認証が終わったとき、ログイン出来るかどうかをホストで決める、という事だ。

現在管理しているホストは仮想マシンを合わせて数十台。実際UNIXユーザだけであれば現行利用しているNISで十分だ。でもNISだとちょっと不満があったりしてて・・・。

その不満はこうだ

  • samba, mail, ftpなどNISで認証が通らないサービスがある。
  • *nix用のNISなんだけれど、LinuxだとFreeBSDのNISが(そのままでは)利用できない。
  • FreeNASが(現行バージョンでは)対応していない。

と言った点だ。というわけで勉強も兼ねてLDAPを導入している。

続きを読む FreeBSDのホストをLDAPのクライアントにする方法

Confidentiality required

1. LDAPを利用していたらこんなエラーが

LDAPを利用しているホストから、ldapsearchが利用できないエラーが発生した。具体的にはメールサーバでユーザの認証が通らなくなっていた。

試しに手動でldapsearchしてみたら確かに通らない。


clientshell> ldapsearch -x -b "dc=example,dc=com" -H <a href="ldap://192.168.1.1/">ldap://192.168.1.1/</a>
# extended LDIF
#
# LDAPv3
# base  with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# search result
search: 2
result: 13 Confidentiality required
text: confidentiality required

# numResponses: 1

2. SSLを利用するように

実はldapサーバでsslを利用するように変更作業を加えていたので、おそらくはコレが原因と思われた。

でもしかし、サーバ側ではsslが無くても待ち受けが出来るような設定をしていた


servershell> ps auxww | grep slapd
ldap   84881  0.0  1.4 455936 14420  ??  Ss    5:56PM   0:00.08 /usr/local/libexec/slapd -u ldap -h ldap://0.0.0.0/ ldaps://0.0.0.0/ -u ldap -g ldap
servershell> sockstat | grep ldap
ldap     slapd      84881 6  tcp4   *:389                 *:*
ldap     slapd      84881 7  tcp4   *:636                 *:*

上記の通り、ldap、ldapsともに待ち受けをしている。でも繋がらない。ちなみにローカルホストではちゃんとldapsearchできる。

サーバ側のエラーログは下記の通り。


Nov  4 18:03:03 cvm3 slapd[84881]: conn=1020 op=0 BIND dn="" method=128
Nov  4 18:03:03 cvm3 slapd[84881]: conn=1020 op=0 RESULT tag=97 err=0 text=
Nov  4 18:03:03 cvm3 slapd[84881]: conn=1020 op=1 SRCH base="dc=example,dc=com" scope=2 deref=0 filter="(objectClass=*)"
Nov  4 18:03:03 cvm3 slapd[84881]: conn=1020 op=1 SEARCH RESULT tag=101 err=13 nentries=0 text=confidentiality required
Nov  4 18:03:03 cvm3 slapd[84881]: conn=1020 op=2 UNBIND
Nov  4 18:03:03 cvm3 slapd[84881]: conn=1020 fd=15 closed

エラー番号13番、confidentiality requiredらしい。

ググってみるとそれらしき解答が。

Normally the error message in your subject is as a result of the server
requiring encryption of some kind. For example, you might have set:

security tls=1

Re: Confidentiality required question

どうやらサーバ側でsecurityの項目を設定するとダメらしい。

この項目を設定しなければSSLを利用できないかと思ったんだけど、どうやらそういうわけでもないらしい。

この項目を設定すると、セキュリティ保護がある接続のみを受け付けるらしい。なので今回の場合は待ち受けをしていたけれど応答できなかったみたい。なんかそれだったらそもそも待ち受けを許可するなよ、とか、矛盾してる気がするけど、ローカルホストとかだとイケるよ的な?

servershell> grep security /usr/local/etc/slapd.conf
# security ssf=128
servershell> /usr/local/etc/rc.d/slapd restart

これでクライアントでも利用できるようになった。

FreeBSDでportsからパッケージをインストールする時にコマンドラインから引数を与える

FreeBSDでportsからパッケージをインストールする時にコマンドラインから引数を与える方法。

openldapのパッケージをインストール中に、依存するパッケージが既にインストールされていたことで衝突を起こしてエラーになってしまった。

エラーメッセージは以下のとおり。

shell> portinstall -c /usr/ports/net/openldap24-server
(中略)
--->  Installing the new version via the port
===>  Installing for openldap-sasl-client-2.4.26
===>   openldap-sasl-client-2.4.26 depends on shared library: sasl2.2 - found
===>   Generating temporary packing list
===>  Checking if net/openldap24-sasl-client already installed
===>   openldap-sasl-client-2.4.26 is already installed
      You may wish to ``make deinstall'' and install this port again
      by ``make reinstall'' to upgrade it properly.
      If you really wish to overwrite the old port of net/openldap24-sasl-client
      without deleting it first, set the variable "FORCE_PKG_REGISTER"
      in your environment or the "make install" command line.
*** Error code 1

Stop in /usr/ports/net/openldap24-sasl-client.
*** Error code 1

Stop in /usr/ports/net/openldap24-sasl-client.
*** Error code 1

Stop in /usr/ports/net/openldap24-sasl-client.
** Command failed [exit code 1]: /usr/bin/script -qa /tmp/portinstall20111012-61
602-1i6gyio-0 env make reinstall
** Fix the installation problem and try again.
** Listing the failed packages (-:ignored / *:skipped / !:failed)
        ! net/openldap24-sasl-client    (install error)

openldap-sasl-clientがすでにインストールされてるよ、ってことらしい。
アドバイスによればmake deinstallしてやればうまくいくよ、ってことが書いてある。
また同時にFORCE_PKG_REGISTERを設定すれば強制的にインストールしてくれるらしい。
この値はmake時に渡される環境変数で、シェルに環境変数をセットしてもいい。またpkgtools.confに記述して対象となるパッケージのmake時のオプションとして追加してもいい。

今回はこの一回だけをこの”FORCE_PKG_REGISTER”を与えてインストールしたかったので、portinstallにオプションを与えるやり方を行った。


shell> portinstall -c -m "FORCE_PKG_REGISTER=yes" net/openldap24-server

このやりかただと、おそらく依存でインストールされるすべてのパッケージに”FORCE_PKG_REGISTER”が追加されるのでちょっとだけ注意が必要かも。
また、値の与え方について、こういった変数の場合は定義するだけでよかったりするんだけれど、今回はこの変数に対してyesを設定する必要があった。

Ubuntu server 10.04LTSでLDAPサーバ構築(2)

続き。PAM関連の設定。とりあえずLDAPでログイン出来るようにしてみる。

必要なパッケージのインストール
sudo apt-get install libnss-ldap
途中、対話式に設定をする画面になるので、設定する。
必要なら完了後、sudo dpkg-reconfigure ldap-auth-configで再度設定できる。
LDAPログインを有効にする
sudo auth-client-config -t nss -p lac_ldap
/etc/pam.d/common-passwordの編集
26行目
password [success=1 user_unknown=ignore default=die] pam_ldap.so authtok try_first_pass
の、authtokを消去。
ユーザは存在するがホームディレクトリが存在しない場合に、自動でホームディレクトリを作成するようにする。
/etc/pam.d/にあるcommon-sessionとcommon-session-noninteractiveに追記
session required pam_mkhomedir.so skel=/etc/skel umask=0022
PAMのアップデート
sudo pam-auth-update

これで、frontend.ldifに記述したテストユーザでログイン出来た。

Ubuntu server 10.04LTSでLDAPサーバ構築(1)

LDAP的な物をインストール
sudo aptitude install slapd
sudo aptitude install 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.ldifを作成
exampleとかcomとかの部分は環境に合わせて。
参考までに書き換えた行には印付けておく。

# 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 # 書き換え

作成したbackend.ldifをロード
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f backend.ldif
frontend.ldifを作成
backendと同じく書き換えた部分には印を付けておく。
# 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 # 書き換え(peopleをusersにしてみた)
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: [email protected]
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

作成したfrontend.ldifをロード
sudo ldapadd -x -D cn=admin,dc=example,dc=com -W -f frontend.ldif
ユーザが追加されたか確認
ldapsearch -xLLL -b “dc=example,dc=com” uid=john sn givenName cn

ここまでの手順は丸々
https://help.ubuntu.com/10.04/serverguide/C/openldap-server.htmlを参考にした。