オープンソース

サーバー構築のデージーネットTOP > OSS情報 > デージーネットのOSS > postLDAPadmin

next up previous contents
Next: 4. 使い方 Up: postLDAPadmin Previous: 2. 計画



3. インストール

3.1 postLDAPadminの入手と展開

postLDAPadminソフトウェアは、postLDAPadminプロジェクトのダウンロードページから入手することができます。

http://osdn.jp/projects/postldapadmin/

postLDAPadminソフトウェアをダウンロードしたら、圧縮されたアーカイブファイルを展開します。展開するディレクトリはWebサーバから参照可能である必要があります。次は、/usr/local/配下に展開する例です。

postLDAPadminのインストール

# tar zxf postLDAPadmin_frame-VERSION.tar.gz -C /usr/local
# tar zxf postLDAPadmin_admin-VERSION.tar.gz -C /usr/local/postldapadmin/htdocs/admin
# tar zxf postLDAPadmin_user-VERSION.tar.gz -C /usr/local/postldapadmin/htdocs
# tar zxf postLDAPadmin_lib-VERSION.tar.gz -C /usr/local/postldapadmin/lib

postLDAPadmin.schemaとpostLDAPadmin.ldifの配置

# cd /usr/local/postldapadmin/
# mv htdocs/admin/postldapadmin/postLDAPadmin.schema ./
# mv htdocs/admin/postldapadmin/postLDAPadmin.ldif ./

このように展開した場合、展開後のディレクトリ構成は、表[*]のようになります。


表: postLDAPadminのディレクトリ構成例
ディレクトリ名 解説
/usr/local/postldapadmin/htdocs/admin/postldapadmin 管理者用インタフェースに関するファイルを格納するディレクトリ
/usr/local/postldapadmin/htdocs/user ユーザ用インタフェースに関するファイルを格納するディレクトリ
/usr/local/postldapadmin/lib ライブラリを格納するディレクトリ
/usr/local/postldapadmin/etc 仮想ドメインごとの設定ファイルを格納するディレクトリ
/usr/local/postldapadmin/tmpl テンプレートファイルを格納するディレクトリ
/usr/local/postldapadmin/postLDAPadmin.schema LDAP用スキーマファイル
/usr/local/postldapadmin/postLDAPadmin.ldif LDAP用スキーマファイル(LDIF形式)

3.2 デザインテンプレートについて

postLDAPadminは、テンプレートを読み込んで特定の文字列(タグ)を置換して表示します。そのため、テンプレートファイル名やタグ情報を正しく設定すれば好みのデザインテンプレートを使用することができます。

各画面のファイル名とタグ情報は以下の通りです。

[展開ディレクトリ]/postldapadmin/tmpl/

