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

2014年6月22日日曜日

tshark(wiresharkのCUI)でBasic認証の安全性(危険性?)を検証

Basic認証が安全ではないと言われる所以をパケットキャプチャにより実証したい気分な方へ
tsharkをインストールしてパケットキャプチャする手順をお届けします。
Digest認証についてもどの程度安全性が確保されているのかも確認します。
Basic認証/Digest認証の設定方法は前回記事をどうぞ。

OS: CentOS 6.5 (64-bit)
TShark: 1.8.10


■tsharkインストール
CUIだけでいいので、wireshark-gnomeはインストールせず、tsharkだけインストールしたい。
[root@centos65 ~]# yum install tshark
(中略)
No package tshark available.
Error: Nothing to do
[root@cent63 ~]#
無いらしい。wiresharkでインストールすればGUIはインストールされないとのこと。


■wiresharkインストール
[root@centos65 ~]# yum install wireshark
==========================================================================
 Package            Arch          Version             Repository     Size
==========================================================================
Installing:
 wireshark          x86_64        1.8.10-7.el6_5      updates        11 M
Installing for dependencies:
 libsmi             x86_64        0.4.8-4.el6         base          2.4 M

Transaction Summary
==========================================================================
Install       2 Package(s)

## version確認
[root@centos65 ~]# tshark -v
TShark 1.8.10 (SVN Rev Unknown from unknown)

Copyright 1998-2013 Gerald Combs  and contributors.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Compiled (64-bit) with GLib 2.26.1, with libpcap, with libz 1.2.3, without POSIX
capabilities, with SMI 0.4.8, without c-ares, without ADNS, without Lua, without
Python, with GnuTLS 2.8.5, with Gcrypt 1.4.5, with MIT Kerberos, without GeoIP.

Running on Linux 2.6.32-431.el6.x86_64, with locale ja_JP.UTF-8, with libpcap
version 1.4.0, with libz 1.2.3.

Built using gcc 4.4.7 20120313 (Red Hat 4.4.7-4).
[root@centos65 ~]#


■192.168.77.149宛てのhttp通信だけをキャプチャ
[root@centos65 ~]# tshark -l host 192.168.77.149 and port http
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
  0.000000 192.168.77.1 -> 192.168.77.149 TCP 74 45248 > http [SYN] Seq=0 Win=5840 Len=0 MSS=1460 SACK_PERM=1 TSval=587734266 TSecr=0 WS=4
  0.000055 192.168.77.149 -> 192.168.77.1 TCP 74 http > 45248 [SYN, ACK] Seq=0 Ack=1 Win=14480 Len=0 MSS=1460 SACK_PERM=1 TSval=13298595 TSecr=587734266 WS=128
  0.000307 192.168.77.1 -> 192.168.77.149 TCP 66 45248 > http [ACK] Seq=1 Ack=1 Win=5840 Len=0 TSval=587734266 TSecr=13298595
  0.000338 192.168.77.1 -> 192.168.77.149 TCP 66 45248 > http [FIN, ACK] Seq=1 Ack=1 Win=5840 Len=0 TSval=587734266 TSecr=13298595
  0.000531 192.168.77.149 -> 192.168.77.1 TCP 66 http > 45248 [ACK] Seq=1 Ack=2 Win=14592 Len=0 TSval=13298596 TSecr=587734266
  0.000881 192.168.77.149 -> 192.168.77.1 TCP 66 http > 45248 [FIN, ACK] Seq=1 Ack=2 Win=14592 Len=0 TSval=13298596 TSecr=587734266
  0.001063 192.168.77.1 -> 192.168.77.149 TCP 66 45248 > http [ACK] Seq=2 Ack=2 Win=5840 Len=0 TSval=587734266 TSecr=13298596
  4.101061 192.168.77.1 -> 192.168.77.149 TCP 74 45252 > http [SYN] Seq=0 Win=5840 Len=0 MSS=1460 SACK_PERM=1 TSval=587734676 TSecr=0 WS=4
  4.101095 192.168.77.149 -> 192.168.77.1 TCP 74 http > 45252 [SYN, ACK] Seq=0 Ack=1 Win=14480 Len=0 MSS=1460 SACK_PERM=1 TSval=13302696 TSecr=587734676 WS=128
  4.101334 192.168.77.1 -> 192.168.77.149 TCP 66 45252 > http [ACK] Seq=1 Ack=1 Win=5840 Len=0 TSval=587734676 TSecr=13302696
  4.101372 192.168.77.1 -> 192.168.77.149 TCP 66 45252 > http [FIN, ACK] Seq=1 Ack=1 Win=5840 Len=0 TSval=587734676 TSecr=13302696
  4.101532 192.168.77.149 -> 192.168.77.1 TCP 66 http > 45252 [ACK] Seq=1 Ack=2 Win=14592 Len=0 TSval=13302697 TSecr=587734676
  4.101720 192.168.77.149 -> 192.168.77.1 TCP 66 http > 45252 [FIN, ACK] Seq=1 Ack=2 Win=14592 Len=0 TSval=13302697 TSecr=587734676
  4.101931 192.168.77.1 -> 192.168.77.149 TCP 66 45252 > http [ACK] Seq=2 Ack=2 Win=5840 Len=0 TSval=587734676 TSecr=13302697
