ICON of RYUUO.COM TradeMark

ldap

会員登録(SSL)
会員専用(SSL)


更新日: ??????
ここでは、ldapを利用して、localに登録されていないuserのログイン方法を試みた時の記録を載せてある。ここの内容が実践においてすべて役に立つものとは思わない。
また、誤り・漏れがないように注意しているが、そろそろボケ始めの兆候が現れているので自身はない。また、最後の方にldapに取りかかるための注意事項なども記しておいた。

OS:Fedora6.....update済み
fire wall: disable
seLinux: disable

かつ、 # /etc/hosts.allow
sshd: 127.0.0.1 192.168.1.
slapd: 127.0.0.1 192.168.1.



ldap-serverの構築

$ rpm -qa | grep ldap
openldap-servers-2.3.30-3.fc6
openldap-2.3.30-3.fc6
openldap-clients-2.3.30-3.fc6
nss_ldap-257-4.fc6
openldap-servers-sql-2.3.30-3.fc6
openldap-devel-2.3.30-3.fc6

$ rpm -qa | grep sasl
cyrus-sasl-md5-2.1.22-4
cyrus-sasl-gssapi-2.1.22-4
cyrus-sasl-plain-2.1.22-4
cyrus-sasl-lib-2.1.22-4
cyrus-sasl-2.1.22-4
cyrus-sasl-devel-2.1.22-4
以上がInstallされていたが、SSH関係も必要なのでその部分の詳しいことは省略した。ただ、認証に関してはやはり色々なソフトが絡み合ってくるので、 どの部分の設定が間違っているのか判断もなかなか難しく今まででのサーバの設定で一番難しく思えた。

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
include		/etc/openldap/schema/misc.schema

# Allow LDAPv2 client connections.  This is NOT the default.
allow bind_v2

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

# The next three lines allow use of TLS for encrypting connections using a
# dummy test certificate which you can generate by changing to
# /etc/pki/tls/certs, running "make slapd.pem", and fixing permissions on
# slapd.pem so that the ldap user or group can read it.  Your client software
# may balk at self-signed certificates, however.
#TLSCACertificateFile /etc/pki/tls/certs/ca-bundle.crt
#TLSCertificateFile /etc/pki/tls/certs/slapd.pem
#TLSCertificateKeyFile /etc/pki/tls/certs/slapd.pem

Adminはldapaddにて後に加える
access to attrs=userPassword
	by anonymous auth
	by dn="cn=Admin,dc=ryuuo,dc=com" read
	by * none

access to *
	by self read
	by dn="cn=Admin,dc=ryuuo,dc=com" read
	by * none

#######################################################################
# ldbm and/or bdb database definitions
#######################################################################

$ su -
Password:
# slappasswd
New password:
Re-enter new password:
{SSHA}UlvrDm454zXRLIjMt4NXwLp50k/aYcyS
#

database	bdb
suffix		dc=ryuuo,dc=com
rootdn		"cn=Manager,dc=ryuuo,dc=com"
rootpw		{SSHA}UlvrDm454zXRLIjMt4NXwLp50k/aYcyS

directory	/var/lib/ldap

index objectClass                       eq,pres
index ou,cn,mail,surname,givenname      eq,pres,sub
index uidNumber,gidNumber,loginShell    eq,pres
index uid,memberUid                     eq,pres,sub
index nisMapName,nisMapEntry            eq,pres,sub



ldif形式のfileを作成

$ emacs init.ldif

dn: dc=ryuuo,dc=com
objectClass: dcObject
objectClass: organization
o: myzrfget
dc: ryuuo

dn: cn=Manager,dc=ryuuo,dc=com
objectClass: organizationalRole
cn:Manager

dn: ou=People,dc=ryuuo,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=ryuuo,dc=com
objectClass: organizationalUnit
ou: Group
$ ldapadd -x -D "cn=Manager,dc=ryuuo,dc=com" -w (PasswdOfManager) -f init.ldif




$ emacs group.ldif

dn: cn=Account,ou=Group,dc=ryuuo,dc=com
objectClass: posixGroup
objectClass: top
cn: Account
gidNumber: 1110