表: テンプレートファイル名とタグ一覧(管理者用インターフェース)
画面名 テンプレート名 タグ名 説明
ログイン画面 admin_login.tmpl <<TITLE>> タイトル
<<JAVASCRIPT>> JavaScript
<<MESSAGE>> メッセージ
ユーザアカウント管理画面 admin_user_menu.tmpl <<TITLE>> タイトル
<<JAVASCRIPT>> JavaScript
<<MESSAGE>> メッセージ
<<SK>> セッションキー
<<TOPIC>> トピック
<<TAB>> タブ
<<START_TAB>> (新)タブ作成ループ開始
<<END_TAB>> (新)タブ作成ループ終了
<<MENU>> メニュー
<<START_MENU>> (新)メニュー作成ループ開始
<<END_MENU>> (新)メニュー作成ループ完了
ユーザアカウント検索画面 admin_user_search.tmpl <<TITLE>> タイトル
<<JAVASCRIPT>> JavaScript
<<MESSAGE>> メッセージ
<<SK>> セッションキー
<<TOPIC>> トピック
<<TAB>> タブ
<<START_TAB>> (新)タブ作成ループ開始
<<END_TAB>> (新)タブ作成ループ終了
<<SEARCH_UID>> 検索条件:ユーザ名
<<INCLUDE_ON>> 検索条件:を含む   ※
<<MATCH_ON>> 検索条件:と一致する ※
<<NUM>> 全件数
<<PRE>> 前ページリンク
<<NEXT>> 次ページリンク
<<UID>> ユーザ名
<<ALIAS>> メールエイリアス
<<TRANS>> メール転送アドレス
<<QUOTA>> メールボックス容量
<<MOD>> 編集リンク
<<HIDDEN>> データ受け渡し用POSTデータ
<<STARTLOOP>> ループ処理開始
<<ENDLOOP>> ループ処理終了
<<FORWARD_START>> コメントアウト開始
<<FORWARD_END>> コメントアウト終了
<<FORWARD>> 転送設定リンク
ユーザアカウント編集画面 admin_user_mod.tmpl <<TITLE>> タイトル
<<JAVASCRIPT>> JavaScript
<<MESSAGE>> メッセージ
<<SK>> セッションキー
<<TOPIC>> トピック
<<TAB>> タブ
<<START_TAB>> (新)タブ作成ループ開始
<<END_TAB>> (新)タブ作成ループ終了
<<UID>> ユーザ名
<<QUOTA>> メールボックス容量
<<QUOTASIZE>> メールボックス容量桁数
<<QUOTAUNIT>> メールボックス容量単位
<<ALIAS>> メールエイリアス
<<TRANS>> メール転送アドレス
<<SAVEON>> サーバにメールを残す   ※
<<SAVEOFF>> サーバにメールを残さない ※
<<HIDDEN>> データ受け渡し用POSTデータ
<<FORWARD_START>> コメントアウト開始
<<FORWARD_END>> コメントアウト終了
ユーザメール転送設定画面 admin_user_mod.tmpl <<TITLE>> タイトル
<<JAVASCRIPT>> JavaScript
<<MESSAGE>> メッセージ
<<SK>> セッションキー
<<TOPIC>> トピック
<<TAB>> タブ
<<START_TAB>> (新)タブ作成ループ開始
<<END_TAB>> (新)タブ作成ループ終了
<<STARTLOOP>> ループ処理開始
<<ENDLOOP>> ループ処理終了
<<FILTER_ID>> フィルタID
<<ALL_FORWARD>> 全て転送
<<DETAIL_FORWARD>> 詳細設定
<<FORWARD_CHECK>> 送信者チェックボックス
<<FORWARD_TEXT>> 送信者テキストボックス
<<FORWARD_MATCH>> 送信者が一致する
<<FORWARD_INCLUDE>> 送信者を含む
<<FORWARD_NOT_INC>> 送信者を含まない
<<FORWARD_EMPTY>> 送信者が空である
<<SUBJECT_CHECK>> 件名チェックボックス
<<SUBJECT_TEXT>> 件名テキストボックス
<<SUBJECT_MATCH>> 件名が一致する
<<SUBJECT_INCLUDE>> 件名を含む
<<SUBJECT_NOT_INC>> 件名を含まない
<<SUBJECT_EMPTY>> 件名が空である
<<RECIPT_CHECK>> 宛先チェックボックス
<<RECIPT_TEXT>> 宛先テキストボックス
<<RECIPT_MATCH>> 宛先が一致する
<<RECIPT_INCLUDE>> 宛先を含む
<<RECIPT_NOT_INC>> 宛先を含まない
<<RECIPT_EMPTY>> 宛先が空である
<<TRANSFER_ADDR>> 転送先アドレス
<<MAIL_LEAVE>> メールを残す
<<MAIL_DEL>> メールを残さない
<<HIDDEN>> データ受け渡し用POSTデータ
ユーザアカウント追加画面 admin_forward_mod.tmpl <<TITLE>> タイトル
<<JAVASCRIPT>> JavaScript
<<MESSAGE>> メッセージ
<<SK>> セッションキー
<<TOPIC>> トピック
<<TAB>> タブ
<<START_TAB>> (新)タブ作成ループ開始
<<END_TAB>> (新)タブ作成ループ終了
<<UID>> ユーザ名
<<QUOTA>> メールボックス容量
<<QUOTASIZE>> メールボックス容量桁数
<<QUOTAUNIT>> メールボックス容量単位
<<ALIAS>> メールエイリアス
<<TRANS>> メール転送アドレス
<<SAVEON>> サーバにメールを残す   ※
<<SAVEOFF>> サーバにメールを残さない ※
<<FORWARD_START>> コメントアウト開始
<<FORWARD_END>> コメントアウト終了
CSV一括登録画面 admin_user_csv.tmpl <<TITLE>> タイトル
<<JAVASCRIPT>> JavaScript
<<MESSAGE>> メッセージ
<<SK>> セッションキー
<<TOPIC>> トピック
<<TAB>> タブ
<<START_TAB>> (新)タブ作成ループ開始
<<END_TAB>> (新)タブ作成ループ終了
メーリングリスト管理画面 admin_ml_menu.tmpl <<TITLE>> タイトル
<<JAVASCRIPT>> JavaScript
<<MESSAGE>> メッセージ
<<SK>> セッションキー
<<TOPIC>> トピック
<<TAB>> タブ
<<START_TAB>> (新)タブ作成ループ開始
<<END_TAB>> (新)タブ作成ループ終了
<<MENU>> メニュー
<<START_MENU>> (新)メニュー作成ループ開始
<<END_MENU>> (新)メニュー作成ループ終了
メーリングリスト編集画面 admin_ml_mod.tmpl <<TITLE>> タイトル
<<JAVASCRIPT>> JavaScript
<<MESSAGE>> メッセージ
<<SK>> セッションキー
<<TOPIC>> トピック
<<TAB>> タブ
<<START_TAB>> (新)タブ作成ループ開始
<<END_TAB>> (新)タブ作成ループ終了
<<MLADDRS>> メーリングリスト一覧
<<NEWML>> 新規登録メールアドレス
<<MLDOMAIN>> ドメイン
メールアドレス管理画面 admin_ml_mod_mod.tmpl <<TITLE>> タイトル
<<JAVASCRIPT>> JavaScript
<<MESSAGE>> メッセージ
<<SK>> セッションキー
<<TOPIC>> トピック
<<TAB>> タブ
<<START_TAB>> (新)タブ作成ループ開始
<<END_TAB>> (新)タブ作成ループ終了
<<MLADDR>> メーリングリストアドレス
<<MAILADDRS>> メールアドレス一覧
<<NEWADDR>> 新規登録メールアドレス
<<HIDDEN>> データ受け渡し用POSTデータ
管理者アカウント管理画面 admin_adminpass_mod.tmpl <<TITLE>> タイトル
<<JAVASCRIPT>> JavaScript
<<MESSAGE>> メッセージ
<<SK>> セッションキー
<<TOPIC>> トピック
<<TAB>> タブ
<<START_TAB>> (新)タブ作成ループ開始
<<END_TAB>> (新)タブ作成ループ終了

