ラベル OpenLDAP の投稿を表示しています。 すべての投稿を表示
ラベル OpenLDAP の投稿を表示しています。 すべての投稿を表示

2014年4月27日日曜日

OpenLDAPのログ出力設定


■Linux SSHログイン認証をOpenLDAPで一元管理

LDAPサーバに登録したユーザでのSSHログインおよびパスワード変更をアプリ系サーバで実現するための流れを、下記のパートに分けて記載していきます。



■本編の概要
OpenLDAPサーバはデフォルト設定ではログを出力しません。
slapd.confにログレベルを記述すると、シスログ経由でログを出力します。
ログレベルおよびログの出力先の設定についての手順を記載します。

OS: CentOS 6.5 (64-bit)
openldap: 2.4.23
LDAPサーバホスト名: ty-ldap01
アプリ系サーバホスト名: ty-app01,ty-app02

■標準のログレベルだと出力量が多すぎるので変更
[root@ty-ldap01 ~]# vi /etc/openldap/slapd.conf
[root@ty-ldap01 ~]# grep -A 5  "EVERYTHING" /etc/openldap/slapd.conf
# rootdn can always read and write EVERYTHING!

# LogLevel
loglevel 512

# change own password ---- from ----
[root@ty-ldap01 ~]# change_slapd.sh
config file testing succeeded
slapd を停止中:                                            [  OK  ]
slapd を起動中:                                            [  OK  ]
[root@ty-ldap01 ~]#
※loglevelのデフォルト値は256です。詳細については他のサイトを参照ください。
※change_slapd.shは「OpenLDAPのインストールと起動」 で作成したスクリプトです。

■rsysylogにOpenLDAPのログ出力設定
openldap-servers、openldap-clients、nss-pam-ldapd を追加インストール
[root@ty-ldap01 ~]# echo "local4.*    /var/log/ldap.log" > /etc/rsyslog.d/ldaplog.conf
[root@ty-ldap01 ~]# cat /etc/rsyslog.d/ldaplog.conf
local4.*    /var/log/ldap.log
[root@ty-ldap01 ~]# /etc/init.d/rsyslog restart
システムロガーを停止中:                                    [  OK  ]
システムロガーを起動中:                                    [  OK  ]
[root@ty-ldap01 ~]#

■OpenLDAP登録ユーザでログインしたときのログ
## アプリ系サーバの操作
[root@ty-app01 ~]# su - user1001
-bash-4.1$ su - user1002
パスワード:
-bash-4.1$

## その時のLDAPサーバのログ
[root@ty-ldap01 ~]# tail -f /var/log/ldap.log

Apr 20 03:20:07 ty-ldap01 slapd[2503]: conn=1000 op=1 ENTRY dn="uid=user1001,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:07 ty-ldap01 slapd[2503]: conn=1001 op=1 ENTRY dn="uid=user1001,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:07 ty-ldap01 slapd[2503]: conn=1002 op=1 ENTRY dn="uid=user1001,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:07 ty-ldap01 slapd[2503]: conn=1003 op=1 ENTRY dn="uid=user1001,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:07 ty-ldap01 slapd[2503]: <= bdb_equality_candidates: (uniqueMember) not indexed
Apr 20 03:20:07 ty-ldap01 slapd[2503]: conn=1004 op=1 ENTRY dn="uid=user1001,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:07 ty-ldap01 slapd[2503]: conn=1000 op=2 ENTRY dn="uid=user1001,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:07 ty-ldap01 slapd[2503]: conn=1001 op=2 ENTRY dn="cn=team1000,ou=group,dc=open_ldap,dc=com"
Apr 20 03:20:07 ty-ldap01 slapd[2503]: conn=1002 op=2 ENTRY dn="uid=user1001,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:18 ty-ldap01 slapd[2503]: conn=1003 op=3 ENTRY dn="uid=user1002,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:18 ty-ldap01 slapd[2503]: conn=1004 op=2 ENTRY dn="uid=user1001,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:18 ty-ldap01 slapd[2503]: conn=1001 op=3 ENTRY dn="uid=user1002,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:21 ty-ldap01 slapd[2503]: conn=1002 op=3 ENTRY dn="uid=user1002,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:21 ty-ldap01 slapd[2503]: conn=1005 op=1 ENTRY dn="uid=user1002,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:21 ty-ldap01 slapd[2503]: conn=1003 op=4 ENTRY dn="uid=user1001,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:21 ty-ldap01 slapd[2503]: conn=1004 op=3 ENTRY dn="uid=user1002,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:21 ty-ldap01 slapd[2503]: conn=1000 op=5 ENTRY dn="uid=user1002,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:21 ty-ldap01 slapd[2503]: conn=1001 op=4 ENTRY dn="uid=user1002,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:21 ty-ldap01 slapd[2503]: conn=1002 op=4 ENTRY dn="uid=user1002,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:21 ty-ldap01 slapd[2503]: conn=1003 op=5 ENTRY dn="uid=user1001,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:21 ty-ldap01 slapd[2503]: conn=1004 op=4 ENTRY dn="uid=user1002,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:21 ty-ldap01 slapd[2503]: <= bdb_equality_candidates: (uniqueMember) not indexed
Apr 20 03:20:21 ty-ldap01 slapd[2503]: conn=1000 op=6 ENTRY dn="uid=user1002,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:21 ty-ldap01 slapd[2503]: conn=1001 op=5 ENTRY dn="uid=user1002,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:21 ty-ldap01 slapd[2503]: conn=1002 op=5 ENTRY dn="cn=team1000,ou=group,dc=open_ldap,dc=com"
Apr 20 03:20:21 ty-ldap01 slapd[2503]: conn=1003 op=6 ENTRY dn="uid=user1002,ou=people,dc=open_ldap,dc=com"
デフォルトのloglevelから一つ下げましたが、別ユーザにスイッチするだけで上記のログが出力されます。

以上で終了です。長文おつきあいありがとうございます。サイト継続ご協力のほどお願い申し上げます。m(_ _)m


Before << (3) LDAP登録ユーザでのSSHログイン認証とパスワード変更

2014年4月26日土曜日

LDAP登録ユーザでのSSHログイン認証とパスワード変更


■Linux SSHログイン認証をOpenLDAPで一元管理

LDAPサーバに登録したユーザでのSSHログインおよびパスワード変更をアプリ系サーバで実現するための流れを、下記のパートに分けて記載していきます。



■本編の概要
アプリ系サーバにLDAP認証モジュール(nss-pam-ldapd)を追加してLDAPサーバに接続します。 idコマンドでLDAPに登録したユーザを確認できるものの、ログインすることができません。 認証クライアントモジュールをsssdからnslcdに変更にすることで、SSHログインできるようになります。 homeDirectoryもLDAPサーバからNFSマウントする方式にした方が一元管理レベル感が高まります。 ここまで出来ればLDAPユーザのパスワードをアプリ系サーバから変更したいところですが、 またしてもエラーに出くわします。slapd.confをさらに修正することでLDAPサーバ上の パスワードも変更できるようなります。こちらの手順もまとめます。
OS: CentOS 6.5 (64-bit)
openldap: 2.4.23
nss-pam-ldapd: 0.7.5
LDAPサーバホスト名: ty-ldap01
アプリ系サーバホスト名: ty-app01,ty-app02

■アプリ系サーバにnss-pam-ldapdのインストール
[root@ty-app01 ~]# yum install nss-pam-ldapd.x86_64
(中略)
============================================================================
 Package                Arch        Version               Repository   Size
============================================================================
Installing:
 nss-pam-ldapd          x86_64      0.7.5-18.2.el6_4      base        152 k
Installing for dependencies:
 nscd                   x86_64      2.12-1.132.el6        base        219 k
 pam_ldap               x86_64      185-11.el6            base         88 k

Transaction Summary
============================================================================
Install       3 Package(s)
(以下略)

■authconfig-tuiによるクライアント側認証モジュール設定
authconfig-tuiのGUIの表示が崩れないように言語を英語に変更しておきます。
[root@ty-app01 ~]# LANG=C; authconfig-tui


↑Use LDAP にチェック。あとはデフォルトのまま。

↑ServerとBaseDNを設定。
[root@ty-app01 ~]# LANG=C; authconfig-tui
nslcd を起動中:                                            [  OK  ]
[root@ty-app01 ~]#
※sssdが自動起動される場合があります。
sssdの認証処理はTLSまたはLDAPSプロトコルが必須となり設定が複雑なので今回はnslcdを利用します。

## LANGを元に戻す
[root@ty-app01 ~]# LANG=ja_JP.UTF-8
## authconfig-tuiによりldap.confが修正されたことを確認
[root@ty-app01 ~]# grep -v "#\|^$" /etc/openldap/ldap.conf
TLS_CACERTDIR /etc/openldap/cacerts
URI ldap://ty-ldap01/
BASE dc=open_ldap,dc=com
[root@ty-app01 ~]#
## LDAPサーバ上のユーザ確認
[root@ty-app01 ~]# grep user1001 /etc/passwd
[root@ty-app01 ~]# id user1001
uid=1001(user1001) gid=1000(LDAP team1000) 所属グループ=1000(LDAP team1000)
[root@ty-app01 ~]#

