カテゴリー別アーカイブ: LDAP

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を使って認証させたかった

Proftpdでpam越しにldapの認証を使った

Proftpdでpam越しにldapの認証を使いたかった。

実はコレまでのproftpdの認証は、最も標準的である /etc/passwd あたりのファイルを見て認証をかけてた。だからproftpdはnisやldapと連携してなかった。

現にこれまではnisをunixのsystemの認証としていたのだけれど、それをproftpdでは使わず、nisのアカウントとunixのアカウントを手動で同期を取るというなんとも前時代的な運用をしていた。

現在管轄しているセグメントもほとんどのホストでldapに移行が完了しており、nisベースはほとんどなくなってきていたのでそろそろこのproftpdの認証回りもldapを使うようにしてあげないと、と思っていた。

一応profptdにはmod_ldapという自前でldap認証を行うモジュールがあるのだけれど、そこでいちいちフィルタやらdcやらを書いてやるのも面倒だなぁと思っていたし、ユーザごとにそこまで細やかに制限を入れる予定もなかった。制限といえばせいぜいrootでのログインを拒否するだとかそういったところだったので、その辺はproftpdの標準confでできるわけだった。

で、既にproftpdを動かすホストではpamでldapを使って認証してたので、このunixアカウント認証をそのままftpの認証系にしてしまうことにした。confはテキトウにググったら出てきた。


# pam
AuthOrder           mod_auth_pam.c* mod_auth_unix.c
AuthPAMConfig      system

上記の部分をconfに加えて再起動したらいけました。

最初はちょっと動かなかったりしたのでその点についてのメモ。
/etc/pam.dの中身にも依るのだけれど、pamには設定名っていうのがある。pam.dにあるファイルベースで設定名が決められている。proftpdでは標準でftpという設定名を使うのでpamのftpにldap使いますよと書いてないと有効にならない。ここで少しハマってしまった。

この辺のことは実は公式にちゃんと載ってて、ググってコピペで動かな~い、と困ってしまったことを反省。

 

以上

LDAPを利用したFreeBSDでMySQLが起動しない

LDAPを利用したFreeBSDでMySQLが起動しない。


shell> /usr/local/etc/rc.d/mysql-server start
Starting mysql.
UID must be greater than 1000
su: Sorry

エラーメッセージの通り、ldapに登録されているmysqlユーザがuidNumberが88で1000以下になっている。なのでうまくうごかないみたい。


shell> more /usr/local/etc/ldap.conf


pam_min_uid 1000

となっていたので pam_min_uid をコメントアウト。うまくいった。

apache httpdでldapを用いてbasic認証を行うときにユーザとかを制限する

apacheで.htaccessを用いてbasic認証を行うとき、認証可能なユーザを選べるようにしてみた。

AuthzLDAPAuthoritative off
AuthName "ldap ninshou dayoyo"
AuthType Basic
AuthBasicProvider ldap
AuthLDAPURL ldaps://192.168.1.1/ou=People,dc=l2tp,dc=org?uid
Require ldap-user user1 user2
#Require ldap-filter !(cn=except_user)

この設定を行う上で、 ldap-filterを選択した場合、フィルターをクォートしてしまうとうまくうごかなかった。

http://httpd.apache.org/docs/2.2/mod/mod_authnz_ldap.html#requiredirectives

ApacheのBasic認証にLDAPを利用する

apacheのBasic認証にLDAPを利用しようとしてみた。

サーバはOpenLdap24 on FreeBSD, クライアントはApache22 on CentOS6.2。

今回の方法はBasic認証でアクセス制御をしたい箇所に.htaccessを設置してみた。


shell> more .htaccess

AuthzLDAPAuthoritative off
AuthName "ldap ninshou dayoyo"
AuthType Basic
AuthBasicProvider ldap
#LDAPVerifyServerCert off
AuthLDAPURL ldaps://192.168.1.1/ou=People,dc=example,dc=com?uid
Require valid-user

コレだとうまくいかない。500のInernal Server Errorが帰ってしまう。ユーザ名とパスワードの組み合わせがうまくいかないのかと思いきや、他の手段で認証を試すとうまく通ってる。

apacheのerror_logをdebugレベルまで引き上げてログを見てみた。