表: テンプレートファイル名とタグ一覧(ユーザインターフェース)
画面名 テンプレート名 タグ名 説明
ログイン画面 user_login.tmpl <<TITLE>> タイトル
<<JAVASCRIPT>> JavaScript
<<MESSAGE>> メッセージ
ユーザ編集画面 user_user_mod.tmpl <<TITLE>> タイトル
<<JAVASCRIPT>> JavaScript
<<MESSAGE>> メッセージ
<<SK>> セッションキー
<<TOPIC>> トピック
<<TAB>> タブ
<<START_TAB>> (新)タブ作成ループ開始
<<END_TAB>> (新)タブ作成ループ終了
<<UID>> ユーザ名
<<TRANSFERADDR>> メール転送アドレス
<<SAVEMAILENABLED>> サーバにメールを残す   ※
<<SAVEMAILDISABLED>> サーバにメールを残さない ※
<<FORWARD_START>> コメントアウト開始
<<FORWARD_END>> コメントアウト終了
ユーザメール転送設定画面 user_forward_mod.tmpl <<TITLE>> タイトル
<<JAVASCRIPT>> JavaScript
<<MESSAGE>> メッセージ
<<SK>> セッションキー
<<TOPIC>> トピック
<<TAB>> タブ
<<START_TAB>> (新)タブ作成ループ開始
<<END_TAB>> (新)タブ作成ループ終了
<<STARTLOOP>> ループ処理開始
<<ENDLOOP>> ループ処理終了
<<FILTER_ID>> フィルタID
<<ALL_FORWARD>> 全て転送
<<DETAIL_FORWARD>> 詳細設定
<<FORWARD_CHECK>> 送信者チェックボックス
<<FORWARD_TEXT>> 送信者テキストボックス
<<FORWARD_MATCH>> 送信者が一致する
<<FORWARD_INCLUDE>> 送信者を含む
<<FORWARD_NOT_INC>> 送信者を含まない
<<FORWARD_EMPTY>> 送信者が空である
<<SUBJECT_CHECK>> 件名チェックボックス
<<SUBJECT_TEXT>> 件名テキストボックス
<<SUBJECT_MATCH>> 件名が一致する
<<SUBJECT_INCLUDE>> 件名を含む
<<SUBJECT_NOT_INC>> 件名を含まない
<<SUBJECT_EMPTY>> 件名が空である
<<RECIPT_CHECK>> 宛先チェックボックス
<<RECIPT_TEXT>> 宛先テキストボックス
<<RECIPT_MATCH>> 宛先が一致する
<<RECIPT_INCLUDE>> 宛先を含む
<<RECIPT_NOT_INC>> 宛先を含まない
<<RECIPT_EMPTY>> 宛先が空である
<<TRANSFER_ADDR>> 転送先アドレス
<<MAIL_LEAVE>> メールを残す
<<MAIL_DEL>> メールを残さない
<<HIDDEN>> データ受け渡し用POSTデータ

※ セレクトボックス・チェックボックスの属性として使われるタグは、選択された場合「selected」もしくは「checked」に置換されます。選択されない場合は、空の文字列に置換されます。

以下は、ユーザアカウント検索画面のタグ置換の例です。

テンプレートファイル例
<!DOCTYPE html>
<html lang="ja">
<head>
  <title><<TITLE>></title>
  <<JAVASCRIPT>>
  <meta charset="EUC-JP">
  <link rel="stylesheet" href="../../../../css/bootstrap/css/bootstrap-paper.css">
  <script src="../../../../js/jquery-3.1.1.min.js"></script>
  <script src="../../../../js/jquery-ui.min.js"></script>
  <script src="../../../../css/bootstrap/js/bootstrap.min.js"></script>
  <link rel="stylesheet" href="../../../../css/style.css">
</head>

<body>
<header class="">
  <nav class="navbar navbar-default  navbar-fixed-top navmargin">
    <div class="navbar-header">
      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#gmenu">
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="#"></a>
    </div>

    <div id="gmenu" class="collapse navbar-collapse">
      <ul class="nav navbar-nav navbar-right ">
<<START_TAB>>
<li class="<<ACTIVE>>"><a href="#" onClick="dgpSubmit('<<URL>>')"><span class="glyphicon 
                             glyphicon-user" aria-hidden="true"></span><<NAME>></a></li>
<<END_TAB>>
<li class=""><a href="#" onClick="dgpSubmit('../../../logout.php')"><span class="glyphicon 
                             glyphicon-user" aria-hidden="true"></span>ログアウト</a></li>
      </ul>
    </div>
  </nav>
  <div class="container-fluid fix-padding">
  </div>
</header>

<div class="container-fluid">
  <!-- 左グリッド  -->
  <div class="row">
    <!-- 左ナビゲーションバー -->
    <nav class="aside col-sm-2 col-sm-offset-1">
      <div class="panel panel-default">
        <ul class="list-group">