■ホームディレクトリ準備
[root@ty-app01 ~]# mount -t nfs ty-ldap01:/home /home
[root@ty-app01 ~]# mkdir -m 700 /home/user1001; chown user1001: /home/user1001
[root@ty-app01 ~]# mkdir -m 700 /home/user1002; chown user1002: /home/user1002
[root@ty-app01 ~]# mkdir -m 700 /home/user2001; chown user2001: /home/user2001
[root@ty-app01 ~]# mkdir -m 700 /home/user2002; chown user2002: /home/user2002

■OpenLDAPサーバ上のユーザにスイッチ
[root@ty-app01 ~]# su - user1001
-bash-4.1$ su - user1002
パスワード:
su: パスワードが違います
-bash-4.1$
rootユーザからのスイッチはパスワードを聞かれないので可能ですが、
user1001 → user1002のスイッチ時に正しいパスワードを入力しても認証されません・・・。(T-T)

■認証クライアントモジュールの修正
[root@ty-app01 ~]# cd /etc/pam.d/
[root@ty-app01 pam.d]# ll | grep auth-ac
lrwxrwxrwx. 1 root root  19  3月 21 15:35 2014 fingerprint-auth -> fingerprint-auth-ac
-rw-r--r--. 1 root root 659  3月 21 15:35 2014 fingerprint-auth-ac
lrwxrwxrwx. 1 root root  16  3月 21 15:35 2014 password-auth -> password-auth-ac
-rw-r--r--. 1 root root 896  3月 21 15:35 2014 password-auth-ac
lrwxrwxrwx. 1 root root  17  3月 21 15:35 2014 smartcard-auth -> smartcard-auth-ac
-rw-r--r--. 1 root root 711  3月 21 15:35 2014 smartcard-auth-ac
lrwxrwxrwx. 1 root root  14  3月 21 15:35 2014 system-auth -> system-auth-ac
-rw-r--r--. 1 root root 937  3月 21 15:35 2014 system-auth-ac
[root@ty-app01 pam.d]#
## system-auth-acを修正
[root@ty-app01 pam.d]# cp -p system-auth-ac system-auth-ac.20140321
[root@ty-app01 pam.d]# vi system-auth-ac
[root@ty-app01 pam.d]# diff system-auth-ac system-auth-ac.20140321
7d6
< auth        sufficient    pam_ldap.so use_first_pass
15d13
< account     [default=bad success=ok user_unknown=ignore] pam_ldap.so
19d16
< password    sufficient    pam_ldap.so use_authtok
23d19
< session     optional      pam_ldap.so
[root@ty-app01 pam.d]#
⇒適所に上記4レコードを追加。
※[pam_sss]になっている場合は[pam_ldap]に変更。

## OpenLDAPサーバ上のユーザにスイッチ
[root@ty-app01 pam.d]# /etc/init.d/nslcd restart
nslcd を停止中:                                            [  OK  ]
nslcd を起動中:                                            [  OK  ]
[root@ty-app01 pam.d]# su - user1001
-bash-4.1$ su - user1002
パスワード:
-bash-4.1$ id
uid=1002(user1002) gid=1000(LDAP team1000) 所属グループ=1000(LDAP team1000)
-bash-4.1$
成功!! (^o^)

## OpenLDAPサーバ上のユーザのパスワード変更
-bash-4.1$ passwd
ユーザー user1002 のパスワードを変更。
Enter login(LDAP) password:
新しいパスワード:
新しいパスワードを再入力してください:
LDAP password information update failed: Insufficient access
passwd: 認証トークン操作エラー
-bash-4.1$
認証されるようになったが、パスワードの変更は失敗する・・・。(T-T)


■LDAPサーバ側でパスワード変更権限追加設定
※LDAPサーバ側の設定です!!
[root@ty-ldap01 ~]# vi /etc/openldap/slapd.conf
[root@ty-ldap01 ~]# grep -A 20 "EVERYTHING" /etc/openldap/slapd.conf
# rootdn can always read and write EVERYTHING!

# change own password ---- from ----
access to attrs=userPassword
        by self write
        by dn="cn=Manager,dc=open_ldap,dc=com" write
        by anonymous auth
        by * none
access to *
        by self write
        by * read
# change own password ----- to -----

# enable on-the-fly configuration (cn=config)
database config
access to *
        by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
        by * none

# enable server status monitoring (cn=monitor)
database monitor
[root@ty-ldap01 ~]#
※ # change own password のくだりを追加する場所が大事です。

## 設定反映
[root@ty-ldap01 ~]# change_slapd.sh
config file testing succeeded
slapd を停止中:                                            [  OK  ]
slapd を起動中:                                            [  OK  ]
[root@ty-ldap01 ~]#
※change_slapd.shは (1) OpenLDAPのインストールと起動 で作成したスクリプトです。


■OpenLDAPサーバ上のユーザのパスワード変更
[root@ty-app01 ~]# su - user1001
-bash-4.1$ passwd
ユーザー user1001 のパスワードを変更。
Enter login(LDAP) password:
新しいパスワード:
新しいパスワードを再入力してください:
LDAP password information changed for user1001
passwd: 全ての認証トークンが正しく更新できました。
-bash-4.1$
成功!! (^o^)

## 念のため確認
[root@ty-app01 ~]# ldapsearch -x -h ty-ldap01 -D "cn=Manager,dc=open_ldap,dc=com" -w secret | grep -n userPassword
58:userPassword:: e2NyeXB0fSQxJEJTZGhaSm1hJEF0cjE1d3dGa1pLN1FNeHFOeVA5MC8=
67:userPassword:: e1NTSEF9dTFpWXlVbllKdGQ0dTMyTE4zRnZwRkVjMzR5Q1ZvRTU=
80:userPassword:: e1NTSEF9dTFpWXlVbllKdGQ0dTMyTE4zRnZwRkVjMzR5Q1ZvRTU=
93:userPassword:: e1NTSEF9dTFpWXlVbllKdGQ0dTMyTE4zRnZwRkVjMzR5Q1ZvRTU=
[root@ty-app01 ~]#
user1001のパスワードのエンコード文字列だけ変更となっています。

## パスワードのエンコード方式の確認
[root@ty-app01 ~]# echo "e2NyeXB0fSQxJEJTZGhaSm1hJEF0cjE1d3dGa1pLN1FNeHFOeVA5MC8=" | base64 -d
{crypt}$1$BSdhZJma$Atr15wwFkZK7QMxqNyP90/[root@ty-app01 ~]#
SSHAではなく、cryptでエンコードされているようです。

## うまくいかない場合
下記ファイルの設定も見直してください。
/etc/pam.d/password-auth-ac
/etc/nsswitch.conf



Before << (2) LDIFによるLDAPサーバへのデータ登録
Next >> (4) OpenLDAPのログ出力設定

2014年4月25日金曜日

LDIFによるLDAPサーバへのデータ登録


■Linux SSHログイン認証をOpenLDAPで一元管理

LDAPサーバに登録したユーザでのSSHログインおよびパスワード変更をアプリ系サーバで実現するための流れを、下記のパートに分けて記載していきます。



■本編の概要
LinuxのOSユーザは最低1つのグループに属しているので、それを踏襲したDIT(Directory Information Tree)を LDAP上に定義して、ユーザを登録する手順をまとめます。 LDAPサーバへデータを登録するにはLDIFファイルの利用が便利です。 登録したユーザの削除やパスワード変更、一連作業時によくあるエラーのメッセージもまとめてみます。
OS: CentOS 6.5 (64-bit)
openldap: 2.4.23
nss-pam-ldapd: 0.7.5
LDAPサーバホスト名: ty-ldap01
アプリ系サーバホスト名: ty-app01,ty-app02

■DIT(Directory Information Tree)概念図
●dc=open_ldap,dc=com
│
├---●ou=Group
│   │
│   ├---●cn=team1000
│   └---●cn=team2000
│
└---●ou=People
     │
     ├---●uid=user1001
     ├---●uid=user1002
     ├---●uid=user2001
     └---●uid=user2002

■オブジェクトクラスの確認
OSユーザに必要な属性をカバーする適当なオブジェクトクラスとして'posixAccount'を使用する。
スキーマに定義されている内容を確認する。
[root@ty-ldap01 ~]# grep -n -A 4 posixAccount /etc/openldap/schema/*.schema
/etc/openldap/schema/nis.schema:161:objectclass ( 1.3.6.1.1.1.2.0 NAME 'posixAccount'
/etc/openldap/schema/nis.schema-162-    DESC 'Abstraction of an account with POSIX attributes'
/etc/openldap/schema/nis.schema-163-    SUP top AUXILIARY
/etc/openldap/schema/nis.schema-164-    MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory )
/etc/openldap/schema/nis.schema-165-    MAY ( userPassword $ loginShell $ gecos $ description ) )
[root@ty-ldap01 ~]#
⇒homeDirectory が必須属性になっていることに注意!!