dn: cn=Personal,ou=Group,dc=ryuuo,dc=com
objectClass: posixGroup
objectClass: top
cn: Personal
gidNumber: 1120
$ ldapadd -x -D "cn=Manager,dc=ryuuo,dc=com" -w (PasswdOfManager) -f group.ldif




$ emacs user.ldif

dn: uid=tanaka,ou=People,dc=ryuuo,dc=com
uid: tanaka
cn: tanaka
objectClass: posixAccount
objectClass: posixGroup
objectClass: top
userPassword: {crypt}6vazg6EfgckUQ
uidNumber: 1000
gidNumber: 2000
homeDirectory: /home/tanaka
$ ldapadd -x -D "cn=Manager,dc=ryuuo,dc=com" -w (PasswdOfManager) -f user.ldif

$ openssl passwd
New password:******
Re-enter new password:******
3BKrnS5rRLgMU
$



$ emacs Admin.ldif

dn: cn=Admin,dc=ryuuo,dc=com
objectClass: person
cn: Admin
sn: Admin
userPassword: {crypt}SkAoga4rf5RUQ
$ ldapadd -x -D "cn=Manager,dc=ryuuo,dc=com" -w (PasswdOfManager) -f Admin.ldif


登録されたかの確認


$ ldapsearch -x -LLL -b "dc=ryuuo,dc=com" -D "cn=Admin,dc=ryuuo,dc=com" \
                       -w (Admin Password) "(uid=tanaka)" userPassword

dn: uid=tanaka,ou=People,dc=ryuuo,dc=com
userPassword:: dGVzdA==

$

以上のように表示されればldap-serverの設定は完璧だ。


ldap-client

/etc/ldap.confの設定


-------- 略 -------
# whether your LDAP client library supports configurable
# network or connect timeouts (see bind_timelimit).
#host 127.0.0.1
host fedora.ryuuo.com
# The distinguished name of the search base.
base dc=ryuuo,dc=com

binddn cn=Admin,dc=ryuuo,dc=com
bindpw tanadesu

# The distinguished name to bind to the server with
# if the effective user ID is root. Password is
# stored in /etc/ldap.secret (mode 600)
# この部分も大切だ。Managerのパスワードをセットしておく
rootbinddn cn==Manager,dc=ryuuo,dc=com

間違っても、
binddn "cn=Admin,dc=ryuuo,dc=com"
とはするな! 無駄な時間を費すから。ただ、slapd.confは問題は生じなかった。

port 389
timelimit 120
bind_timelimit 120
idle_timelimit 3600
pam_lookup_policy yes
pam_password md5

nss_initgroups_ignoreusers root,ldap,named,avahi,haldaemon,dbus,radvd, \
                     tomcat,radiusd,news,mailman,nscd,amavis,clamav,mysql



authconfig, authconfig-gtk, authconfig-tuiで一連の認証方法を変更するが、これらを実行した時に/etc/ldap.confも変更されるので特に、注意だ。
uri fedora.ryuuo.comfedora.ryuuo.comldap://fedora.ryuuo.com/
と、変更された場合にboot時のloginに時間が掛かる。10分近く掛かりちょうど良いコーヒブレイクTimeのようだ。tlsなどの設定を試みるときには特に注意をしたほうが良い。あまりにもコーヒブレイクTimeが多発するようでは問題にもなる。正確には、
uri ldap://fedora.ryuuo.com/
の形のようだ。詳しくは以下で参照してくれ!
$ man 5 ldap.conf | col -bfx > man_ldap.conf
$ man slapd.conf | col -bfx > man_slapd.conf



emacs /etc/nsswitch

-----  一部  -----
#shadow:    db files nisplus nis
#group:     db files nisplus nis

passwd:     files ldap
shadow:     files ldap
group:      files ldap

#hosts:     db files nisplus nis dns
hosts:      files dns

# Example - obey only what nisplus tells us...
#services:   nisplus [NOTFOUND=return] files
-----  一部  -----




system-authの設定

/etc/pam.d/system-auth

# authconfig-gtk
ユーザー情報.....LDAPを有効にするにチェック
認証.............LDAPを有効にするにチェック
オプション.......アクセス以外はすべてにチェック