<<START_MENU>>
<a class="list-group-item  <<ACTIVE>>" href="#" onClick="dgpSubmit('<<URL>>')"><<NAME>></a>
<<END_MENU>>
        </ul>
      </div>
    </nav>

    <!-- 右グリッド  -->
    <div class="col-sm-8">
      <!-- エラーメッセージ -->

      <!-- メインコンテンツ -->
      <div class="panel panel-primary">
        <div class="panel-heading">
          <h3 class="panel-title">ユーザの検索</h3>
        </div>
        <div class="ErrorMessage"></div>
        <div class="row panel-body">
          <!-- フォーム -->
          <div class="col-sm-10 col-sm-offset-1">
            <form class="form-horizontal" method="POST" action="index.php" name="form_main">

 <div class="form-group well">

<<MESSAGE>>
                <div class="form-group">

                  <label for="user" class="col-sm-2 control-label">ユーザID</label>
                  <div class="col-sm-6">
                    <input type="text" class="form-control" id="user" size="30" name="form_name" 
                                                         maxlength="256" value="<<SEARCH_UID>>">
                  </div>
                  <div class="col-sm-2">
                    <select name="name_match">
                    <option value="0" <<INCLUDE_ON>>>を含む</option>
                    <option value="1" <<MATCH_ON>>>と一致する</option>
                    </select>
                  </div>
                </div>

<div>
<<SK>>
    <button type="submit" name="search" value="" class="btn btn-primary">>検索</button>
    <button type="submit" name="csvdownload" value="" class="btn btn-primary">
                                                      CSVダウンロード</button>
    <<HIDDEN>>
</div>

     <table class="table">
       <tr>
         <td class="search_sum">[全 <<NUM>> 件]</td>
         <td colspan="5" class="search_tmp" style="border:1px ;">
         <table class="guide" align="right">
           <tr>
             <td class="search_prev"><<PRE>></td>
             <td class="search_next"><<NEXT>></td>
           </tr>
         </table>
         </td>
      </tr>
      <tr>
        <td class="search_name">ユーザ名</td>
        <td class="search_name">メールエイリアス</td>
        <td class="search_trans">メール転送アドレス</td>
        <td class="search_quota">メール容量</td>
        <td class="search_ref"></td>
<<FORWARD_START>>
        <td class="search_quota">転送設定</td>
<<FORWARD_END>>
      </tr>
<<STARTLOOP>>
      <tr>
        <td class="value"><<UID>></td>
        <td class="value_alias"><<ALIAS>></td>
        <td class="value_trans"><<TRANS>></td>
        <td class="value_right"><<QUOTA>></td>
        <td class="value_center"><<MOD>></td>
<<FORWARD_START>>
        <td class="value_forward"><<FORWARD>></td>
<<FORWARD_END>>
      </tr>
<<ENDLOOP>>
    </table>

              </div>
            </form>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>
<footer class="footer nav navbar-default">
    <nav class="pull-right">
      <div class="navbar-brand"></div>
    </nav>
</footer>

<form method="post" name="common">
  <<SK>>
</form>

</body>

</html>

図: ユーザ検索画面(メール転送設定OFF時)
Image 3_search
図: ユーザ検索画面(メール転送設定ON時)
Image 3_search_on


番号 タグ名 説明
1 <<TITLE>> タイトル
2 <<MESSAGE>> 表示メッセージ
3 <<TAB>> タブ
4 <<START_TAB>> (新)タブ作成ループ開始
5 <<END_TAB>> (新)タブ作成ループ終了
6 <<START_MENU>> (新)メニュー作成ループ終了
7 <<END_MENU>> (新)メニュー作成ループ終了
8 <<SEARCH_UID>> 検索条件:ユーザ名
9 <<INCLUDE_ON>> 検索条件:を含む
10 <<MATCH_ON>> 検索条件:と一致する
11 <<NUM>> 全件数
12 <<PRE>> 前ページリンク
13 <<NEXT>> 次ページリンク
14 <<UID>> ユーザ名
15 <<ALIAS>> メールエイリアス
16 <<TRANS>> メール転送アドレス
17 <<QUOTA>> メールボックス容量
18 <<MOD>> 編集リンク
19 <<FORWARD>> 転送設定リンク

上記のほかにも、以下のタグが存在します。これらは、画面上に出力されることはありませんが、置換されていることがHTMLで確認できます。

タグ名 説明
<<JAVASCRIPT>> JavaScript
<<SK>> セッションキー
<<STARTLOOP>> ループ処理開始
<<ENDLOOP>> ループ処理終了
<<HIDDEN>> データ受け渡し用POSTデータ

画面のHTML例
<!DOCTYPE html>
<html lang="ja">
<head>
  <title>postLDAPadmin</title>
  <script type="text/javascript">
<!--
function msgConfirm(msg) {
        return(window.confirm(msg));
}

function dgpSubmit(url) {
    document.common.action = url;
    document.common.submit();
}
    function allSubmit(url, page, dn, form_name_encode) {
        document.form_main.action = url;
        document.form_main.page.value = page;
        document.form_main.dn.value = dn;
        document.form_main.form_name.value = form_name_encode;
        document.form_main.submit();
    }

// -->
</script>
  <meta charset="EUC-JP">
  <link rel="stylesheet" href="../../../../css/bootstrap/css/bootstrap-paper.css">
  <script src="../../../../js/jquery-3.1.1.min.js"></script>
  <script src="../../../../js/jquery-ui.min.js"></script>
  <script src="../../../../css/bootstrap/js/bootstrap.min.js"></script>
  <link rel="stylesheet" href="../../../../css/style.css">
</head>

<body>
<header class="">
  <nav class="navbar navbar-default  navbar-fixed-top navmargin">
    <div class="navbar-header">
      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#gmenu">
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="#"></a>
    </div>


    <div id="gmenu" class="collapse navbar-collapse">
      <ul class="nav navbar-nav navbar-right ">