■LDIFファイル準備
## base.ldif
[root@ty-ldap01 ldif]# cat base.ldif
dn: dc=open_ldap,dc=com
objectClass: dcObject
objectClass: organization
dc: open_ldap
o: OpenLDAP Corporation

dn: cn=Manager,dc=open_ldap,dc=com
objectclass: organizationalRole
cn: Manager

dn: ou=Group,dc=open_ldap,dc=com
objectClass: organizationalUnit
ou: Group

dn: ou=People,dc=open_ldap,dc=com
objectClass: organizationalUnit
ou: People
[root@ty-ldap01 ldif]#
## group.ldif
[root@ty-ldap01 ldif]# cat group.ldif
dn: cn=team1000,ou=group,dc=open_ldap,dc=com
objectClass: posixGroup
objectClass: top
cn: LDAP team1000
gidNumber: 1000

dn: cn=team2000,ou=group,dc=open_ldap,dc=com
objectClass: posixGroup
objectClass: top
cn: LDAP team2000
gidNumber: 2000
[root@ty-ldap01 ldif]#
## people.ldif
[root@ty-ldap01 ldif]# cat people.ldif
dn: uid=user1001,ou=People,dc=open_ldap,dc=com
uid: user1001
cn: LDAP user1001
objectClass: account
objectClass: posixAccount
objectClass: top
userPassword: {SSHA}u1iYyUnYJtd4u32LN3FvpFEc34yCVoE5
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 1000
homeDirectory: /home/user1001

dn: uid=user1002,ou=People,dc=open_ldap,dc=com
uid: user1002
cn: LDAP user1002
objectClass: account
objectClass: posixAccount
objectClass: top
userPassword: {SSHA}u1iYyUnYJtd4u32LN3FvpFEc34yCVoE5
loginShell: /bin/bash
uidNumber: 1002
gidNumber: 1000
homeDirectory: /home/user1002

dn: uid=user2001,ou=People,dc=open_ldap,dc=com
uid: user2001
cn: LDAP user2001
objectClass: account
objectClass: posixAccount
objectClass: top
userPassword: {SSHA}u1iYyUnYJtd4u32LN3FvpFEc34yCVoE5
loginShell: /bin/bash
uidNumber: 2001
gidNumber: 2000
homeDirectory: /home/user2001

dn: uid=user2002,ou=People,dc=open_ldap,dc=com
uid: user2002
cn: LDAP user2002
objectClass: account
objectClass: posixAccount
objectClass: top
userPassword: {SSHA}u1iYyUnYJtd4u32LN3FvpFEc34yCVoE5
loginShell: /bin/bash
uidNumber: 2002
gidNumber: 2000
homeDirectory: /home/user2002
[root@ty-ldap01 ldif]#
※userPasswordには (1) OpenLDAPのインストールと起動 で作成した各ユーザ(共通)のエンコードされたパスワード文字列を指定。

■データ登録
## base.ldif 登録
[root@ty-ldap01 ldif]# ldapadd -x -D "cn=Manager,dc=open_ldap,dc=com" -w secret -f ./base.ldif
adding new entry "dc=open_ldap,dc=com"

adding new entry "cn=Manager,dc=open_ldap,dc=com"

adding new entry "ou=Group,dc=open_ldap,dc=com"

adding new entry "ou=People,dc=open_ldap,dc=com"

[root@ty-ldap01 ldif]#
## group.ldif 登録
[root@ty-ldap01 ldif]# ldapadd -x -D "cn=Manager,dc=open_ldap,dc=com" -w secret -f ./group.ldif
adding new entry "cn=team1000,ou=group,dc=open_ldap,dc=com"

adding new entry "cn=team2000,ou=group,dc=open_ldap,dc=com"

[root@ty-ldap01 ldif]#
## people.ldif 登録
[root@ty-ldap01 ldif]# ldapadd -x -D "cn=Manager,dc=open_ldap,dc=com" -w secret -f ./people.ldif
adding new entry "uid=user1001,ou=People,dc=open_ldap,dc=com"

adding new entry "uid=user1002,ou=People,dc=open_ldap,dc=com"

adding new entry "uid=user2001,ou=People,dc=open_ldap,dc=com"

adding new entry "uid=user2002,ou=People,dc=open_ldap,dc=com"

[root@ty-ldap01 ldif]#
★LDIFに'homeDirectory'の記載を忘れたときのエラー
[root@ty-ldap01 ldif]# ldapadd -x -D "cn=Manager,dc=open_ldap,dc=com" -w secret -f people-nohome.ldif
adding new entry "uid=user2003,ou=People,dc=open_ldap,dc=com"
ldap_add: Object class violation (65)
        additional info: object class 'posixAccount' requires attribute 'homeDirectory'

[root@ty-ldap01 ldif]#
★ユーザを重複登録したときのエラー
[root@ty-ldap01 ldif]# ldapadd -x -D "cn=Manager,dc=open_ldap,dc=com" -w secret -f people-dual.ldif
adding new entry "uid=user2001,ou=People,dc=open_ldap,dc=com"
ldap_add: Already exists (68)

[root@ty-ldap01 ldif]#

■ldap.confの修正
[root@ty-ldap01 ~]# cp -p /etc/openldap/ldap.conf /etc/openldap/ldap.conf.org
[root@ty-ldap01 ~]# vi /etc/openldap/ldap.conf
[root@ty-ldap01 ~]# grep -v "#\|^$" /etc/openldap/ldap.conf
TLS_CACERTDIR   /etc/openldap/certs
URI ldap://127.0.0.1/
BASE dc=open_ldap,dc=com
[root@ty-ldap01 ~]#
※上記の修正を怠ると、ldapsearchコマンドでエントリがヒットしない場合がある。

■登録した情報を確認
[root@ty-ldap01 ~]# ldapsearch -x -h localhost -D "cn=Manager,dc=open_ldap,dc=com" -w secret | grep -n dn:
10:dn: dc=open_ldap,dc=com
17:dn: cn=Manager,dc=open_ldap,dc=com
22:dn: ou=Group,dc=open_ldap,dc=com
27:dn: ou=People,dc=open_ldap,dc=com
32:dn: cn=team1000,ou=group,dc=open_ldap,dc=com
40:dn: cn=team2000,ou=group,dc=open_ldap,dc=com
48:dn: uid=user1001,ou=People,dc=open_ldap,dc=com
61:dn: uid=user1002,ou=People,dc=open_ldap,dc=com
74:dn: uid=user2001,ou=People,dc=open_ldap,dc=com
87:dn: uid=user2002,ou=People,dc=open_ldap,dc=com
[root@ty-ldap01 ~]# 

■特定ユーザのパスワード変更
[root@ty-ldap01 ~]# ldappasswd -x -D "cn=Manager,dc=open_ldap,dc=com" -w secret -s himitsu "uid=user1001,ou=People,dc=open_ldap,dc=com"
パスワードをプロンプトから入力する場合は[-s naisyo] → [-S]にする。

## パスワードが変更されたかの確認
[root@ty-ldap01 ~]# ldapsearch -x -h localhost -b "uid=user1001,ou=People,dc=open_ldap,dc=com" -LLL
dn: uid=user1001,ou=People,dc=open_ldap,dc=com
uid: user1001
cn: LDAP user1001
objectClass: account
objectClass: posixAccount
objectClass: top
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 1000
homeDirectory: /home/user1001
userPassword:: e1NTSEF9WC9RTTFzVzhTSEpIYTdURUN1TENsRVpWMEhwbHIyVHQ=

[root@ty-ldap01 ~]#
## パスワードはbase64でエンコードされているのでデコード
[root@ty-ldap01 ~]# echo "e1NTSEF9WC9RTTFzVzhTSEpIYTdURUN1TENsRVpWMEhwbHIyVHQ=" | base64 -d
{SSHA}X/QM1sW8SHJHa7TECuLClEZV0Hplr2Tt[root@ty-ldap01 ~]#
⇒people.ldifに設定したパスワードは「{SSHA}u1iYyUnYJtd4u32LN3FvpFEc34yCVoE5」だったので確かに変更されているようです。

■特定ユーザエントリを削除
[root@ty-ldap01 ~]# ldapdelete -x -D "cn=Manager,dc=open_ldap,dc=com" -w secret "uid=user2002,ou=People,dc=open_ldap,dc=com"
[root@ty-ldap01 ~]# ldapsearch -x -h localhost -b "dc=open_ldap,dc=com" | grep -n "dn: uid"
48:dn: uid=user1001,ou=People,dc=open_ldap,dc=com
61:dn: uid=user1002,ou=People,dc=open_ldap,dc=com
74:dn: uid=user2001,ou=People,dc=open_ldap,dc=com
[root@ty-ldap01 ~]#

