2010年9月9日木曜日

ストレージサーバ - その4 - ミドルウェアのセットアップ

ストレージサーバにミドルウェアのセットアップします。
ここでは基本となる
  • httpサーバ
  • ldapサーバ
  • PHPエンジン
  • MySQLデータベースサーバ
  • tftpサーバ
について記述します。

最初にhttpサーバを設定します。
ディレクトリ構成は以下のようにします。
  • バージョン管理のdav
  • 公共用のpub
  • 一次作業用のtmp
  • tftpサーバで公開するtftp
  • 特定ユーザのみログインできるproject1

以下を実行します。
# USE="ldap" emerge -pv www-servers/apache
# USE="ldap" emerge www-servers/apache
# echo "ServerName 10.19.59.191" >> /etc/apache2/httpd.conf
# vi /etc/conf.d/apache2
APACHE2_OPTS="-D DEFAULT_VHOST"
APACHE2_OPTS="-D SSL -D SSL_DEFAULT_VHOST -D DAV -D DAV_FS -D LDAP -D AUTH_LDAP"
に変更します。
以下を実行します。
# chmod 777 /mnt
# chmod 777 /mnt/storage
# cd /mnt/storage
# mkdir dav
# chown apache:apache dav
# chmod 777 dav
# cd dav
# mkdir pub
# chown apache:apache pub
# chmod 777 pub
# mkdir tmp
# chown apache:apache tmp
# chmod 777 tmp
# mkdir project1
# chown apache:apache project1
# chmod 777 project1
# cd /mnt/storage/dav
# mkdir tftp
# chown apache:apache tftp
# chmod 777 tftp
# vi /etc/apache2/httpd.conf
で以下のように修正。
<Directory />
    Options FollowSymLinks
    AllowOverride None
    AllowOverride All
</Directory>
<Directory />
    Options FollowSymLinks
#    AllowOverride None
    AllowOverride All
</Directory>
に変更します。
またファイルの最後に
Alias	/dav/pub		"/mnt/storage/dav/pub"
Alias /web/pub "/mnt/storage/dav/pub"
Alias /dav/tmp "/mnt/storage/dav/tmp"
Alias /web/tmp "/mnt/storage/dav/tmp"
Alias /dav/project1 "/mnt/storage/dav/project1"
Alias /web/project1 "/mnt/storage/dav/project1"
Alias /dav/tftp "/mnt/storage/dav/tftp"
Alias /web/tftp "/mnt/storage/dav/tftp"

<Location /dav/pub>
DAV on
SSLRequireSSL
</Location>

<Location /web/pub>
Options Indexes
SSLRequireSSL
</Location>

<Location /dav/tmp>
DAV on
SSLRequireSSL
</Location>

<Location /web/tmp>
Options Indexes
SSLRequireSSL
</Location>

<Location /dav/project1>
DAV on
SSLRequireSSL
AuthType Basic
AuthName "hoge-project1"
AuthLDAPURL ldap://localhost/ou=project1,o=hoge,c=com?cn
require valid-user
</Location>

<Location /web/project1>
Options Indexes
SSLRequireSSL
AuthType Basic
AuthName "hoge-project1"
AuthLDAPURL ldap://localhost/ou=project1,o=hoge,c=com?cn
require valid-user
</Location>

<Location /dav/tftp>
DAV on
SSLRequireSSL
</Location>

<Location /web/tftp>
Options Indexes
SSLRequireSSL
</Location>
を追加します。
以下を実行します。
# rc-update add apache2 default
# /etc/init.d/apache2 start