<li class="active"><a href="#" onClick="dgpSubmit('../../../postldapadmin/user/')">
<span class="glyphicon glyphicon-user" aria-hidden="true"></span>ユーザアカウント管理</a></li>

<li class=""><a href="#" onClick="dgpSubmit('../../../postldapadmin/ml/')">
<span class="glyphicon glyphicon-user" aria-hidden="true"></span>メーリングリスト管理</a></li>

<li class=""><a href="#" onClick="dgpSubmit('../../../postldapadmin/adminpass/')">
<span class="glyphicon glyphicon-user" aria-hidden="true"></span>管理者アカウント管理</a></li>

<li class=""><a href="#" onClick="dgpSubmit('../../../logout.php')">
<span class="glyphicon glyphicon-user" aria-hidden="true"></span>ログアウト</a></li>
      </ul>
    </div>
  </nav>
  <div class="container-fluid fix-padding">
  </div>
</header>

<div class="container-fluid">
  <!-- 左グリッド  -->
  <div class="row">
    <!-- 左ナビゲーションバー -->
    <nav class="aside col-sm-2 col-sm-offset-1">
      <div class="panel panel-default">
        <ul class="list-group">

<a class="list-group-item  " href="#" 
                           onClick="dgpSubmit('../../../postldapadmin/user/add/')">
                           ユーザアカウント追加</a>

<a class="list-group-item  active" href="#" 
                                 onClick="dgpSubmit('../../../postldapadmin/user/search/')">
                           ユーザアカウント検索</a>

<a class="list-group-item  " href="#" 
                           onClick="dgpSubmit('../../../postldapadmin/user/csv/')">
                           csv一括登録</a>

        </ul>
      </div>
    </nav>

    <!-- 右グリッド  -->
    <div class="col-sm-8">
      <!-- エラーメッセージ -->

      <!-- メインコンテンツ -->
      <div class="panel panel-primary">
        <div class="panel-heading">
          <h3 class="panel-title">ユーザの検索</h3>
        </div>
        <div class="ErrorMessage"></div>
        <div class="row panel-body">
          <!-- フォーム -->
          <div class="col-sm-10 col-sm-offset-1">
            <form class="form-horizontal" method="POST" action="index.php" name="form_main">
           
 <div class="form-group well">

&nbsp;
                <div class="form-group">

                  <label for="user" class="col-sm-2 control-label">ユーザID</label>
                  <div class="col-sm-6">
                    <input type="text" class="form-control" id="user" size="30" name="form_name" 
     maxlength="256" value="">
                  </div>
                  <div class="col-sm-2">
                    <select name="name_match">
                    <option value="0" selected>を含む</option>
                    <option value="1" >と一致する</option>
                    </select>
                  </div>
                </div>

<div>
<input type="hidden" name="sk" 
value="PDcxpTvhio6ZDZ+O23CKFoIX2SWGJ0p3BmwtSbqa6HdYKk4MWsyZhbeseptMZtaV">
    <button type="submit" name="search" value="" class="btn btn-primary">検索</button>
    <button type="submit" name="csvdownload" value="" class="btn btn-primary">
                                                      CSVダウンロード</button>
    <input type="hidden" name="filter" 
value="ucxfLrdedN0mXgbfWVbNU99SAG+L/Di2zAcKHT6brPXx+zYB5bdg19Ioor
SWFf+AmFGstRKm+0TaXbUc+Fc2vtOXU8E0k6jOdBa2/DN0MFg=">
<input type="hidden" name="dn">
<input type="hidden" name="page" value="0">

</div>

     <table class="table">
       <tr>
         <td class="search_sum">[全 2 件]</td>
         <td colspan="5" class="search_tmp" style="border:1px ;">
         <table class="guide" align="right">
           <tr>
             <td class="search_prev"></td>
             <td class="search_next"></td>
           </tr>
         </table>
         </td>
      </tr>
      <tr>
        <td class="search_name">ユーザ名</td>
        <td class="search_name">メールエイリアス</td>
        <td class="search_trans">メール転送アドレス</td>
        <td class="search_quota">メール容量</td>
        <td class="search_ref"></td>
<!--
        <td class="search_quota">転送設定</td>
-->
      </tr>

      <tr>
        <td class="value">testuser2</td>
        <td class="value_alias">testuser-2</td>
        <td class="value_trans"></td>
        <td class="value_right">100Kbytes</td>
        <td class="value_center"><input type="button" class="list_mod_btn" 
        onClick="allSubmit('mod.php', '0', 
        'oJScoQ10MKA0qKAypwWNqTImqP5xMKAcM25yqP5dpPkiqG1
        Ip2IlYTEwCKEyp3DfMTZ9MTImnJqhMKDfMTZ9naN=', '')
        " title="ユーザ編集">
</td>
<!--
        <td class="value_forward"><<FORWARD>></td>
-->
      </tr>

      <tr>
        <td class="value">user02</td>
        <td class="value_alias"></td>
        <td class="value_trans">user02@example.com</td>
        <td class="value_right">100Kbytes</td>
        <td class="value_center"><input type="button" class="list_mod_btn" 
        onClick="allSubmit('mod.php', '0', 
        'oJScoQ11p2IlZQWNqTImqP5xMKAcM25yqP5dpPkiqG1
        Ip2IlYTEwCKEyp3DfMTZ9MTImnJqhMKDfMTZ9naN=', '')
        " title="ユーザ編集">