いろいろと失敗を重ねながら行ったが、一番のクセ者が一連のコマンドauthconfig群だ。このコマンドを実行すると/etc/ldap.conf, /etc/pam.d/system-auth、また、 /etc/openldap/ldap.confもslapd.confの変更とともに.....と変更される。これで何度もcoffee breakを取らされた。鬼門である。
設定変更でbootからloginまで時間の掛かることに出くわすことが、一度はあると思うのでその時は起動に時間のかかるdaemonを覚えておき、設定を変え再起動する前に、そのdaemonのみrestartし様子をみるのが一番だった。



# emacs /etc/pam.d/system-auth ...への追加と変更

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        sufficient    pam_ldap.so use_first_pass
auth        required      pam_deny.so

account     required      pam_unix.so broken_shadow
account     sufficient    pam_localuser.so

#account     sufficient    pam_succeed_if.so uid < 500 quiet
account     sufficient    pam_succeed_if.so gid eq 2000 quiet

account     [default=bad success=ok user_unknown=ignore] pam_ldap.so
account     required      pam_permit.so

password    requisite     pam_cracklib.so retry=3
password    sufficient    pam_unix.so md5 shadow nullok try_first_pass use_authtok
password    sufficient    pam_ldap.so use_authtok
password    required      pam_deny.so

session     required	  pam_mkhomedir.so skel=/etc/skel/ umask=0022
session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_ldap.so


optionは man 8 optionで確認すれ!

例...)
man 8 pam_succeed_if

sshでの利用

# /etc/ssh/sshd_config の変更

   -------------------
PasswordAuthentication yes

   -------------------
ChallengeResponseAuthentication no

#UsePAM no
UsePAM yes



# /etc/init.d/sshd restart
# /etc/init.d/ldap restart

# chkconfig --list ldap
ldap            0:off   1:off   2:off   3:off   4:off   5:off    6:off
# chkconfig --level 345 ldap on
# chkconfig --list ldap
ldap            0:off   1:off   2:off   3:on    4:on    5:on    6:off
#



$ ssh -l tanaka fedora.ryuuo.com
tanaka@fedora.ryuuo.com's password: 
Last login: Sun Oct 14 20:30:02 2007 from fedora.ryuuo.com
-sh-3.1$ exit


/etc/pam.d/system-authを以下のように変更
account     sufficient    pam_succeed_if.so gid eq 1000 quiet

$ ssh -l tanaka fedora.ryuuo.com
tanaka@fedora.ryuuo.com's password: 
Connection closed by 192.168.1.77
$ 



上手くいかない時は、/var/log/secureを確認!
漏れは無いとは思うが、はっきりとした自身は無い。LOGIN出来ない方はご連絡でも。

いろいろな設定ファイルを変更しなければならず大変だったが、このままでpacket通信をながめると、PassWordが丸見えだった。tlsなりsslなりが必要なようだ。

また、tlsなどに挑戦する方は、以下のリンクで簡易CA(認証局)の設定方法を詳しく説明されている。そちらを参考にされては如何だろうか。

http://info.t.kyoto-u.ac.jp/wiki/?Service/LDAP0.5/110000





雑談


色々なサーバの設定を行ってきたが、認証が一番複雑に感じられた。いろいろな設定ファイルが関わってきていて、どこに問題があるのか明確にできないところがあった。今、振り返ると随分とbootしてからloginまでに時間が掛かりCoffeBreakを強いられたことを思い出す。10-20分程度である。一例として、認証にldapを使用しながらブート時にldapが起動しないように設定したこと、違うことに気を取られていた時であった。なかには、30分以上掛かり諦めRescueModeで設定ファイルを変更したことも二度ほどあった。挑戦するにあたって心得のようなものを記しておく。

1) 常日頃からバックアップは取っておけ
2) GUIばかりに頼っていると、イザという時には自身の頭が超ウルトラpanicになるぞ。永い間、Linuxとお付き合いしている方は一度は経験したことがあるとは思うが、boot時に
kernel panic
の表示が出たときには、kernelさんはPanicかもしれないがコンピューターを操作している人間の頭はそれどころではない、超ウルトラpanicの状態になる。
authconfig コマンドの最小限の設定方法など覚えておいたほうが良さそうだ。