認証のためのldapサーバを準備します。
以下を実行します。
# cd /etc/openldap
# slappasswd
# vi slapd.conf
で以下のように設定します。
database	bdb
suffix "o=hoge,c=com"
rootdn "cn=root,o=hoge,c=com"
rootpw {SSHA}xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ここで rootpw の値は
# slappasswd -s <パスワード>
の結果です。
また先頭に
allow bind_v2
を追加します。
以下を実行します。
# echo 'dn: o=hoge,c=com' > /tmp/hoge.ldif
# echo 'objectClass: organization' >> /tmp/hoge.ldif
# echo 'o: hoge' >> /tmp/hoge.ldif
# ldapadd -x -h localhost -D "cn=root,o=hoge,c=com" -w <パスワード> -f /tmp/hoge.ldif
# rm /tmp/hoge.ldif
# cd /var/lib/
# mv openldap-data /mnt/storage/
# ln -s /mnt/storage/openldap-data openldap-data
# rc-update add slapd default
# /etc/init.d/slapd start
続いてPCでここからBrowser282b2.zipをダウンロードしてlbe.jarを実行します。
これからldapの管理はこちらから行うことにします。
entry は領域を organizationalUnit で、
その領域にアクセスできるユーザを organizationalPerson で作ります。
なお、organizationalUnit の ou 属性が領域名、
organizationalPerson の cn 属性がユーザIDで、
sn 属性にフルネームをローマ字で、
userPassword 属性にパスワードをハッシュ値で入れておきます。

今度はPHPエンジンをインストールしましょう。
以下を実行します。
# USE="cli apache2 mysql gd jpeg png gif ldap" emerge dev-lang/php
# vi /etc/conf.d/apache2
でAPACHE2_OPTS 変数に"-D PHP5"を加えます。
# vi /etc/apache2/httpd.conf
DirectoryIndex index.html index.html.var
DirectoryIndex index.html index.html.var index.php
に変更します。
以下を実行します。
# /etc/init.d/apache2 restart
# echo '' > /var/www/localhost/htdocs/phpinfo.php
# emerge dev-db/mysql
# rc-update add mysql default
# /usr/bin/mysql_install_db
# /etc/init.d/mysql start

ldapについては後で修正した部分があり、
今思えばミスではあるが、
実はユーザ管理に使っている"organizationalPerson"要素には"mail"属性が含まれていませんでした。
今更"inetOrgPerson"に変えるのも面倒なので、
"organizationalPerson"に無理やり"mail"を追加しています。
まず、
# vi core.schema
でファイルを開き、"organizationalPerson"の定義部分
objectclass ( 2.5.6.7 NAME 'organizationalPerson'
        DESC 'RFC2256: an organizational person'
        SUP person STRUCTURAL
        MAY ( title $ x121Address $ registeredAddress $ destinationIndicator $
                preferredDeliveryMethod $ telexNumber $ teletexTerminalIdentifier $
                telephoneNumber $ internationaliSDNNumber $
                facsimileTelephoneNumber $ street $ postOfficeBox $ postalCode $
                postalAddress $ physicalDeliveryOfficeName $ ou $ st $ l
) )
を探します。ここの最後から2番目の行の最後に" $ mail"を追加し、
                postalAddress $ physicalDeliveryOfficeName $ ou $ st $ l $ mail
とします。また、最後のほうにある
attributetype ( 0.9.2342.19200300.100.1.3
        NAME ( 'mail' 'rfc822Mailbox' )
        DESC 'RFC1274: RFC822 Mailbox'
        EQUALITY caseIgnoreIA5Match
        SUBSTR caseIgnoreIA5SubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
を先の"organizationalPerson"の定義部分よりも前に移し、
元の部分はコメントアウト(各行の先頭に'#'を追加)します。
最後に
# /etc/init.d/slapd restart
で、ldapサーバを再起動します。

MySQLデータベースサーバをインストールします。
以下を実行します。
# /etc/init.d/mysql stop
# cd /var/lib
# mv mysql /mnt/storage/
# ln -s /mnt/storage/mysql mysql
# /etc/init.d/mysql start

最後にtftpサーバと、
その公開ディレクトリにDAV経由でアクセスできるようにします。
以下を実行します。
# cd /etc/xinetd.d
# touch tftp
# chmod 644 tftp
ファイル"/etc/xinetd.d/tftp"を編集して以下の内容とします。
service tftp
{
disable = no
socket_type = dgram
protocol = udp
wait = yes
user = apache
server = /usr/sbin/in.tftpd
server_args = /mnt/storage/dav/tftp
}
ファイル"/etc/xinetd.conf"の
only_from       = localhost
の行をコメントアウト(先頭に'#'を追加)します。
以下を実行します。
# /etc/init.d/xinetd start
# rc-update add xinetd default

0 件のコメント:

コメントを投稿