サーバ管理 一覧

OpenLDAP@Solarisの設定

以前のエントリで、SolarisにOpenLDAPを導入する方法を紹介しました。今回は、そのOpenLDAPにユーザ情報を持たせて認証できるようにするところまでを紹介します。

[blog] SolarisにOpenLDAPを導入する


まず、設定ファイルで用いる管理者のパスワードを、slappasswdで暗号化します。slappasswdは、多くの場合/usr/local/sbinの下にあります。slappasswdで生成された暗号化パスワードはどこかにコピーしておきましょう。ちなみに下のコードで書かれている「xxx...xxx」てのは、もっとランダムな文字列になります。



# slappasswd
New password:
Re-enter new password:
{SSHA}xxxxxxxxxxxxxxxxxxxxxxxxxxx

その後、/usr/local/etc/openldap/slapd.conf で、次のように設定します。



database bdb
suffix "dc=example,dc=com"
rootdn "cn=Manager,dc=example,dc=com"
rootpw {SSHA}xxxxxxxxxxxxxxxxxxxxxxxxxxx

access to *
by dn="cn=Manager,dc=example,dc=com" write
by self write
by * read

この設定の中で、「dc=XXX」という部分がありますが、これはそれぞれの組織にあったものをつけるといいと思います。他のWebページで紹介されているものは、大部分はURLのドメインの部分を指定しているようです。

ここまで来たら、とりあえずLDAPサーバが立ち上がるかテストしてみましょう。起動スクリプトは、別のエントリで紹介しているので、そちらを参照してください。

[blog] OpenLDAPの自動起動用スクリプト


これで実行してみて、立ち上がるようならユーザ情報の追加を行います。立ち上がらないようなら、設定ファイルでのスペルミスやパスの設定に問題がないかを確認してみましょう。

ユーザ情報の追加を行う前に、ユーザ情報のスキーマ(属性の構造の定義ファイル)を作成します。幸いなことに、特に複雑なことをしないなら、以下のソースをちょっと変更するだけで大丈夫です。仮に、このソースのファイル名を「base.ldif」とします。



dn: dc=example,dc=com
objectClass: dcObject
objectclass: organization
dc: example
o: Example Corporation

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

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

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

ソースを改造できたら、これをldapに食わせます。ldapにこのソースを追加するには、ldapaddコマンドを使います。



# ldapadd -f base.ldif -x -D "cn=Manager,dc=example,dc=com" -W

これでldapの中にソースで設定したオブジェクトを追加することができました。さて、ここからはこれまでマシン上で管理されてきたアカウント情報をLDAPサーバにコピーする作業です。移転する作業を行う前に、MigrationToolsがマシン上にあるかどうかを確認しましょう。MigrationToolsとは、NISや普通のユーザ管理ファイルからLDAPに自動的にコピーさせるためのPerlスクリプト群です。

/usr/share/openldap/migrationの下にファイルがあることが多いですが、もしない場合はWeb上からダウンロードしてきましょう。公式ページの下の方に、ファイルのリンクがあります。

[web] Migration Tools


MigrationToolsが手に入ったら、そのファイルの中の「migrate_common.ph」のパラメータを環境に合わせて設定します。



$DEFAULT_MAIL_DOMAIN = "example.com";
$DEFAULT_BASE = "dc=example,dc=com";

それから、/etc/passwdと/etc/groupをそれぞれ適当なファイルとしてコピーします。コピーされたファイルで、移転したくないユーザやグループの情報を削除します。以下の説明では、ユーザ情報ファイルをuserlist、グループ情報ファイルをgrouplistというファイルにしたものとします。



# ./migrate_passwd.pl userlist > userlist.ldif
# ./migrate_group.pl grouplist > grouplist.ldif
# ldapadd -f userlist.ldif -x -D "cn=Manager,dc=example,dc=com" -W
# ldapadd -f grouplist.ldif -x -D "cn=Manager,dc=example,dc=com" -W

migrate_passwd.plやmigrate_group.plの実行権限がついていないことがあるので、chmodコマンドで実行できるようにしてください。ldapaddコマンドを入力後は、slapd.confで設定した(暗号化前の)パスワードを入力すればよいです。


参考にしたWebページは次のとおりです。
[web] 既存のユーザアカウントをLDAPサーバに追加するには - @IT
[web] LinuxでLDAPサーバを構築するには - @IT

OpenLDAPの自動起動用スクリプト

  • 更新日:
  • サーバ管理

OpenLDAPの自動起動用スクリプトを、他のウェブページを参照しながら作ってみました。とはいえ、実際にやったのは、公開されていたスクリプトのバグを修正しただけなんですが(>Д<;) でも、同じようなところではまって時間をつぶしてしまう管理者様もいるのではないかと思って、修正版を公開してみます。

参照したウェブページはこちら。

[web] OpenLDAPのソースからのインストール - UNIXな生活