shell> more httd-vhosts.conf

…前略…

# ldaptest
<VirtualHost *:80>
ServerAdmin hogetan<a href="mailto:hogetan@l2tp.org">@l2tp.org</a>
DocumentRoot /home/hogetan/public_ldap
ServerName ldap.l2tp.org
LogLevel debug
ErrorLog /var/log/httpd/ldap.l2tp.org-error.log
CustomLog /var/log/httpd/ldap.l2tp.org-access.log combined
</VirtualHost>

…後略…

shell> tail /var/log/httpd/ldap.l2tp.org-error.log

[Tue Feb 28 09:43:23 2012] [debug] mod_authnz_ldap.c(393): [client 192.168.1.5] [29473] auth_ldap authenticate: using URL <a href="ldaps://192.168.1.1/ou=People,dc=hoge,dc=info?uid">ldaps://192.168.1.1/ou=People,dc=hoge,dc=info?uid</a>
[Tue Feb 28 09:43:23 2012] [info] [client 192.168.1.5] [29473] auth_ldap authenticate: user yubird authentication failed; URI /favicon.ico [LDAP: ldap_simple_bind_s() failed][Can't contact LDAP server]
[Tue Feb 28 09:43:23 2012] [debug] mod_authnz_ldap.c(1105): [29467] auth_ldap url parse: `ldaps://192.168.1.1/ou=People,dc=l2tp,dc=org?uid', Host: 192.168.1.1, Port: 636, DN: ou=People,dc=l2tp,dc=org, attrib: uid, scope: base, filter: (null), connection mode: using SSL

なんかエラー出てる。Can’t contact LDAP serverとか言われてる。

いろいろ悩んで湯バード先生にヘルプを求めた結果、ldapsのsがいけないんじゃ無いか、ってことに。sslの証明書の検証が悪いのではないか、ということだ。今回のldapサーバはオレオレ証明書を利用しており、今までもldap.confなどでことごとく証明書の認証でコケた経験があった。

試しにldapsじゃない、ldapな待ち受けに接続にいくとすんなりつながった。

で、証明書の検証をしないようにするオプションを探して有効にしてみた。

http://httpd.apache.org/docs/2.2/mod/mod_ldap.html#ldapverifyservercert

このオプションで注意しなくてはいけないのは、.htaccessなどには記述できない、ということ。virtualhostディレクティブとかでもダメ、グローバルディレクティブじゃないとダメっぽい。


shell> grep LDAPVerify httpd.conf

LDAPVerifyServerCert Off

この設定を入れたらldapsでもうまくいった。

とにかくldaps+オレオレ証明書の場合には証明書の検証問題に注意しろ、ってことで。めでたしめでたし。

CentOS 6.0をアップデートしたらLDAPで認証が通らなくなった

CentOS 6.0をアップデートしたらLDAPで認証されるユーザが存在しないことになってた。

ただ今回のアップデートはyum updateで一括してアップデートしてしまったのでOpenLDAPのアップデートでそうなったのかOS本体のアップデートでそうなったのかちょっと区別が付かなかった。

CentOSの場合、以下のファイルがLDAP認証に関わってくる

  • /etc/nscl.conf
  • /etc/nsswitch.conf
  • /etc/pam_ldap.conf
  • /etc/openldap/ldap.conf
  • /etc/sysconfig/authconfig
  • /etc/pam.d/*

これらのファイルの内、アップデートによりデフォルトのものに書き換えられたものがある様子。


shell> id hogetan
id: hogetan: No such user

shell> grep LDAP /etc/sysconfig/authconfig
USELDAPAUTH=no  # この行をyesに変更しなければならない。アップデートでnoになってしまった様子。
USELDAP=yes

shell> tail /var/log/messages

Dec 19 11:39:37 clinton nslcd[1861]: [7b23c6] failed to bind to LDAP server <a href="ldaps://192.168.1.1/">ldaps://192.168.1.1/</a>: Can't contact LDAP server: Operation now in progress
Dec 19 11:39:37 clinton nslcd[1861]: [7b23c6] failed to bind to LDAP server <a href="ldaps://192.168.1.1/">ldaps://192.168.1.1/</a>: Can't contact LDAP server: Operation now in progress
Dec 19 11:39:37 clinton nslcd[1861]: [7b23c6] no available LDAP server found
Dec 19 11:39:37 clinton nslcd[1861]: [7b23c6] no available LDAP server found

この段階、authconfigでUSELDAPAUTHをyesにするだけでは通らず。調べるとどうやらred hat系はauthconfig-tuiというツールを利用する、とどこぞで言われてみた。autuconfig-tuiは対話式のコンフィグツールらしい。起動してそのままのオプションで次へ、OKと押していく。でもダメだ。

調べると /etc/nslcd.conf も書き換わっていた。いらない行をコメントアウト。最後にnslcdを再起動してうまく行けた!


shell> more /etc/nslcd.conf
ldap_version 3
TLS_REQCERT never
uri ldaps://192.168.84.67/ ldaps://192.168.84.68/
base dc=l3tp,dc=org
#ssl no   # この行が勝手に追加されてたのでコメントアウト
#tls_cacertdir /etc/openldap/cacerts # この行が勝手に追加されてたのでコメントアウト

shell> service nslcd restart

shell> id hogetan

uid=1001(hogetan) gid=1001(hogetan)

完璧。

LDAPで利用するパスワードの期限が切れた

1. LDAPのクライアントになるホストにsshしたら怒られた

LDAPのクライアントになってユーザ認証を行っているホストにsshでコマンドを流したら怒られた。


shell> ssh host command
WARNING: Your password has expired.
Password change required but no TTY available.

エラーの内容からすると、”あなたのパスワードは期限が切れています。そしてパスワードの変更をしたいけれど、プロンプトがないからできません”となっている。

確かにsshでコマンドを直接流しているのでTTYがない。なのでパスワード変更ができない。他の方法でTTYが存在するログインをしてみた。


shell> login
login: hogetan
Old Password:
New Password:
Retype New Password:

こっちでは正常にパスワードの変更を求められた。さてココで、古いパスワードを入力し新しいパスワードを入力し、パスワードの変更を正常に行った、かに見えたんだけれど、再度ログインすると同様にパスワードの変更を求められる。

コレはおかしいぞ、ということでちょっと調べてみた。

続きを読む LDAPで利用するパスワードの期限が切れた

LDAPで出会ったエラー

下記のようなエラーが出たとき

nss_ldap: could not connect to any LDAP server as (null) - Can't contact LDAP server
nss_ldap: failed to bind to LDAP server ldaps:///192.168.1.1/: Can't contact LDAP server
  1. ldapsとかのldapURL構文でスラッシュが三つあったりしないか
  2. ldap系のconf(libnss-ldap.conf, ldap.confとか)でTLS_REQCERT neverを書く。 (SSLを利用している場合)

	

DebianをLDAPクライアントにする

DebianをLDAPのクライアントにしたかった。

以下の通りやればいけるぽ。

まずパッケージをインストール

  1. /etc/libnss-ldap.confを編集 (nsswitchが利用)
  2. /etc/libnss-ldap.conf を /etc/ldap/ldap.conf に ln -s (ldapsearch が利用するはず)
  3. /etc/libnss-ldap.conf を /etc/pam_ldap.conf に ln -s (pam周りが利用するはず)
  4. /etc/nsswitch.confを編集 (キケンがつきまとうので慎重に)

shell> sudo aptitude install ldap-utils libpam-ldap libnss-ldap nscd

shell> grep "^[^#]" /etc/libnss-ldap.conf
base dc=example,dc=com
uri ldaps://192.168.1.1/ ldaps://192.168.1.2/
ldap_version 3
nss_base_passwd ou=People,dc=example,dc=com
nss_base_shadow ou=People,dc=example,dc=com
nss_base_group ou=Groups,dc=example,dc=com
pam_password ssha
pam_min_uid 1000
TLS_REQCERT never


shell> more /etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

# passwd:         compat
# group:          compat
# shadow:         compat
passwd:         compat ldap
shadow:         compat ldap
group:          compat ldap

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

対話式でパッケージのコンフィグをするとき、再度呼び出すときは以下の通り。


dpkg-reconfigure libnss-ldap

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のクライアントにする方法