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

2013年1月26日土曜日

Apache Directory Studio インストール手順



AWS上のWindows Server に Apache Directory Studioをインストールして
先日作成したLinux上のOpenLDAPと接続する手順です。
いずれアカウント情報を作成し、Basic認証として利用したいとか考えています。
まぁ、そのうち…。

■構成情報
・OS: Windows_Server-2008-R2_SP1-Japanese-64Bit-Base-2012.12.12
・Apache Directory Studio: win32-x86_64-2.0.0.v20120224


■あらかじめjava(64-bit版)をインストール
http://www.java.com/ja/download/manual.jsp
上記からインストーラをダウンロード。
今回はインストーラ(jre-7u11-windows-x64.exe)を使用した。
※特に迷うところはないので画像は省略。

■インストーラダウンロード
http://directory.apache.org/studio/download/download-windows.html
上記から ApacheDirectoryStudio-win32-x86_64-2.0.0.v20120224.exe (約130MB)をダウンロード

■インストール実行
画面キャプチャを載せてみましたが、ほとんどNextボタンを押すだけです。
※Javaのパスが自動表示されない場合は32bit版のJavaがインストールされている可能性あり。

※Show datailsボタンをクリックすると上記のようにインストール結果が表示される。

これでインストール完了!!

■起動
スタートメニューに Apache Directory Studio が登録されているはず。
メニュー > LDAP > New Connection...

Connection name は適当でかまいません。とりあえずOpenLDAPサーバのホスト名にすれば管理しやすい?

Bind DN or user にはOpenLDApサーバの /etc/openldap/slapd.conf の
rootdn に設定した値を入力。
Bind passward には同じく、rootpw に設定した値を入力。

設定に問題がなければ上記のように接続できます。
※AWSの場合はセキュリティーグループの許可設定等忘れずに。

2013年1月22日火曜日

AWS(EC2) Amazon Linux に OpenLDAP インストール


Amazon Linux にOpenLDAPサーバをインストールする手順です。
今回はただインストールして起動するまでです。
次回以降でApache Directory Studioからの接続設定も記載する予定です。

■構成情報
・OS: Amazon Linux AMI release 2012.09(64bit)
・OpenLDAP: 2.4.23-26.16.amzn1(yum install)


■インストール済みパッケージ確認

[root@ip-10-77-30-12 ~]# yum list installed '*ldap*' Loaded plugins: priorities, security, update-motd, upgrade-helper amzn-main | 2.1 kB 00:00 amzn-updates | 2.3 kB 00:00 Installed Packages openldap.x86_64 2.4.23-26.16.amzn1 installed [root@ip-10-77-30-12 ~]#

■openldapサーバ、クライアントパッケージインストール

[root@ip-10-77-30-12 ~]# yum -y install openldap-servers.x86_64 openldap-clients.x86_64 (中略) ========================================================================== Package Arch Version Repository Size ========================================================================== Installing: openldap-clients x86_64 2.4.23-26.17.amzn1 amzn-main 338 k openldap-servers x86_64 2.4.23-26.17.amzn1 amzn-main 2.2 M Installing for dependencies: libtool-ltdl x86_64 2.2.10-4.6.2.12.amzn1 amzn-main 47 k make x86_64 1:3.81-20.7.amzn1 amzn-main 487 k portreserve x86_64 0.0.4-9.5.amzn1 amzn-main 23 k Updating for dependencies: openldap x86_64 2.4.23-26.17.amzn1 amzn-main 382 k Transaction Summary ========================================================================= Install 5 Package(s) Upgrade 1 Package(s) (以下省略)

■オンライン設定変更できる設定データベースは利用しない。(slapd.dを削除し、slapd.confで設定)

[root@ip-10-77-30-12 ~]# mv /var/lib/ldap /var/lib/ldap.org [root@ip-10-77-30-12 ~]# mkdir /var/lib/ldap [root@ip-10-77-30-12 ~]# chown ldap: /var/lib/ldap [root@ip-10-77-30-12 ~]# chmod 700 /var/lib/ldap [root@ip-10-77-30-12 ~]# mv /etc/openldap/slapd.d /etc/openldap/slapd.d.org [root@ip-10-77-30-12 ~]# cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf

■slapd.confを修正

[root@ip-10-77-30-12 ~]# vi /etc/openldap/slapd.conf [root@ip-10-77-30-12 ~]# egrep "^suffix|^rootdn|^rootpw" /etc/openldap/slapd.conf suffix "dc=open_ldap,dc=com" rootdn "cn=Manager,dc=open_ldap,dc=com" rootpw secret [root@ip-10-77-30-12 ~]#

■接続確認

[root@ip-10-77-30-12 ~]# /etc/init.d/slapd start Starting slapd: [ OK ] [root@ip-10-77-30-12 ~]# ldapsearch -x -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@ip-10-77-30-12 ~]#
接続成功!!

この情報が何かのお役に立てましたら幸いです。サイト継続にご協力いただけるとありがたいです。m(_ _)m

2013年1月10日木曜日

AWS(EC2) CentOS 6.3 コンソールのコマンドプロンプトの表示形式変更


AWS(EC2)のCentOSは生成元のAMIによってはコマンドプロンプトの表示形式が
簡素化(?)されているものがあります。
いつもの表示形式:[ユーザ@ホスト名 ディレクトリ]$ じゃないと落ち着かない方に贈る
表示形式変更方法です。ってか、ただの防備録です。

■構成情報
・OS:      CentOS6.3(64bit)


■.bash_profileに環境変数PS1を定義
-bash-4.1# hostname centos63 -bash-4.1# vi .bash_profile -bash-4.1# tail -1 .bash_profile export PS1="[\u@\h \W]\\$ " -bash-4.1#

■確認
-bash-4.1# su - [root@centos63 ~]#
以上。終了。小ネタすぎてすみません。

■主なプロンプト変数
上記だけだとあんまりなんで、主なプロンプト変数を併記しておきます。
\n 改行
\d "曜日,月,日"の書式による日付
\u ユーザ名
\h ホスト名
\s シェル名
\w 現在のカレントディレクトリ
\t 「HH:MM:SS」形式の時間表示
\# 現在入力するコマンドの「コマンド番号」
\! 現在入力するコマンドの「ヒストリ番号」