</td>
<!--
        <td class="value_forward"><<FORWARD>></td>
-->
      </tr>

    </table>

              </div>
            </form>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>
<footer class="footer nav navbar-default">
    <nav class="pull-right">
      <div class="navbar-brand"></div>
    </nav>
</footer>

<form method="post" name="common">
  <input type="hidden" name="sk" 
  value="PDcxpTvhio6ZDZ+O23CKFoIX2SWGJ0p3BmwtSbqa6HdYKk4MWsyZhbeseptMZtaV">
</form>

</body>

</html>

3.3 LDAPサーバの設定

LDAPサーバとしてOpenLDAPを例に解説を行います。LDAPサーバの設定は次の手順で設定を行います。

  • スキーマファイルの読み込み
  • LDAPデータベースの索引

LDAPサーバの基本的な設定、LDAPデータの基本構造の作成については、Appendixを参照してください。

3.3.1 postLDAPadminで管理するLDAPデータ

postLDAPadminで扱うエントリには、postLDAPadminオブジェクトクラスが含まれている必要があります。 postLDAPadminのアーカイブには、postLDAPadminスキーマファイル(postLDAPadmin.schema, postLDAPadmin.ldif)が同梱されています。 OpenLDAPの場合は、このpostLDAPadminスキーマファイルを読み込むだけでpostLDAPadminオブジェクトクラスを利用できるようになります。 postLDAPadminスキーマファイルによって使用できる属性は表[*]のとおりです。


表: postLDAPadminスキーマ
項目 内容 解説
オブジェクトクラス postLDAPadmin 補助型のオブジェクトクラスです。構造型のオブジェクトクラスを同時に指定する必要があります。
必須属性 uid ユーザ名を指定します。
mail メールアドレスを指定します。
オプション属性 userPassword ユーザパスワードを指定します。
quotaSize※ メール容量を指定します。
mailAlias※ メールエイリアスのアドレスを指定します。
mailDirectory※ メール保管ディレクトリを指定します。
mailForwardingAddr※ メール転送先アドレスを指定します。
mailFilterOrder※ メールフィルタの順序、on/offを指定します。
mailFilterArticle※ メールフィルタの条件を指定します。

※postLDAPadminスキーマファイルに収録されている属性、各属性名を任意に変更することはできません。

3.3.2 スキーマファイルの読み込み

OpenLDAPサーバの設定に、LDIF形式のスキーマファイル postLDAPadmin.ldif を読み込みます。 postLDAPadmin.ldifは次の場所にあります。

[展開ディレクトリ]/postldapadmin/

次は、postLDAPadminアーカイブを/usr/local/に展開したときの例です。

# ldapadd -Y EXTERNAL -H ldapi:/// -f /usr/local/postldapadmin/postLDAPadmin.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=postldapadmin,cn=schema,cn=config"

3.3.3 LDAPデータベースの索引

postLDAPadminでは、LDAPの検索フィルタに属性「uid」「mail」を使用するため、次の例のように索引(index)を設定してください。 すでに設定がある場合は不要です。

# ldapmodify -Y EXTERNAL -H ldapi:///<CR>
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: olcDatabase={2}bdb,cn=config<CR>
changetype: modify<CR>
add: olcDbIndex<CR>	
olcDbIndex: uid,mail eq,sub<CR>
-<CR>
<CR>
modifying entry "olcDatabase={2}bdb,cn=config"
<CTRL+D>

※<CR>はEnterキーの入力、<CTRL+D>はCTRLキー + Dキーの入力を示しています。

また、メールサーバ、POP/IMAPの設定で指定するLDAPの検索フィルタに使用する属性についても、indexを作成してください。 メールサーバ、POP/IMAPの設定については、Appendixを参照してください。

3.4 postLDAPadminの設定

postLDAPadminの設定は以下の手順で行います。

  • 設定ファイルの設置
  • メール保管アカウント、ディレクトリの準備

3.4.1 設定ファイルの設置

postLDAPadminの設定ファイルは、次のディレクトリ配下に設置します。

[展開ディレクトリ]/postldapadmin/etc/[管理する仮想ドメイン名]/

postLDAPadminアーカイブを/usr/local/に展開した場合は、次の例のように管理する仮想ドメイン名のディレクトリを作成します。

# cd /usr/local/postldapadmin/etc
# mkdir test.designet.jp
# chown apache:apache test.designet.jp

3.4.1.1 web.conf

管理する仮想ドメイン名のディレクトリを作成しましたら、postLDAPadminの設定ファイル(web.conf)を用意します。次のディレクトリにweb.confのサンプルが用意されています。

[展開ディレクトリ]/postldapadmin/etc/web.conf.sample

コピーして環境に合わせて編集してください。

# cp web.conf.sample test.designet.jp/web.conf

web.confは、Webサーバの実行アカウントの権限である必要があります。次のコマンドでweb.confのパーミッションを確認してください。

# ls -l test.designet.jp
-rw-r--r-- 1 apache apache 655 10月 27 10:21 test.designet.jp/web.conf

Webサーバの実行アカウントの権限がない場合は、次のように設定してください。

# chown apache:apache test.designet.jp/web.conf

本書では、Webサーバの実行アカウントを「apache」として権限を付与しています。