さて、起動スクリプトの前提条件は次のようになります。自分の環境に合わせて、適宜修正してやってください。上記のページで公開されている起動スクリプトとは、変数PROFILEDIRが違うので注意してください。

slapdのプロセスIDが記録されるファイル:/usr/local/var/run/slapd.pid
slapdのあるディレクトリ:/usr/local/libexec/slapd
slapdを実行させるユーザ・グループ:ldap

#!/bin/sh
PROFILEDIR=/usr/local/var/run
case "$1" in
start)
     if [ -f $PROFILEDIR/slapd.pid ] ; then
           echo "Running slapd"
     else
        /usr/local/libexec/slapd -u ldap -g ldap
        echo "Starting slapd"
    fi
;;
stop)
    if [ -f $PROFILEDIR/slapd.pid ] ; then
          kill `cat $PROFILEDIR/slapd.pid`
          echo "Stopping slapd"
    else
        echo "Not Running slapd"
    fi
;;
restart)
   if [ -f $PROFILEDIR/slapd.pid ] ; then
          kill `cat $PROFILEDIR/slapd.pid`
          echo "Stopping slapd"
          /usr/local/libexec/slapd -u ldap -g ldap
          echo "Starting slapd"
   else
           /usr/local/libexec/slapd -u ldap -g ldap
          echo "Starting slapd"
  fi
;;
*)
     echo "Usage: `basename $0` {start|stop|restart}" 1>&2
     exit 1
;;
esac
exit 0

slappasswdが利用できない

  • 更新日:
  • サーバ管理

OpenLDAPを導入した後、普通なら既存のユーザアカウントを移行したいと考えます。その時に「slappasswd」を用いるときがあるのですが、エラーが出現して実行できない場合があります。たとえば、次のようなエラーが表示されます。



# slappasswd
ld.so.1: slapd: 重大なエラー: libdb-4.5.so: open に失敗しました: ファイルもディレクトリもありません。
強制終了
# slappasswd
ld.so.1: slapd: 重大なエラー: libgcc_s.so.1: open に失敗しました: ファイルもディレクトリもありません。
強制終了

このようなときは、ライブラリにパスが通っていない可能性があります。パスを通すには、次のようにします。



# export LD_LIBRARY_PATH=/usr/local/BerkeleyDB.4.5/lib:/usr/local/lib

こうすることで、エラーが表示されなくなりました。BerkeleyDBのバージョンが違う場合は、そのディレクトリ名に注意してください。

SolarisにOpenLDAPを導入する

研究室のSolarisサーバにOpenLDAPを導入してみました。かなり長い紆余曲折の末、なんとか導入できて今は一安心です。今後不具合が出ないことを祈ります。

今回、OpenLDAPを導入したサーバの環境は次のとおりです。
OS:Solaris10
DB:BerkeleyDB.4.5.20
LDAP:OpenLDAP-2.3.34

まず、OpenLDAPをインストールする前に、BerkeleyDBをインストールします。無事にインストールが完了すると、デフォルトで/usr/localの下にファイルが置かれます。以降の説明では、プログラムソースは/usr/local/src直下にあるものとします。



$ cd /usr/local/src
$ gunzip -c db-4.5.20.tar.gz | tar xvf -
$ cd db-4.5.20/build_unix
$ CC=gcc ../dist/configure
$ make
# make install

次に、OpenLDAPのインストールを行います。makeはSolaris標準のmake(/usr/ccs/bin/make)を利用します。



$ cd /usr/local/src
$ gunzip -c openldap-2.3.34.tgz | tar xvf -
$ cd openldap-2.3.34
# export LD_LIBRARY_PATH=/usr/local/BerkeleyDB.4.5/lib:/usr/local/lib
# export CPPFLAGS=-I/usr/local/BerkeleyDB.4.5/include
# export LDFLAGS="-L/usr/local/BerkeleyDB.4.5/lib -R/usr/local/BerkeleyDB.4.5/lib"
# export CFLAGS=-D_AVL_H
# ./configure
# make depend
# make
# make install

makeを実行すると、途中いろいろと警告が出てくるのですが、今のところは気にしない方向で。あとは、ユーザを追加していって、名前解決の際にldapを参照するようにすれば利用できるようになるはずです。

以下に、参照したWebページを示します。

[web] OpenLDAPの利用
[blog] OpenLDAPでconfigure: error: Berkeley DB version mismatch - UNIXしま専科
[blog] OpenLDAP Solaris10上 makeでエラー - UNIXしま専科
[bbs] openldapのインストール- @IT
[web] Solaris 10 に OpenLDAP をインストールする時の注意点
[web] Solaris10 BerkeleyDB.4.4.20

続きを読む

SolarisでPostfix(SMTP over TLS)の導入

  • 更新日:
  • サーバ管理

SolarisでSMTP over TLSをサポートしたPostfixサーバを導入するためには、普通のPostfixのインストールと比べてひと手間かける必要があります。MakefileにOpenSSLのライブラリの場所を記述する操作を行うことで、TLSをサポートさせることができます。