^C14 packets captured
[root@centos65 ~]#
Router(192.168.77.1)からのリクエストに対して応答しているパケットをキャプチャできている。
[root@centos65 ~]# tshark -l host 192.168.77.150 and port http
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
^C0 packets captured
[root@centos65 ~]#
自サーバ(192.168.77.149)へ来るアクセスまたは、自サーバから出るアクセスについてパケットキャプチャできるが、
同一セグメントでも他サーバから他サーバへのパケットはキャプチャできない。


■Basic認証とDigest認証のパケット確認
[root@centos65 ~]# tshark -i eth0 port http -V -w packet.log
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
(以下すごい量のログが出るので省略)
上記でキャプチャしている間にPC(192.168.77.2)のブラウザから下記URLにアクセス。
あえて、ID/Passを間違えたうえでログインしてみる。

http://192.168.77.149/basic/
1回目: test/password でログイン失敗。
2回目: basic/password でログイン失敗。
3回目: basic/secret でログイン成功。

http://192.168.77.149/digest/
1回目: test/password でログイン失敗。
2回目: basic/serect でログイン失敗。
3回目: digest/secret でログイン成功。

## ログの確認
[root@centos65 ~]# tshark -r packet.log | head
Running as user "root" and group "root". This could be dangerous.
  1 0.000000000 192.168.77.2 -> 192.168.77.149 TCP 66 51701 > http [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=4 SACK_PERM=1
  2 0.000083000 192.168.77.149 -> 192.168.77.2 TCP 66 http > 51701 [SYN, ACK] Seq=0 Ack=1 Win=14600 Len=0 MSS=1460 SACK_PERM=1 WS=128
  3 0.000397000 192.168.77.2 -> 192.168.77.149 TCP 60 51701 > http [ACK] Seq=1 Ack=1 Win=65700 Len=0
  4 0.000568000 192.168.77.2 -> 192.168.77.149 HTTP 317 GET /basic/ HTTP/1.1
  5 0.000621000 192.168.77.149 -> 192.168.77.2 TCP 54 http > 51701 [ACK] Seq=1 Ack=264 Win=15744 Len=0
  6 0.001667000 192.168.77.149 -> 192.168.77.2 HTTP 782 HTTP/1.1 401 Authorization Required  (text/html)
  7 0.001905000 192.168.77.2 -> 192.168.77.149 TCP 60 51701 > http [ACK] Seq=264 Ack=729 Win=64972 Len=0
  8 0.002000000 192.168.77.149 -> 192.168.77.2 TCP 54 http > 51701 [FIN, ACK] Seq=729 Ack=264 Win=15744 Len=0
  9 0.002114000 192.168.77.2 -> 192.168.77.149 TCP 60 51701 > http [FIN, ACK] Seq=264 Ack=729 Win=64972 Len=0
 10 0.002145000 192.168.77.149 -> 192.168.77.2 TCP 54 http > 51701 [ACK] Seq=730 Ack=265 Win=15744 Len=0
[root@centos65 ~]#
※packet.logファイルはバイナリ型のため、テキストエディタでは開けない。

## ログを詳細確認してパスワードを抽出
[root@centos65 ~]# tshark -r packet.log -V | grep -A 1 "Authorization:"
Running as user "root" and group "root". This could be dangerous.
    Authorization: Basic dGVzdDpwYXNzd29yZA==\r\n
        Credentials: test:password
--
    Authorization: Basic YmFzaWM6cGFzc3dvcmQ=\r\n
        Credentials: basic:password
--
    Authorization: Basic YmFzaWM6c2VjcmV0\r\n
        Credentials: basic:secret
--
    [truncated] Authorization: Digest username="test",realm="DigestAuth",nonce="EAlztCj+BAA=758b7f794981c8331f415d6704fc2a8bb77d83e3",uri="/digest/",cnonce="4430d9ffdb985f4fabaadc433807e111",nc=00000001,algorithm=MD5,response="70f240bec66c111b
    Connection: Keep-Alive\r\n
--
    [truncated] Authorization: Digest username="basic",realm="DigestAuth",nonce="RCu8tCj+BAA=0b496b71af1ce10978af063796f7316a88b0599a",uri="/digest/",cnonce="8cdc61e16b1ed3e79e513fa766a39a14",nc=00000001,algorithm=MD5,response="60a69776af7efe3
    \r\n
--
    [truncated] Authorization: Digest username="digest",realm="DigestAuth",nonce="gkCEtSj+BAA=297f68d0b65f9c6a14eddd0898edd59f1b560a1b",uri="/digest/",cnonce="09fab2b8fd4aae62d30d94e868a5719c",nc=00000001,algorithm=MD5,response="fa704ad0f10213
    Connection: Keep-Alive\r\n
[root@centos65 ~]#
Basic認証は入力されたパスワードが丸見え…。
Digest認証はパスワードが暗号化されているため少しはマシかもしれません。
公開Webサーバに不正にtsharkが仕掛けられないことを祈ります…。


こちらの情報が何かのお役に立てましたら幸いです。サイト継続ご協力のほどお願い致します。m(_ _)m

2014年6月21日土曜日

Basic認証とDigest認証の比較

Basic認証とDigest認証を比較するために環境を作成する手順をまとめます。
パケットキャプチャによりパスワードが取得できるかできないかについては
こちらの記事でまとめたいと思います。


■安全性
Basic認証とは、ユーザ名とパスワードをBase64でエンコードしてAuthorizationヘッダを付加してサーバにリクエストする方式です。
base64エンコードは暗号化ではなくただの符号化ですので、簡単に復号できてしまいます。
一方、Digest認証はユーザ名と暗号化したパスワードを利用するため、ネットワーク上を生パスワードが流れることはありません。
サーバ側に生パスワードを保存する必要がないのもポイントです。盗聴に対してBasic認証よりかはマシと考えられます。
Digest認証はMD5などの脆弱なアルゴリズムを使用します。SSLを使用した通信の暗号化の方が、資格証明の傍受を防ぐには好ましい方法です。


■認証設定ディレクトリ準備
[root@centos65 ~]# mkdir /var/www/html/basic
[root@centos65 ~]# mkdir /var/www/html/digest
[root@centos65 ~]# echo "<h1>/var/www/html/basic/index.html</h1>" > /var/www/html/basic/index.html
[root@centos65 ~]# echo "<h1>/var/www/html/digest/index.html</h1>" > /var/www/html/digest/index.html
[root@centos65 ~]#


■htpasswdファイル準備
## Basic認証用
[root@centos65 ~]# mkdir /etc/httpd/htpasswd
[root@centos65 ~]# htpasswd -bc /etc/httpd/htpasswd/basic.htpasswd basic secret
Adding password for user basic
[root@centos65 ~]# cat /etc/httpd/htpasswd/basic.htpasswd
basic:TrttZUUoY6iEE
[root@centos65 ~]#
※"-b"はパスワードを指定するオプション。

## Digest認証用
[root@centos65 ~]# htdigest -c /etc/httpd/htpasswd/digest.htpasswd DigestAuth digest
Adding password for digest in realm DigestAuth.
New password: ←secret
Re-type new password:
[root@centos65 ~]# cat /etc/httpd/htpasswd/digest.htpasswd
digest:DigestAuth:9d5ce11731e1e06d88aaa030476b5447
[root@centos65 ~]#
realm(領域名)を指定する必要がある。今回は"DigestAuth"とした。


■認証設定ファイル準備
[root@centos65 ~]# vi /etc/httpd/conf.d/auth.conf
[root@centos65 ~]# cat /etc/httpd/conf.d/auth.conf
## for Basic Authentication
<Directory "/var/www/html/basic">
    AuthType Basic
    AuthName "Basic Authentication"
    AuthUserFile /etc/httpd/htpasswd/basic.htpasswd
    Require valid-user
</Directory>

## for Digest Authentication
<Directory "/var/www/html/digest">
    AuthType Digest
    AuthName "DigestAuth"
    AuthUserFile /etc/httpd/htpasswd/digest.htpasswd
    Require valid-user
</Directory>
[root@centos65 ~]#
Digest認証はAuthNameにrealmで指定した値を設定する必要がある。


■httpd.confにモジュールがロードされているか確認
[root@centos65 ~]# grep -e auth_basic -e auth_digest /etc/httpd/conf/httpd.conf
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
[root@centos65 ~]#

## httpd再起動
[root@centos65 ~]# /etc/init.d/httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]
[root@centos65 ~]#


■認証確認
## Basic認証
http://192.168.77.149/basic/


## Digest認証
http://192.168.77.149/digest/

Basic認証と同じような手順および使い勝手であるので、パスワードをとりあえず暗号化できるDigest認証の方がお勧めかも。


この情報が何かのお役にたてれば幸いです。m(_ _)m

2014年2月27日木曜日

複数の.htaccessと.htpasswdによるBasic認証

複数の.htaccessと.htpasswdを使用してWebサイトの複数個所にBasic認証を設定する手順です。
どこか1箇所のBasic認証を通過したユーザが他の個所に設定したBasic認証を認証なしで表示でき
ないようにアクセス制御できることを考慮しています。

.htpasswdはWebサイト管理者が管理する想定(CMSでは管理せず、変更は申請制)とし、
.htaccessはWebコンテンツの一部として扱う想定(CMS等で管理可能)とする。

OS: CentOS 6.4(64-bit)
Apache: 2.2.15
hostname: dcf-web
ip: 192.168.3.246


■.htpasswd作成
user10,user11 → ldap1.htpasswdで管理
user20,user21 → ldap2.htpasswdで管理
※ .htpasswdファイルはなるべくDocmentRoot以外のブラウザから直接アクセスできない場所に配置する。
[root@dcf-web ~]# mkdir /etc/httpd/htpasswd/
[root@dcf-web ~]# htpasswd -bc /etc/httpd/htpasswd/ldap1.htpasswd user10 10user
Adding password for user user10
[root@dcf-web ~]# htpasswd -b /etc/httpd/htpasswd/ldap1.htpasswd user11 11user
Adding password for user user11
[root@dcf-web ~]# cat /etc/httpd/htpasswd/ldap1.htpasswd
user10:iYP5xGnK32WPU
user11:lQXWHpaPkcB2c
[root@dcf-web ~]# htpasswd -bc /etc/httpd/htpasswd/ldap2.htpasswd user20 20user
Adding password for user user20
[root@dcf-web ~]# htpasswd -b /etc/httpd/htpasswd/ldap2.htpasswd user21 21user
Adding password for user user21
[root@dcf-web ~]# cat /etc/httpd/htpasswd/ldap2.htpasswd
user20:JQ0GxC.9s6Ips
user21:cwhMtpgo9dJOg
[root@dcf-web ~]#
htpasswd コマンドのオプション
-b: パスワードを直接指定
-c: .htpasswdを新規作成

■httpd.confに.htaccess使用許可設定
最下行に下記のような内容を追記する。
[root@dcf-web ~]# tail -6 /etc/httpd/conf/httpd.conf
<Directory "/var/www/html/ldap1">
    AllowOverride All
</Directory>
<Directory "/var/www/html/ldap2">
    AllowOverride All
</Directory>
[root@dcf-web ~]#
※ 上位階層のディレクティブに対してAllowOverride Allを設定するとWebサーバのパフォーマンスが落ちる可能性があるので注意。

■.htaccess作成
[root@dcf-web ~]# cat /var/www/html/ldap1/.htaccess
AuthType Basic
AuthName "Basic Authentication Area"
AuthUserFile /etc/httpd/htpasswd/ldap1.htpasswd
AuthGroupFile /dev/null
require valid-user
ErrorDocument 401 /401.html
[root@dcf-web ~]# cat /var/www/html/ldap2/.htaccess
AuthType Basic
AuthName "Basic Authentication Area"
AuthUserFile /etc/httpd/htpasswd/ldap2.htpasswd
AuthGroupFile /dev/null
require valid-user
ErrorDocument 401 /401.html
[root@dcf-web ~]#
"401"は認証エラー時のステータスコード。
認証エラーページとして /var/www/html/401.html を準備しておく。

■動作確認
                            user10 user11 user20 user21
http://192.168.3.246/ldap1/    ○      ○      ×      ×
http://192.168.3.246/ldap2/    ×      ×      ○      ○

## access_log
http://192.168.3.246/ldap1/ に user11 でアクセスしたときのログ。
[root@dcf-web ~]# tail -f /var/log/httpd/access_log
192.168.3.13 - - [21/Feb/2014:18:57:15 +0900] "GET /ldap1/ HTTP/1.1" 401 16262 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)"
192.168.3.13 - user11 [21/Feb/2014:18:57:20 +0900] "GET /ldap1/ HTTP/1.1" 200 16109 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)"