web.confの設定例
[global]
TitleName=postLDAPadmin
ReferrerUrl=http://test.designet.jp/
AdminName=admin
AdminPasswd=21232f297a57a5a743894a0e4a801fc3
LogFile=syslog
SyslogFacility=local1
SessionTimeout=900
MaxPasswordLength=8
MinPasswordLength=3
PasswordEncrypt=CRYPT

[postldapadmin]
LdapServer=127.0.0.1
LdapPort=389
LdapBindDn=cn=Manager,dc=designet,dc=jp
LdapBindPw=secret
LdapBaseDn=dc=test,dc=designet,dc=jp
DiskQuotaDefault=100
BaseMailDir=/home/mail/test.designet.jp
LinePerPage=5
MailDelcommand=sudo -u vmail deluser
LdapUserSuffix=ou=User
LdapListSuffix=ou=List
LdapScope=sub
LdapFilter=(uid=%u)
LdapMlFilter=(mail=*)
LdapObjectClass=account
DisplayUser=uid
DisplayMl=mail
QuotaUnit=KB
QuotaSize=3
LocalPartRFCCheck=0
ForwardConf=0
ForwardNum=3
ForwardFirstMatch=0

AdminPasswdの項目には、MD5エンコードしたパスワード文字列を設定します。パスワードを『admin』と設定する場合は次のようにコマンドを実行します。

$ echo -n admin | openssl dgst -md5

MailDelcommandの項目には、仮想ユーザを削除する際に実行する、該当の仮想ユーザのメール保管ディレクトリを削除するコマンドを指定します。ここで指定したコマンドには、引数として削除対象仮想ユーザのメールディレクトリのパスが渡されます。上記のweb.confの例では、sudoコマンドを利用してdeluserスクリプトを実行し、削除対象仮想ユーザのメールディレクトリを削除するように設定しています。deluserスクリプトとしては、指定されたディレクトリがメールディレクトリかどうか確認してから削除するようなスクリプトを作成することをお勧めします。sudoの設定では、deluserスクリプトを実行できる権限をWeb稼動ユーザに与えておいてください。また本書の例では、vmailユーザでdeluserスクリプトを実行するように指定しているので、vmailユーザがdeluserスクリプトを実行できる権限を与えておいてください。

deluserスクリプトの例
#!/bin/bash

DELDIR=$1
BASEMAILDIR=/home/mail/test.designet.jp

# 引数のメールディレクトリがメール保管ディレクトリ名を
# 含んでいればメールディレクトリと判断
echo ${DELDIR} | grep ${BASEMAILDIR} > /dev/null
if [ $? -ne 0 ]
then
        exit 1
fi

# 引数のメールディレクトリがディレクトリかどうか判定
if [ ! -d ${DELDIR} ]
then
        exit 1
fi

# メールディレクトリ削除
rm -rf ${DELDIR}
if [ $? -ne 0 ]
then
        exit 1
fi

exit 0

MailDelcommandには、削除対象仮想ユーザのメールディレクトリをバックアップディレクトリへ移動するようなスクリプトを指定することも可能です。また、コマンドをリモートから実行することもできます。

QuotaUnitの項目には、クォータの単位を設定します。
設定されたクォータ単位に応じて値の計算はしないため(入力された値がそのまま登録)、メールサーバソフトウェアのクォータ単位に合わせて設定する必要があります。

web.confの設定項目については、第5章を参照してください。

3.4.1.2 tab.conf

次のディレクトリにtab.confのサンプルが用意されています。

[展開ディレクトリ]/postldapadmin/etc/tab.conf.sample

以下のようにコピーしてください。

# cp tab.conf.sample test.designet.jp/tab.conf

3.4.1.3 user_tab.conf

次のディレクトリにtab.confのサンプルが用意されています。

[展開ディレクトリ]/postldapadmin/etc/user_tab.conf.sample

以下のようにコピーしてください。

# cp user_tab.conf.sample test.designet.jp/user_tab.conf

web.confのForwardConfをon(=1)に設定する場合はuser_tab.confに以下を追記してください。

postldapadmin/forward:メール転送設定

3.4.1.4 admin.key

web.confを用意したら、暗号化キーファイル(admin.key)を設定します。postLDAPadminでは、admin.keyで指定した文字列をもとに暗号化したキーを利用してセッション管理を行っています。任意の文字列を設定してください。次のディレクトリにadmin.keyのサンプルが用意されています。

[展開ディレクトリ]/postldapadmin/etc/admin.key.sample

コピーして以下のように設定してください。

# cp admin.key.sample test.designet.jp/admin.key

admin.keyの設定例

 DxcMSHCM

3.4.2 メール保管アカウント、ディレクトリの準備

設定ファイルの準備ができたら、以下の設定を行います。

  • メール保管アカウントの作成
  • メール保管ディレクトリの作成
  • postLDAPadminログの設定

次の例にしたがって設定を行ってください。

メール保管アカウントの作成

# useradd -u 400 -s /sbin/nologin -m vmail

メール保管ディレクトリの作成

# mkdir -p /home/mail/test.designet.jp
# chown -R vmail:vmail /home/mail/test.designet.jp

postLDAPadminログの設定

ログ出力にはsyslogを使用します。/etc/syslog.confに以下を追記してください

local1.*          /var/log/postLDAPadmin.log

syslogを再起動し、設定を反映させてください

# /etc/rc.d/init.d/syslog restart