今回Postfixのインストールを行った環境は次の通り。
OS: Solaris 10
SMTP: Postfix 2.3.4
SSL: OpenSSL 0.9.8

けっこうPostfixのマニュアルそのままですが、メモということで…。ちなみにここでは、OpenSSLのインクルードファイルの場所は /usr/local/ssl/include、ライブラリの場所を /usr/local/ssl/lib、Postfixのソースのある場所を /usr/local/src/postfix-2.3.4であることを前提とします。



# cd /usr/local/src/postfix-2.3.4
# make -f Makefile.init makefiles
# make makefiles CCARGS="-DUSE_TLS -I/usr/local/ssl/include" AUXLIBS="-R/usr/local/ssl/lib -L/usr/local/ssl/lib -lssl -lcrypto"
# make
# make upgrade

こんな感じです。途中、コマンドが改行されているところは適宜1行に直して読んでください。
もし、OpenSSLのインクルードファイルやライブラリの場所が分からないなら、「find / -name ssl.h」や、「find / -name libssl.so」などとして探し出しましょう。僕の環境でこのコマンドを実行すると、「/usr/local/ssl/include/openssl/ssl.h」や「/usr/local/ssl/lib/libcrypto.so」が結果として表れます。インクルードファイルのあるディレクトリに関してはちょっと注意が必要ですね。

もし、Postfixを再起動してみて「fatal: unsupported dictionary type: sdbm」がエラーログに残るようなら、/etc/postfix/main.cfの「smtpd_tls_session_cache_database」をコメントアウトすればよいです。

[web] Postfix TLSサポート
[blog] fatal: unsupported dictionary type: sdbm - KSKNET

Solaris&PostfixでNISの冗長なログを出力させないようにする

  • 更新日:
  • サーバ管理

SolarisにPostfixを導入すると、デフォルトではエイリアスの解決のためにNISのマップを参照しに行きます。それでも特に問題がないことが多いですが、ログに「warning: dict_nis_init: NIS domain name not set - NIS lookups disabled」がたくさん出てうっとうしく感じるときがあります。

つまり、NISのマップを参照しないように設定することで、このようなログを出力させないことができます。その設定は次のようにします。



alias_maps = dbm:/etc/mail/aliases   # 行頭の「#」をはずして、aliasesファイルの場所を指定
#alias_maps = hash:/etc/mail/aliases
#alias_maps = hash:/etc/aliases, nis:mail.aliases
#alias_maps = netinfo:/aliases

もし、alias_mapsにhashを用いている場合は、2行目のコメントをはずしてください。

Postfixのバージョンを調べる

  • 更新日:
  • サーバ管理

サーバに導入されているPostfixのバージョンを調べるには、次のようにします。



# postconf mail_version

その他のFAQについては、公式サイトのFAQが役に立つでしょう。

[web] Postfix Frequently Asked Questions(日本語)

メールサーバに関するポート番号

  • 更新日:
  • サーバ管理

メールサーバを立てていると、メールサーバについてのポート番号がいろいろと出てきて混同しそうなんで、ここでまとめておきます。

- Submission over TLS → 587番
- SMTP over SSL → 465番
- SMTP over TLS → 25番
- SMTP → 25番

SSLとTLSは兄弟のようなもので、SSL3.0がRFC2246によってTLS1.0という名称で標準化されたみたいです。今後はTLSの方が推奨されるみたいなので、こちらを使っていったほうがいいと思われます。

tailコマンド

  • 更新日:
  • サーバ管理

サーバを管理していると、ログの最後だけをチェックしたいことがけっこうあります。そんなときに役に立つのがtailコマンド。標準入力の最後の数行だけ切り出して、標準出力に出力します。

研究室のサーバ(Solaris)をいじっていて、なぜか-nオプションが使えなかったのでちゃんと調べてみました。すると、次のような使い方ができることがわかりました。



$ tail -20 /var/log/syslog
$ tail -n 20 /var/log/syslog

ここに書いた2行のコマンドは同じ動作をします。syslogファイルの最後の20行を出力します。なぜかSolarisサーバでは後者のコマンドを受け付けなかったんですが、FedoraCoreでは両方ともうまくいきました。うーん、どっちがいいんだかね?。

続きを読む

SolarisでSSLの鍵と証明書を作成する

  • 更新日:
  • サーバ管理

研究室のメールサーバで、SSLを用いて経路を暗号化しようという動きが出てきました。そんなわけで、管理者の先輩に証明書を作成してもらいました。(ありがとうございます!めっちゃ助かりました。)そのときに参考にしたWebページを教えてもらったので、ここに紹介しておきます。

[web] Solaris10 SSL鍵とSSL証明書とca-bandle.crtの作成

このページの上部へ

About

tetsuの日記・雑記です。
日々経験したことを記録していきます。

広告

サイト内検索

最近のピクチャ

  • リアディレーラ

月別アーカイブ

最近のコメント