こちらの情報が何かのお役に立てましたら幸いです。サイト継続ご協力のほどお願い申し上げます。m(_ _)m

2013年3月9日土曜日

SubversionのBasic認証にActive Directoryを利用


SubversionのBasic認証にActive Directoryを利用する方法です。
Active Directoryに登録しているユーザの詳細は前回記事を参照ください。

【ADサーバ】
OS: Windows Server 2008 R2(64-bit)
Domain Name: kuitan.net
IP: 192.168.77.125
⇒AD登録ユーザ:
 dn: CN=aduser01,CN=Users,DC=kuitan,DC=net
 dn: CN=puser01,OU=person,DC=kuitan,DC=net

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


■SVNリポジトリ作成
[root@web03 ~]# mkdir /opt/svn [root@web03 ~]# mkdir /opt/svn/users [root@web03 ~]# mkdir /opt/svn/person [root@web03 ~]# svnadmin create /opt/svn/users/project01 [root@web03 ~]# svnadmin create /opt/svn/users/project02 [root@web03 ~]# svnadmin create /opt/svn/person/project03 [root@web03 ~]# svnadmin create /opt/svn/person/project04 [root@web03 ~]# chown -R apache: /opt/svn

■subversion.conf追加設定
[root@web03 ~]# vi /etc/httpd/conf.d/subversion.conf [root@web03 ~]# tail -27 /etc/httpd/conf.d/subversion.conf <Location /users> DAV svn SVNListParentPath on SVNParentPath /opt/svn/users AuthType Basic AuthName "Subversion Authentication Users" AuthBasicProvider ldap AuthzLDAPAuthoritative off AuthLDAPURL ldap://192.168.77.125:389/cn=users,dc=kuitan,dc=net?sAMAccountName?sub?(objectClass=*) AuthLDAPBindDN Administrator@kuitan.net AuthLDAPBindPassword xxxxxxxx Require valid-user </Location> <Location /person> DAV svn SVNListParentPath on SVNParentPath /opt/svn/person AuthType Basic AuthName "Subversion Authentication Person" AuthBasicProvider ldap AuthzLDAPAuthoritative off AuthLDAPURL ldap://192.168.77.125:389/ou=person,dc=kuitan,dc=net?sAMAccountName?sub?(objectClass=*) AuthLDAPBindDN Administrator@kuitan.net AuthLDAPBindPassword xxxxxxxx Require valid-user </Location> [root@web03 ~]# /etc/init.d/httpd restart
※表示の都合上タグを"<"と">"で記載。
※<Location /users>の設定ではcn=usersに属するユーザがアクセスできるリポジトリを定義している。
※<Location /person>の設定ではou=personに属するユーザがアクセスできるリポジトリを定義している。

■ブラウザからアクセス
https://192.168.77.147/users/
Basic認証の画面が表示され、ADに登録したユーザ(cn=usersに属するユーザ)でアクセスする。



その後、https://192.168.77.147/person/にアクセスすると再びBasic認証を要求される。
ou=personに属するユーザでアクセスする。


※ちなみに、上記を行うだけならWebサーバ側にopenldap-clientsパッケージは不要。

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