以下のようにログファイルに権限を付加します。

# chown apache:apache /var/log/postLDAPadmin.log

本書では、Webサーバの実行アカウントを「apache」として、ログファイルにapacheアカウントの権限を付与しています。

3.4.3 スクリプトの設定

web.confのForwardConfをon(=1)に設定して利用する場合には、dovecot.sieveファイルを作成するスクリプトの設定を行う必要があります。 次の例にしたがって設定を行ってください。

実行スクリプトは以下のパスです。

[展開ディレクトリ]/postldapadmin/bin/make_sieve

sudoに実行登録を行ないます。
以下はhttpdがapacheユーザで実行されている場合の設定例です。

# visudo
apache  ALL=(ALL)       NOPASSWD: [展開ディレクトリ]/postldapadmin/bin/make_sieve

3.5 Webサーバの設定

Apacheの設定のためにhttpd.confファイルを編集します。以下の4点の設定を行ってください。

  • ディレクトリアクセス制御設定
  • 環境変数の設定
  • DirectoryIndexの設定
  • include_pathの設定

3.5.1 ディレクトリアクセス制御設定

postLDAPadminの管理者用インターフェースとユーザ用インタフェースに対してアクセス許可設定を行います。次のディレクトリに対してアクセス許可の設定を行ってください。

[展開ディレクトリ]/postldapadmin/htdocs/ 

次は、postLDAPadminアーカイブを/usr/local/に展開した場合の例です。

httpd.confの設定例
<Directory "/usr/local/postldapadmin/htdocs">
    order deny,allow
    deny from all
    allow from all
</Directory>

3.5.2 環境変数の設定

postLDAPadminのWebインタフェースで使用する環境変数を設定します。

httpd.confの設定例
SetEnv LOGNAME test.designet.jp
SetEnv DOMAIN test.designet.jp

3.5.2.1 LOGNAME

postLDAPadminのログに出力するサーバ名を設定してください。

3.5.2.2 DOMAIN

postLDAPadminのWebインタフェースから仮想ユーザを登録する際のメールアドレスのドメインパートとして使用する値を設定します。仮想メールボックスに配送するドメイン名(仮想ドメイン)を設定してください。

3.5.3 DirectoryIndexの設定

DirectoryIndexに「index.php」の指定がない場合は、DirectoryIndexの記述に「index.php」を追加してください。

httpd.confの設定例
DirectoryIndex  index.php index.php

3.5.4 phpのinclude_pathの設定

postLDAPadminのインストール先の情報を得るために、php.iniのinclude_pathの設定を行います。
次は、postLDAPadminを/usr/local/に展開した例です。
既に設定されている場合には、/usr/local/postldapadmin/を追記してください。

include_path=".:/usr/local/lib:/usr/local/postldapadmin/"

3.5.5 エイリアス設定

postLDAPadminアーカイブをドキュメントディレクトリ以外の場所で展開した場合は、エイリアスの設定を行ってください。postLDAPadminの管理者用インタフェース、ユーザ用インタフェースのURLを、次のディレクトリへマッピングします。

[展開ディレクトリ]/postldapadmin/htdocs/

次は、postLDAPadminアーカイブを/usr/local/に展開した例です。

httpd.confの設定例
Alias /postldapadmin/ "/usr/local/postldapadmin/htdocs/"

以上の設定を行い、Webサービスを起動したら、postLDAPadminのWebインタフェースにアクセスすることができます。

  • 管理者用インタフェース

    http://test.designet.jp/postldapadmin/admin/

  • ユーザ用インタフェース

    http://test.designet.jp/postldapadmin/user/

管理者用インタフェース、ユーザ用インタフェースにアクセスすると、図[*]のようなログイン画面が表示されます。

図: ログイン画面
Image 3_login

3.5.6 複数の仮想ドメインを管理したいとき

複数の仮想ドメインを管理する場合は、仮想ドメイン毎に環境変数LOGNAME、DOMAINの値を設定する必要があります。次の例にならい、VirtualHostを作成し、VirtualHostごとに環境変数LOGNAME、DOMAINを設定してください。

httpd.confの設定例
<VirtualHost *:80>
    ServerName test.designet.jp                       ← 管理する仮想ドメイン(1)

    SetEnv LOGNAME test.designet.jp
    SetEnv DOMAIN test.designet.jp

    Alias /postldapadmin/ "/usr/local/postldapadmin/htdocs/"
</VirtualHost>

<VirtualHost *:80>
    ServerName domain.designet.jp                     ← 管理する仮想ドメイン(2)

    SetEnv LOGNAME domain.designet.jp
    SetEnv DOMAIN domain.designet.jp

    Alias /postldapadmin/ "/usr/local/postldapadmin/htdocs/"
</VirtualHost>

複数の仮想ドメインを管理している場合、VirtualHost単位でinclude_pathの設定も可能です。
次は、httpd.confのVirtualHostに設定した例です。

httpd.confの設定例
<VirtualHost *:80>
    ServerName test.designet.jp

    SetEnv LOGNAME test.designet.jp
    SetEnv DOMAIN test.designet.jp

    Alias /postldapadmin/ "/usr/local/postldapadmin/htdocs/"

    php_value include_path ".:/usr/local/lib:/usr/local/postldapadmin/" ← include_pathの指定
</VirtualHost>


next up previous contents
Next: 4. 使い方 Up: postLDAPadmin Previous: 2. 計画

2017年08月18日