■登録したデータを全削除する場合
[root@ty-ldap01 ~]# rm -rf /var/lib/ldap/*
[root@ty-ldap01 ~]# cp -p /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
[root@ty-ldap01 ~]# /etc/init.d/slapd restart
slapd を停止中:                                            [  OK  ]
slapd を起動中:                                            [  OK  ]
[root@ty-ldap01 ~]#
※以降の作業のために、全削除後もう一度ldifファイルでデータを登録しておきます。

■ホームディレクトリをNFSで公開
[root@ty-ldap01 ~]# vi /etc/exports
[root@ty-ldap01 ~]# cat /etc/exports
/home           *(rw,sync,no_root_squash)
[root@ty-ldap01 ~]# exportfs -a
[root@ty-ldap01 ~]# /etc/init.d/nfs start
NFS サービスを起動中:                                      [  OK  ]
NFS クォータを起動中:                                      [  OK  ]
NFS mountd を起動中:                                      [  OK  ]
NFS デーモンを起動中:                                      [  OK  ]
RPC idmapd を起動中:                                      [  OK  ]
[root@ty-ldap01 ~]#
## NFS自動起動設定
[root@ty-ldap01 ~]# chkconfig nfs on; chkconfig --list nfs
nfs             0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@ty-ldap01 ~]#


LDIFによるLDAPサーバへのデータ登録の手順は以上で終了です。
次回はいよいよアプリ系サーバからOpenLDAP上に登録したユーザでSSHログインを行います。


Before << (1) OpenLDAPのインストールと起動
Next >> (3) LDAP登録ユーザでのSSHログイン認証とパスワード変更

2014年4月24日木曜日

OpenLDAPのインストールと起動


■Linux SSHログイン認証をOpenLDAPで一元管理

LDAPサーバに登録したユーザでのSSHログインおよびパスワード変更をアプリ系サーバで実現するための流れを、下記のパートに分けて記載していきます。



■本編の概要
openldap-servers、openldap-clients、nss-pam-ldapdのインストールおよびslapd.confの 設定と変更方法、slapdサービスの起動およびLDAPサーバへの接続確認方法についてまとめます。 特に、CentOS 6系からslapdの設定はslapd.dディレクトリ以下のファイルで定義される方式に変更と なっているので注意が必要です。今回はDB_CONFIGを使用し、旧来のslapd.confに設定した内容を slapd.dディレクトリに出力する手順をまとめます。
OS: CentOS 6.5 (64-bit)
openldap: 2.4.23
nss-pam-ldapd: 0.7.5
LDAPサーバホスト名: ty-ldap01
アプリ系サーバホスト名: ty-app01,ty-app02

■インストール済みOpenLDAP関連パッケージの確認
[root@ty-ldap01 ~]# yum list installed '*ldap*'
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
Installed Packages
apr-util-ldap.x86_64 1.3.9-3.el6_0.1    @anaconda-CentOS-201311272149.x86_64/6.5
openldap.x86_64      2.4.23-32.el6_4.1  @anaconda-CentOS-201311272149.x86_64/6.5
python-ldap.x86_64   2.3.10-1.el6       @anaconda-CentOS-201311272149.x86_64/6.5
[root@ty-ldap01 ~]#

■最低限必要なパッケージのインストール
openldap-servers、openldap-clients、nss-pam-ldapd を追加インストール
[root@ty-ldap01 ~]# yum install openldap-clients.x86_64 openldap-servers.x86_64 nss-pam-ldapd.x86_64
(中略)
===========================================================================
 Package                  Arch      Version             Repository    Size
===========================================================================
Installing:
 nss-pam-ldapd            x86_64    0.7.5-18.2.el6_4    base         152 k
 openldap-clients         x86_64    2.4.23-34.el6_5.1   updates      165 k
 openldap-servers         x86_64    2.4.23-34.el6_5.1   updates      2.0 M
Installing for dependencies:
 nscd                     x86_64    2.12-1.132.el6      base         219 k
 pam_ldap                 x86_64    185-11.el6          base          88 k
Updating for dependencies:
 openldap                 x86_64    2.4.23-34.el6_5.1   updates      265 k

Transaction Summary
===========================================================================
Install       5 Package(s)
Upgrade       1 Package(s)
(以下略)

■インストール済みOpenLDAP関連パッケージの再確認
[root@ty-ldap01 ~]# yum list installed '*ldap*'
(中略)
Installed Packages
apr-util-ldap.x86_64      1.3.9-3.el6_0.1     @anaconda-CentOS-201311272149.x86_64/6.5
nss-pam-ldapd.x86_64      0.7.5-18.2.el6_4    @base
openldap.x86_64           2.4.23-34.el6_5.1   @updates
openldap-clients.x86_64   2.4.23-34.el6_5.1   @updates
openldap-servers.x86_64   2.4.23-34.el6_5.1   @updates
pam_ldap.x86_64           185-11.el6          @base
python-ldap.x86_64        2.3.10-1.el6        @anaconda-CentOS-201311272149.x86_64/6.5
[root@ty-ldap01 ~]#

■DB_CONFIG準備
DB_CONFIGファイルは、OpenLDAPサーバが BerkeleyDB をドライブする際の環境定義を書いておくファイルであり、 slapd.confのdirectoryディレクティブで指定したディレクトリから探されます。
[root@ty-ldap01 ~]# cp -p /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

■slapd設定を変換
OpenLDAPサービスに必要となる設定がCentOS 6で変更になっています。 旧バージョンでは、slapdは /etc/openldap/slapd.conf から設定していました。 RedHatEnterpriseLinux 6のslapd設定は特殊なLDAPディレクトリ(/etc/openldap/slapd.d/) 内の事前定義済みのスキーマとDIT(ディレクトリ情報ツリー)と共に格納されるようになりました。 旧来の設定ファイルを新しいディレクトリで機能するように変換する方法を記述します。

## slapd.confの準備
[root@ty-ldap01 ~]# cp -p /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
## slapd.confのチェック
[root@ty-ldap01 ~]# slaptest -u -f /etc/openldap/slapd.conf
config file testing succeeded
[root@ty-ldap01 ~]#
## 新しいディレクトリの /etc/openldap/slapd.d/ の内容を削除
[root@ty-ldap01 ~]# rm -rf /etc/openldap/slapd.d/*
## slaptestを実行して設定ファイルの有効性をチェックし、新しい設定ディレクトリを指定
[root@ty-ldap01 ~]# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
bdb_db_open: database "dc=my-domain,dc=com": db_open(/var/lib/ldap/id2entry.bdb) failed: No such file or directory (2).
backend_startup_one (type=bdb, suffix="dc=my-domain,dc=com"): bi_db_open failed! (2)
slap_startup failed (test would succeed using the -u switch)
[root@ty-ldap01 ~]#
## 新しいディレクトリ上でパーミッションを設定
[root@ty-ldap01 ~]# chmod -R 000 /etc/openldap/slapd.d
[root@ty-ldap01 ~]# chmod -R u+rwX /etc/openldap/slapd.d
[root@ty-ldap01 ~]# chown -R ldap: /etc/openldap/slapd.d
[root@ty-ldap01 ~]# chown -R ldap: /var/lib/ldap

■LDAPサーバの起動
[root@ty-ldap01 ~]# /etc/init.d/slapd start
slapd を起動中:                                            [  OK  ]
[root@ty-ldap01 ~]#
## 自動起動設定
[root@ty-ldap01 ~]# chkconfig slapd on; chkconfig --list slapd
slapd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@ty-ldap01 ~]#

■LDAPサーバへの接続確認
[root@ty-ldap01 ~]# ldapsearch -x -h localhost -b dc=my-domain,dc=com -LLL
No such object (32)
[root@ty-ldap01 ~]#
## オプション説明
"-x" 匿名ユーザーでの簡易認証
"-h" OpenLDAPサーバを指定
"-b" ディレクトリツリーの検索ベースを指定
"-LLL"最もシンプルなLDIFフォーマットへ出力を整形

## 結果補足
起動したばかりのOpenLDAPサーバからは、「検索条件に一致する結果はなし」との応答が返ります。
現時点ではまだエントリを登録していないため、これが正しい結果です。

■LDAPパスワードの作成
## 管理用
[root@ty-ldap01 ~]# slappasswd -s secret
{SSHA}XZY46aVGlCElS13dN4ryN0kwglZCVKqG
[root@ty-ldap01 ~]#
## 各ユーザ用(共通)
[root@ty-ldap01 ~]# slappasswd -s naisyo
{SSHA}u1iYyUnYJtd4u32LN3FvpFEc34yCVoE5
[root@ty-ldap01 ~]#

■slapd.confの設定とチェック
[root@ty-ldap01 ~]# cp -p /etc/openldap/slapd.conf /etc/openldap/slapd.conf.org
[root@ty-ldap01 ~]# vi /etc/openldap/slapd.conf
[root@ty-ldap01 ~]# egrep -n "^suffix|^rootdn|^rootpw" /etc/openldap/slapd.conf
115:suffix              "dc=open_ldap,dc=com"
117:rootdn              "cn=Manager,dc=open_ldap,dc=com"
123:rootpw              {SSHA}XZY46aVGlCElS13dN4ryN0kwglZCVKqG
[root@ty-ldap01 ~]# slaptest -u -f /etc/openldap/slapd.conf
config file testing succeeded
[root@ty-ldap01 ~]#
※rootpwには先ほど作成した管理者用のエンコードされたパスワード文字列を記述します。
※my-domain → open_ldap に変更してみました。

■slapd.confの設定変更反映
一連の作業をシェルスクリプト化しておきます。
[root@ty-ldap01 ~]# vi /usr/local/bin/change_slapd.sh
[root@ty-ldap01 ~]# cat /usr/local/bin/change_slapd.sh
#!/bin/sh
# /etc/openldap/slapd.conf の設定を反映するスクリプト

rm -rf /etc/openldap/slapd.d/*
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
chmod -R 000 /etc/openldap/slapd.d
chmod -R u+rwX /etc/openldap/slapd.d
chown -R ldap: /etc/openldap/slapd.d
/etc/init.d/slapd restart

exit 0
[root@ty-ldap01 ~]# chmod 755 /usr/local/bin/change_slapd.sh
[root@ty-ldap01 ~]# change_slapd.sh
config file testing succeeded
slapd を停止中:                                            [  OK  ]
slapd を起動中:                                            [  OK  ]
[root@ty-ldap01 ~]#
slaptestコマンドでslapd.confの内容に基づきslapd.dディレクトリ以下にファイルを 出力したいが書き込み権限が無いため更新されません。よって事前に削除しておきます。

■管理者で接続確認
[root@ty-ldap01 ~]# ldapsearch -x -h localhost -D "cn=Manager,dc=open_ldap,dc=com" -w secret
# extended LDIF
#
# LDAPv3
# base <> (default) with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# search result
search: 2
result: 32 No such object

# numResponses: 1
[root@ty-ldap01 ~]#
正しく接続できました。登録されたデータはまだないため上記のように表示されます。 OpenLDAPのインストールおよび起動、接続までの手順は以上となります。


Next >> (2) LDIFによるLDAPサーバへのデータ登録

2014年4月23日水曜日

Linux SSHログイン認証をOpenLDAPで一元管理


■概要
複数のユーザが複数のサーバにSSHでログインして作業する場合、各サーバごとにID/Passwordを準備して認証することも可能ですが、アカウント管理としては煩雑になっていしまいます。
LDAPサーバを導入してユーザのID/Passwordを一元管理することで、どのサーバにも同じPasswrodでログインでき、また、どこかのサーバでPasswordを変更しても他のサーバにログインする場合は変更後のPasswordでログインできるようになります。

OS: CentOS 6.4 (64-bit)
openldap: 2.4.23
nss-pam-ldapd: 0.7.5



■LinuxOSへのSSHログイン認証を一元管理するまでの流れ

LDAPサーバに登録したユーザでのSSHログインおよびパスワード変更をアプリ系サーバで
実現するための流れを、下記のパートに分けて記載していきます。

(1) OpenLDAPのインストールと起動 (⇒詳細ページ)
openldap-servers、openldap-clients、nss-pam-ldapdのインストールおよびslapd.confの
設定と変更方法、slapdサービスの起動およびLDAPサーバへの接続確認方法についてまとめます。
特に、CentOS 6系からslapdの設定はslapd.dディレクトリ以下のファイルで定義される方式に変更と
なっているので注意が必要です。今回はDB_CONFIGを使用し、旧来のslapd.confに設定した内容を
slapd.dディレクトリに出力する手順をまとめます。

(2) LDIFによるLDAPサーバへのデータ登録 (⇒詳細ページ)
LinuxのOSユーザは最低1つのグループに属しているので、それを踏襲したDIT
(Directory Information Tree)をLDAP上に定義して、ユーザを登録する手順をまとめます。
LDAPサーバへデータを登録するにはLDIFファイルの利用が便利です。登録したユーザの削除や
パスワード変更、一連作業時によくあるエラーのメッセージもまとめてみます。

(3) LDAP登録ユーザでのSSHログイン認証とパスワード変更 (⇒詳細ページ)
アプリ系サーバにLDAP認証モジュール(nss-pam-ldapd)を追加してLDAPサーバに接続します。
idコマンドでLDAPに登録したユーザを確認できるものの、ログインすることができません。
認証クライアントモジュールをsssdからnslcdに変更にすることで、SSHログインできるようになります。
homeDirectoryもLDAPサーバからNFSマウントする方式にした方が一元管理レベル感が高まります。

ここまで出来ればLDAPユーザのパスワードをアプリ系サーバから変更したいところですが、またしても
エラーに出くわします。slapd.confをさらに修正することでLDAPサーバ上のパスワードも変更できる
ようなります。こちらの手順もまとめてみたいと思います。

(4) OpenLDAPのログ出力設定 (⇒詳細ページ)
OpenLDAPサーバはデフォルト設定ではログを出力しません。
slapd.confにログレベルを記述すると、シスログ経由でログを出力します。
ログレベルおよびログの出力先の設定についての手順を記載します。

概要へ戻る

2013年3月8日金曜日

Windows Server 2008 R2 の Active Directory を ldapsearchで検索


Windows Server 2008 R2 の Active Directory 上のユーザをLinuxのldapsearchコマンドを利用して検索できるか確認します。
LinuxサーバのSubversionの認証にADを利用するための事前検証という位置付けです。

【ADサーバ】
OS: Windows Server 2008 R2(64-bit)
Domain Name: kuitan.net
IP: 192.168.77.125

【Linuxサーバ】
OS: CentOS 6.3(64-bit)
openldap-clients: 2.4.23
IP: 192.168.77.147


■Active Directoryにユーザ作成

↑標準的な場所にaduser01~05を作成。

↑組織単位(OU)として「person」を作成し、ObjectClassにInetOrgPersonを指定したユーザpuser01~02を作成。

■openldap-clientsインストール
※ldapsearchコマンドを利用するにはopenldap-clientsパッケージが必要。
[root@cent63 ~]# yum install openldap-clients ====================================================================== Package Arch Version Repository Size ====================================================================== Installing: openldap-clients x86_64 2.4.23-26.el6_3.2 updates 164 k Updating for dependencies: openldap x86_64 2.4.23-26.el6_3.2 updates 262 k Transaction Summary ====================================================================== Install 1 Package(s) Upgrade 1 Package(s) (以下省略)

■ldapsearchコマンドで接続確認
[root@cent63 ~]# ldapsearch -x -D "cn=administrator,dc=kuitan,dc=net" -w xxxxxxxx -h 192.168.77.125 -b "cn=users,dc=kuitan,dc=net" "(objectclass=*)" "sAMAccountName=username" ldap_bind: Invalid credentials (49) additional info: 80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e, v1db0 [root@cent63 ~]#
→接続失敗。
Invalid credentials (49) は、ユーザIDやパスワードが間違っているとよく出るエラー。らしい。

今回はDNの指定が間違っていたので修正して再検索
[root@cent63 ~]# ldapsearch -x -D "cn=administrator,cn=users,dc=kuitan,dc=net" -w xxxxxxxx -h 192.168.77.125 -b "cn=users,dc=kuitan,dc=net" "(objectclass=*)" "sAMAccountName=username" (中略) # aduser04, Users, kuitan.net dn: CN=aduser04,CN=Users,DC=kuitan,DC=net # aduser05, Users, kuitan.net dn: CN=aduser05,CN=Users,DC=kuitan,DC=net # Administrator, Users, kuitan.net dn: CN=Administrator,CN=Users,DC=kuitan,DC=net # Guest, Users, kuitan.net dn: CN=Guest,CN=Users,DC=kuitan,DC=net # search result search: 2 result: 0 Success # numResponses: 26 # numEntries: 25 [root@cent63 ~]#

DNの指定は、「ユーザ@ドメイン」としてもよい。
※OU=personの下のユーザを検索。
[root@cent63 ~]# ldapsearch -x -D "administrator@kuitan.net" -w xxxxxxxx -h 192.168.77.125 -b "ou=person,dc=kuitan,dc=net" "(objectclass=*)" "sAMAccountName=username" # extended LDIF # # LDAPv3 # base with scope subtree # filter: (objectclass=*) # requesting: sAMAccountName=username # # person, kuitan.net dn: OU=person,DC=kuitan,DC=net # puser01, person, kuitan.net dn: CN=puser01,OU=person,DC=kuitan,DC=net # puser02, person, kuitan.net dn: CN=puser02,OU=person,DC=kuitan,DC=net # search result search: 2 result: 0 Success # numResponses: 4 # numEntries: 3 [root@cent63 ~]#
※ちなみに、ldapsearchで検索するためにcent63サーバをADのドメインに参加させる必要はありません。

2013年3月1日金曜日

CentOSにphpLDAPadminをインストールしてOpenLDAPを管理

OpenLDAPをブラウザから管理するツールとしてphpLDAPadminが便利そうなのでインストールしてみます。
OpenLDAPサーバとは別のWebサーバにphpLDAPadminにインストールしてOpenLDAPを管理する方式を考えています。

【OpenLDAPサーバ】
OS: CentOS 6.3(64-bit)
openldap-servers: 2.4.23
IP: 192.168.77.146

【Webサーバ】
OS: CentOS 6.3(64-bit)
Apache: 2.2.15
PHP: 5.3.3
phpLDAPadmin: 1.2.3
IP: 192.168.77.147


■PHPに必要なモジュールの確認

[root@web03 ~]# rpm -qa | grep php php-pdo-5.3.3-3.el6_2.8.x86_64 php-cli-5.3.3-3.el6_2.8.x86_64 php-pear-1.9.4-4.el6.noarch php-gd-5.3.3-3.el6_2.8.x86_64 php-common-5.3.3-3.el6_2.8.x86_64 php-xml-5.3.3-3.el6_2.8.x86_64 php-5.3.3-3.el6_2.8.x86_64 [root@web03 ~]#
↑php-ldapがない。

■php-ldapインストール

==================================================================== Package Arch Version Repository Size ==================================================================== Installing: php-ldap x86_64 5.3.3-14.el6_3 updates 36 k Updating for dependencies: php x86_64 5.3.3-14.el6_3 updates 1.1 M php-cli x86_64 5.3.3-14.el6_3 updates 2.2 M php-common x86_64 5.3.3-14.el6_3 updates 523 k php-gd x86_64 5.3.3-14.el6_3 updates 104 k php-pdo x86_64 5.3.3-14.el6_3 updates 73 k php-xml x86_64 5.3.3-14.el6_3 updates 101 k Transaction Summary ==================================================================== Install 1 Package(s) Upgrade 6 Package(s) Total download size: 4.1 M Is this ok [y/N]: y (以下省略) [root@web03 ~]# rpm -qa | grep php php-5.3.3-14.el6_3.x86_64 php-gd-5.3.3-14.el6_3.x86_64 php-pear-1.9.4-4.el6.noarch php-common-5.3.3-14.el6_3.x86_64 php-xml-5.3.3-14.el6_3.x86_64 php-ldap-5.3.3-14.el6_3.x86_64 php-pdo-5.3.3-14.el6_3.x86_64 php-cli-5.3.3-14.el6_3.x86_64 [root@web03 ~]#

■ブラウザでPHPモジュール確認

[root@web03 ~]# echo "<?php phpinfo(); ?>" > /var/www/html/test.php
http://192.168.77.147/test.php にアクセス。

↑ldapの項目があることを確認。

■EPELをyumリポジトリに追加

[root@web03 ~]# wget http://ftp.riken.jp/Linux/fedora/epel/RPM-GPG-KEY-EPEL-6 [root@web03 ~]# rpm --import RPM-GPG-KEY-EPEL-6 [root@web03 ~]# vi /etc/yum.repos.d/epel.repo [root@web03 ~]# cat /etc/yum.repos.d/epel.repo [epel] name=EPEL RPM Repository for Red Hat Enterprise Linux baseurl=http://ftp.riken.jp/Linux/fedora/epel/6/$basearch/ gpgcheck=1 enabled=0 [root@web03 ~]#
※phpLDAPadminをyumでインストールするにはEPELリポジトリが必要。

■phpLDAPadminインストール

[root@web03 ~]# yum --enablerepo=epel install phpldapadmin ====================================================================== Package Arch Version Repository Size ====================================================================== Installing: phpldapadmin noarch 1.2.3-1.el6 epel 806 k Transaction Summary ====================================================================== Install 1 Package(s) Total download size: 806 k Installed size: 2.4 M Is this ok [y/N]: y (以下省略)

■config.php設定

[root@web03 ~]# cp -p /etc/phpldapadmin/config.php /etc/phpldapadmin/config.php.org [root@web03 ~]# vi /etc/phpldapadmin/config.php 299行目あたり追記 $servers->setValue('server','host','192.168.77.146'); 399行目あたり、uid→dnに変更 $servers->setValue('login','attr','uid'); ↓ $servers->setValue('login','attr','dn');
※上記以外の設定を下手に行うと画面が表示されない。

■phpldapadmin.conf設定

[root@web03 ~]# cp -p /etc/httpd/conf.d/phpldapadmin.conf /etc/httpd/conf.d/phpldapadmin.conf.org [root@web03 ~]# vi /etc/httpd/conf.d/phpldapadmin.conf [root@web03 ~]# cat /etc/httpd/conf.d/phpldapadmin.conf # # Web-based tool for managing LDAP servers # Alias /phpldapadmin /usr/share/phpldapadmin/htdocs Alias /ldapadmin /usr/share/phpldapadmin/htdocs <Directory /usr/share/phpldapadmin/htdocs> Order Deny,Allow Deny from all Allow from 127.0.0.1 192.168.77.0/24 ←アクセス許可IP追加 Allow from ::1 </Directory> [root@web03 ~]# [root@web03 ~]# /etc/init.d/httpd restart
※表示の都合上タグを"<"と">"で記載。

■ブラウザで接続

https://192.168.77.147/ldapadmin に接続し先日作成したOpenLDAPの情報を確認する。


↑管理者でログインする場合のログインDNは、「cn=Manager,dc=open_ldap,dc=com」

※登録したユーザでログインも可能。ログインDNは、「cn=en2011002,ou=unit01,dc=open_ldap,dc=com」等。自分以外のエントリの情報も確認できるが自分を含め情報の変更は何もできない。(権限がない。この辺は設定でどうにかなりそうだが…。また次回)

2013年2月3日日曜日

Redmineのログイン認証にOpenLDAPを利用

ご存知の通りRedmineはLDAP認証に対応しています。
OpenLDAPを利用してRedmineにログインするための設定をまとめます。

【Redmineサーバ】
・OS:  Amazon Linux AMI release 2012.03(64bit)
・Redmine:  2.1.2
・Ruby:  1.9.3
・Rails:  3.2.8

【OpenLDAPサーバ】
・OS:  Amazon Linux AMI release 2012.09(64bit)
・openldap-servers:  2.4.23


■OpenLDAPのユーザ登録情報



■RedmineのLDAP認証設定

管理 > LDAP認証 > 新しい認証方式

↑あわせてユーザを作成のチェックを忘れずに!

接続テストを実施


■OpenLDAP登録ユーザでログイン


↑事前にRedmine上で管理ユーザ等による登録は不要。ログインと同時にユーザが作成される。

ユーザ情報確認

↑OpenLDAPで指定した氏名やメールアドレスが取得できている。
※Redmineローカルユーザはパスワード変更可能だがLDAP認証ユーザはRedmine上でのパスワード変更はできない。

2013年2月2日土曜日

リポジトリ別にアクセス制御するSubversionの設定方法

プロジェクト別にSVNのリポジトリを分け、LDAPのグループとひも付けることにより、
他のプロジェクトのリポジトリへのアクセスができないように設定します。
※OpenLDAPの設定情報はこちらをご参照ください。


【OpenLDAPサーバ】
OS: CentOS 6.3(64-bit)
openldap-servers: 2.4.23-26.el6_3.2
IP: 192.168.77.146

【Webサーバ】
OS: CentOS 6.3(64-bit)
Apache: 2.2.15
Subversion: 1.6.11
IP: 192.168.77.147


■subversionインストール
[root@web03 ~]# yum -y install subversion (中略) Package subversion-1.6.11-7.el6.x86_64 already installed and latest version Nothing to do [root@web03 ~]#
※すでにインストール済み。

■mod_dav_svnインストール
[root@web03 ~]# yum -y install mod_dav_svn (中略) ====================================================================== Package Arch Version Repository Size ====================================================================== Installing: mod_dav_svn x86_64 1.6.11-7.el6 base 79 k Transaction Summary ====================================================================== Install 1 Package(s) (省略)
※/etc/httpd/conf.d/subversion.conf が自動生成された。

■svnリポジトリ格納ディレクトリ作成
[root@web03 ~]# mkdir /var/www/svn [root@web03 ~]# mkdir /var/www/svn/repos1 [root@web03 ~]# mkdir /var/www/svn/repos2

■svnリポジトリ作成
[root@web03 ~]# svnadmin create /var/www/svn/repos1/project_A [root@web03 ~]# svnadmin create /var/www/svn/repos1/project_B [root@web03 ~]# svnadmin create /var/www/svn/repos2/project_C [root@web03 ~]# svnadmin create /var/www/svn/repos2/project_D

■所有者変更および確認
[root@web03 ~]# chown -R apache: /var/www/svn/ [root@web03 ~]# ll /var/www/svn/repos2/project_D/ 合計 24 -rw-r--r-- 1 apache apache 229 2月 1 23:13 2013 README.txt drwxr-xr-x 2 apache apache 4096 2月 1 23:13 2013 conf drwxr-sr-x 6 apache apache 4096 2月 1 23:13 2013 db -r--r--r-- 1 apache apache 2 2月 1 23:13 2013 format drwxr-xr-x 2 apache apache 4096 2月 1 23:13 2013 hooks drwxr-xr-x 2 apache apache 4096 2月 1 23:13 2013 locks [root@web03 ~]#
※svnadminには削除するサブコマンドが用意されていなため、削除する場合はrmコマンドを利用する。

■subversion.conf設定
[root@web03 ~]# vi /etc/httpd/conf.d/subversion.conf [root@web03 ~]# grep -v "^#\|^$" /etc/httpd/conf.d/subversion.conf LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so <Location /repos1> DAV svn SVNListParentPath on SVNParentPath /var/www/svn/repos1 AuthType Basic AuthName "subversion authentication" AuthBasicProvider ldap AuthzLDAPAuthoritative off AuthLDAPURL ldap://192.168.77.146:389/ou=unit01,dc=open_ldap,dc=com?cn?sub?(objectClass=person) Require valid-user </Location> <Location /repos2> DAV svn SVNListParentPath on SVNParentPath /var/www/svn/repos2 AuthType Basic AuthName "subversion authentication" AuthBasicProvider ldap AuthzLDAPAuthoritative off AuthLDAPURL ldap://192.168.77.146:389/ou=unit02,dc=open_ldap,dc=com?cn?sub?(objectClass=person) Require valid-user </Location> [root@web03 ~]# /etc/init.d/httpd restart
※表示の都合上タグを"<"と">"で記載。
※「SVNListParentPath on」とするとリポジトリ一覧を表示可能。



■ブラウザからアクセス
https://192.168.77.147/repos1/
Basic認証の画面が表示され、OpenLDAPに登録したユーザでアクセスできるはず。


その後、
https://192.168.77.147/repos2/
にアクセスすると再びBasic認証画面が表示される。



■TortoiseSVNおよび日本語パックをダウンロード
※以下の情報はググればいくらでも出てくるので説明を簡略化します。
http://sourceforge.jp/projects/tortoisesvn/releases/ からOSに適合するインストーラをダウンロードする。
TortoiseSVNをダウンロードしてインストールする。
日本語パックをダウンロードしてインストールする。

■TortoiseSVN設定
※以下の情報はググればいくらでも出てくるので説明を簡略化します。
⇒日本語化設定
デスクトップ上で右クリック⇒「TortoiseSVN」⇒「Settings」で「Settings」ウィンドウを開き、Language→日本語

⇒リポジトリチェックアウト(ダウンロード)
デスクトップ上で右クリック⇒「SVNチェックアウト」で「チェックアウト」ウィンドウを開き、
リポジトリのURL⇒リポジトリのURL(例→ https://192.168.77.147/repos1/project_A/)
チェックアウトディレクトリ⇒クライアントマシン上の任意のフォルダ
「OK」ボタン押下して、作成したリポジトリがダウンロードされることを確認

⇒リポジトリコミット(アップロード)
クライアント上のリポジトリ内に適当なフォルダやファイルを作成する
リポジトリ上で右クリック⇒「SVNコミット」で「コミット」ウィンドウを開き、
「全て選択/全て非選択」をチェックして「OK」ボタン押下
※ユーザー名/パスワード入力画面にて、OpenLDAPで登録したユーザー名/パスワードを入力。

いったんクライアント上のリポジトリを削除後再度リポジトリチェックアウトを実施し、
リポジトリコミットした内容が反映されていることを確認

2013年1月29日火曜日

ディレクトリ別Basic認証(OpenLDAP連携)


一度Basic認証が通ると本来アクセスさせたくない他のディレクトリにもアクセスできてしまう場合があります。
ディレクトリ別にアクセス可能なユーザ/グループを定義して、OpenLDAPを利用したBasic認証の設定手順をまとめます。

【OpenLDAPサーバ】
OS: CentOS 6.3(64-bit)
openldap-servers: 2.4.23-26.el6_3.2
hostname: openldap
IP: 192.168.77.146

【Webサーバ】
OS: CentOS 6.3(64-bit)
Apache: 2.2.15
hostname: web03
IP: 192.168.77.147


■アクセス制御
ユーザ:en2011001,en2011002 → unit01ディレクトリにアクセス可能
ユーザ:en2012001,en2012002 → unit02ディレクトリにアクセス可能

■OpenLDAPユーザ作成
Apache Directory Studio を利用してユーザをOpenLDAPに登録する。


■OpenLDAPサーバで作成状況確認
[root@openldap ~]# ldapsearch -x -h localhost -b "dc=open_ldap,dc=com" # extended LDIF # # LDAPv3 # base with scope subtree # filter: (objectclass=*) # requesting: ALL # # open_ldap.com dn: dc=open_ldap,dc=com dc: open_ldap o: open_ldap objectClass: dcObject objectClass: top objectClass: organization # unit01, open_ldap.com dn: ou=unit01,dc=open_ldap,dc=com ou: unit01 objectClass: organizationalUnit objectClass: top # en2011001, unit01, open_ldap.com dn: cn=en2011001,ou=unit01,dc=open_ldap,dc=com sn:: 56aP5rKi cn: en2011001 objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person objectClass: top givenName:: 6Kut5ZCJ userPassword:: e1NTSEF9UGN4eHNTakF4U0ltQXB2ZXdaZXNBeUp6cyt4TG5odHNBMXJNaFE9PQ= = mail: yukichi@open_ldap.com # en2011002, unit01, open_ldap.com dn: cn=en2011002,ou=unit01,dc=open_ldap,dc=com sn:: 5aSP55uu cn: en2011002 objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person objectClass: top userPassword:: e1NTSEF9S0dTTEdrWmt3VnN5SWhlbHRtV2dMb2NEV0JEY2R4clpzdWJiM2c9PQ= = givenName:: 5ryx55+z mail: soseki@open_ldap.com # unit02, open_ldap.com dn: ou=unit02,dc=open_ldap,dc=com ou: unit02 objectClass: organizationalUnit objectClass: top # en2012001, unit02, open_ldap.com dn: cn=en2012001,ou=unit02,dc=open_ldap,dc=com userPassword:: e1NTSEF9UGN4eHNTakF4U0ltQXB2ZXdaZXNBeUp6cyt4TG5odHNBMXJNaFE9PQ= = objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person objectClass: top cn: en2012001 sn:: 6YeO5Y+j givenName:: 6Iux5LiW mail: hideyo@open_ldap.com # en2012002, unit02, open_ldap.com dn: cn=en2012002,ou=unit02,dc=open_ldap,dc=com userPassword:: e1NTSEF9S0dTTEdrWmt3VnN5SWhlbHRtV2dMb2NEV0JEY2R4clpzdWJiM2c9PQ= = objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person objectClass: top cn: en2012002 sn:: 5qiL5Y+j givenName:: 5LiA6JGJ mail: ichiyo@open_ldap.com # search result search: 2 result: 0 Success # numResponses: 8 # numEntries: 7 [root@openldap ~]#

■WebサーバBasic認証設定
[root@web03 ~]# vi /etc/httpd/conf/httpd.conf [root@web03 ~]# tail -17 /etc/httpd/conf/httpd.conf <Directory "/var/www/html/unit01/"> AuthName "UserID/Password" AuthType Basic AuthBasicProvider ldap AuthzLDAPAuthoritative off AuthLDAPURL ldap://192.168.77.146:389/ou=unit01,dc=open_ldap,dc=com?cn?sub?(objectClass=person) Require valid-user </Directory> <Directory "/var/www/html/unit02/"> AuthName "UserID/Password" AuthType Basic AuthBasicProvider ldap AuthzLDAPAuthoritative off AuthLDAPURL ldap://192.168.77.146:389/ou=unit02,dc=open_ldap,dc=com?cn?sub?(objectClass=person) Require valid-user </Directory> [root@web03 ~]# /etc/init.d/httpd restart
※表示の都合上タグを"<"と">"で記載。

■ブラウザで確認
en2011002 で http://192.168.77.147/unit01/ にアクセスしてみる。


アクセス可能。

en2011002 で http://192.168.77.147/unit02/ にアクセスしてみる。


アクセス不可能。(ディレクトリ別の制御ができている)

en2012001 で http://192.168.77.147/unit02/ にアクセスしてみる。


アクセス可能。

■その時のWebサーバのログ
[root@web03 ~]# tail -f /var/log/httpd/access_log --- 192.168.77.21 - - [28/Jan/2013:01:32:29 +0900] "GET /unit01/ HTTP/1.1" 401 481 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)" 192.168.77.21 - en2011002 [28/Jan/2013:01:33:49 +0900] "GET /unit01/ HTTP/1.1" 200 235 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)" 192.168.77.21 - - [28/Jan/2013:01:33:49 +0900] "GET /favicon.ico HTTP/1.1" 404 289 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)" 192.168.77.21 - - [28/Jan/2013:01:42:25 +0900] "GET /unit02/ HTTP/1.1" 401 481 "http://192.168.77.147/unit01/" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)" 192.168.77.21 - en2011002 [28/Jan/2013:01:42:25 +0900] "GET /unit02/ HTTP/1.1" 401 481 "http://192.168.77.147/unit01/" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)" 192.168.77.21 - en2011002 [28/Jan/2013:01:42:31 +0900] "GET /unit02/ HTTP/1.1" 401 481 "http://192.168.77.147/unit01/" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)" 192.168.77.21 - en2011002 [28/Jan/2013:01:42:34 +0900] "GET /unit02/ HTTP/1.1" 401 481 "http://192.168.77.147/unit01/" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)" 192.168.77.21 - en2011002 [28/Jan/2013:01:42:37 +0900] "GET /unit02/ HTTP/1.1" 401 481 "http://192.168.77.147/unit01/" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)" 192.168.77.21 - - [28/Jan/2013:01:43:54 +0900] "GET /unit02/ HTTP/1.1" 401 481 "http://192.168.77.147/unit01/" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)" 192.168.77.21 - en2011002 [28/Jan/2013:01:43:54 +0900] "GET /unit02/ HTTP/1.1" 401 481 "http://192.168.77.147/unit01/" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)" 192.168.77.21 - en2012001 [28/Jan/2013:01:44:51 +0900] "GET /unit02/ HTTP/1.1" 200 235 "http://192.168.77.147/unit01/" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)"


2013年1月28日月曜日

mail属性を使用するためにinetOrgPersonでユーザ作成

Apache Directory Studio を利用してOpenLDAPに登録したユーザにmail属性を追加。→失敗。
objectClassに「inetOrgPerson」を指定すればmail属性を追加可能。
ユーザを再作成して、再びBasic認証できるまでの手順をまとめます。

【OpenLDAPサーバ】
OS: CentOS 6.3(64-bit)
openldap-servers: 2.4.23-26.el6_3.2
hostname: openldap
IP: 192.168.77.146

【Webサーバ】
OS: CentOS 6.3(64-bit)
Apache: 2.2.15
hostname: web03
IP: 192.168.77.147


■mail属性追加
Apache Directory Studioで前回作成したユーザにmail属性追加

警告発生!そのまま進めてみるも・・・。

エラー発生!!現在使用しているobjectClass(account、posixAccount)にはmail属性を定義できないようだ。
っということで、このユーザ(en2011001)はいったん削除。

■mail属性を使用するためにobjectClassにinetOrgPersonを指定してユーザ再作成

objectClassにinetOrgPersonを指定するとその他のobjectClassは自動的に追加される。




■OpenLDAPサーバで作成したユーザを確認
[root@openldap ~]# ldapsearch -x -h localhost -b "cn=en2011001,ou=unit01,dc=open_ldap,dc=com" # extended LDIF # # LDAPv3 # base with scope subtree # filter: (objectclass=*) # requesting: ALL # # en2011001, unit01, open_ldap.com dn: cn=en2011001,ou=unit01,dc=open_ldap,dc=com sn:: 56aP5rKi cn: en2011001 objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person objectClass: top givenName:: 6Kut5ZCJ userPassword:: e1NTSEF9UGN4eHNTakF4U0ltQXB2ZXdaZXNBeUp6cyt4TG5odHNBMXJNaFE9PQ= = mail: yukichi@open_ldap.com # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1 [root@openldap ~]#

■WebサーバBasic認証設定変更
使用するobjectClassがaccount→personに変更、ユーザIDがuid→snに変更となるためhttpd.confを修正する。
[root@web03 ~]# vi /etc/httpd/conf/httpd.conf [root@web03 ~]# tail -8 /etc/httpd/conf/httpd.conf <Directory "/var/www/html/unit01/"> AuthName "UserID/Password" AuthType Basic AuthBasicProvider ldap AuthzLDAPAuthoritative off AuthLDAPURL ldap://192.168.77.146:389/ou=unit01,dc=open_ldap,dc=com?cn?sub?(objectClass=person) Require valid-user </Directory> [root@web03 ~]# /etc/init.d/httpd restart
※表示の都合上タグを"<"と">"で記載。

■ブラウザで確認
http://192.168.77.147/unit01/



2013年1月27日日曜日

ApacheのBasic認証にOpenLDAPを利用


Apache Directory Studio を利用してユーザをOpenLDAPに登録します。
OpenLDAPに登録されたユーザでApacheのBasic認証を行えるようにします。
ディレクトリ別の認証とか難しいことはまずは無視します。

【OpenLDAPサーバ】
OS: CentOS 6.3(64-bit)
openldap-servers: 2.4.23-26.el6_3.2
hostname: openldap
IP: 192.168.77.146

【Webサーバ】
OS: CentOS 6.3(64-bit)
Apache: 2.2.15
hostname: web03
IP: 192.168.77.147


■ApacheにLDAPモジュールがインストールされているか確認

[root@web03 ~]# grep ldap /etc/httpd/conf/httpd.conf LoadModule ldap_module modules/mod_ldap.so LoadModule authnz_ldap_module modules/mod_authnz_ldap.so [root@web03 ~]#
※ mod_authnz_ldap:Apache-2.2系でLDAP認証を実現する
※ mod_ldap:LDAPサーバとの接続プールやキャッシュ用に使用される(mod_authnz_ldapから利用される)

■Apache Directory Studio にてエントリー作成

ベースDN: dc=open_ldap,dc=com
Organization Unit(部署): unit01
ユーザID: en2011001
※ユーザIDの文字列はEmployee Numberの略のつもり。2011年度入社001番みたいな。

⇒ベースDN作成
objectClassは「dcObject」と「organization」を設定
※objectClassの「top」は自動的に追加される。







⇒Organization Unit(部署)作成
objectClassは「organizationalUnit」を設定







⇒ユーザ作成
objectClassは「account」と「posixAccount」を設定
※作成手順はobjectClassが異なるだけでouとほぼ同等のため省略


⇒ユーザにパスワードを設定する




■OpenLDAPサーバで作成状況確認

[root@openldap ~]# ldapsearch -x -h localhost -b "dc=open_ldap,dc=com" # extended LDIF # # LDAPv3 # base with scope subtree # filter: (objectclass=*) # requesting: ALL # # open_ldap.com dn: dc=open_ldap,dc=com dc: open_ldap o: open_ldap objectClass: dcObject objectClass: top objectClass: organization # unit01, open_ldap.com dn: ou=unit01,dc=open_ldap,dc=com ou: unit01 objectClass: organizationalUnit objectClass: top # en2011001, unit01, open_ldap.com dn: uid=en2011001,ou=unit01,dc=open_ldap,dc=com uid: en2011001 gidNumber: 1000 cn: en2011001 homeDirectory: /home/en2011001 objectClass: account objectClass: top objectClass: posixAccount uidNumber: 1001 userPassword:: e1NTSEF9RkdNenFHdzJlalExUFlYUHRHUllxQmtFWnJUNjJ5azltR20yRXc9PQ= = # search result search: 2 result: 0 Success # numResponses: 4 # numEntries: 3 [root@openldap ~]#

■Webサーバ確認用ページ準備

[root@web03 ~]# mkdir /var/www/html/unit01 [root@web03 ~]# vi /var/www/html/unit01/index.html [root@web03 ~]# cat /var/www/html/unit01/index.html <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body bgcolor="#dddddd"> <h2>unit01へログインしました。</h2> </body> </html> [root@web03 ~]#
※表示の都合上タグを"<"と">"で記載。(以下同様)

■WebサーバBasic認証設定

⇒httpd.confの最下行に下記を追加
[root@web03 ~]# tail -8 /etc/httpd/conf/httpd.conf <Directory "/var/www/html/unit01/"> AuthName "UserID/Password" AuthType Basic AuthBasicProvider ldap AuthzLDAPAuthoritative off AuthLDAPURL ldap://192.168.77.146:389/ou=unit01,dc=open_ldap,dc=com?uid?sub?(objectClass=account) Require valid-user </Directory> [root@web03 ~]#
※「AuthzLDAPAuthoritative off」→LDAP認証で失敗しても他の認証サービスを利用しない。
※ポート番号(389)の指定は省略可能。

⇒apache再起動
[root@web03 ~]# /etc/init.d/httpd restart

■ブラウザで確認

http://192.168.77.147/unit01/


⇒その時のWebサーバのログ
[root@web03 ~]# tail -f /var/log/httpd/access_log --- 192.168.77.21 - - [26/Jan/2013:04:04:21 +0900] "GET /unit01/ HTTP/1.1" 401 481 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)" 192.168.77.21 - en2011001 [26/Jan/2013:04:06:00 +0900] "GET /unit01/ HTTP/1.1" 200 187 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)" 192.168.77.21 - - [26/Jan/2013:04:06:01 +0900] "GET /favicon.ico HTTP/1.1" 404 289 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)"


最後までお読みいただきありがとうございます。この情報が何かのお役にたてれば幸いです。m(_ _)m