arinux

Linux サーバー設定備忘録
phpLdapPasswd (3) - カスタマイズ(2)


メモメッセージの日本語表示


  1. ポリシーチェックに引っかかった際のメッセージを日本語で表示したい場合は、 「xenos.php」 の以下の箇所を編集します。
    [root]# cd /home/gamba/public_html/phpLdapPasswd/policies
    [root]# vi xenos.php
    
        if (strlen($password) < $MINLEN) {
    //return("Password must be at least $MINLEN characters long.");
            return("パスワードは最低 $MINLEN 文字以上にしてください。");
        }
    
        if (stristr($password, $user)) {
    //return("Password cannot contain your user ID");
            return("パスワードに User ID が含まれています。");
        }
    
        if (strlen(ereg_replace("[0-9]", "", $password)) + $MINNUMBER > $count) {
            $string = ($MINNUMBER>1)?"numbers":"number";
    //return("Password must contain at least $MINNUMBER $string.");
            return("パスワードには最低 $MINNUMBER つの数字を含めてください。");
        }
    


  2. 入力チェックに引っかかった際のメッセージを日本語で表示したい場合は、「index.php」 の以下の箇所を編集します。
    [root]# cd /home/gamba/public_html/phpLdapPasswd
    [root]# vi index.php
    
    // Perform some basic error checking.
    if (!$user) {
    //      display_template($TEMPLATE_CHANGEPASS, "You did not specify a user ID");
            display_template($TEMPLATE_CHANGEPASS, "ユーザーID が入力されていません。");
    }
    
    if (($IDCHARACTERS) && (strlen(preg_replace("/$IDCHARACTERS/", "", $user)) > 0)) {
            $user = "";
    //      display_template($TEMPLATE_CHANGEPASS, "Your user ID contains invalid characters");
            display_template($TEMPLATE_CHANGEPASS, "ユーザーID に不正な文字(全角など)が含まれ
    ています。");
    }
    
    if (!$oldpass) {
    //      display_template($TEMPLATE_CHANGEPASS, "You did not specify your current password");
            display_template($TEMPLATE_CHANGEPASS, "旧パスワードが入力されていません。");
    }
    
    if (!$newpass) {
    //      display_template($TEMPLATE_CHANGEPASS, "You did not specify your new password");
            display_template($TEMPLATE_CHANGEPASS, "新パスワードが入力されていません。");
    }
    
    if (!$newpass2) {
    //      display_template($TEMPLATE_CHANGEPASS, "You did not confirm your new password");
            display_template($TEMPLATE_CHANGEPASS, "新パスワード(再入力)が入力されていません。");
    }
    
    if (strcmp("$newpass", "$newpass2") != 0) {
    //      display_template($TEMPLATE_CHANGEPASS, "Your new passwords do not match");
            display_template($TEMPLATE_CHANGEPASS, "新パスワードが一致しません。");
    }
    
    // Get the DN for the user.
    $ds = my_ldap_connect($LDAPSERVER, $LDAPPORT, $USETLS, $LDAPVERSION);
    if (!($dn = get_dn($ds, $user))) {
            if ($PARANOID) {
                    display_template($TEMPLATE_CHANGEPASS, "You gave an incorrect user ID 
    and/or current password");
            }
            $attempted_user = $user;
            $user = "";
    //      display_template($TEMPLATE_CHANGEPASS, "User ID $attempted_user not found");
            display_template($TEMPLATE_CHANGEPASS, "ユーザーID $attempted_user は見つかりません
    でした。");
    }
    
    // Check the current password.
    if (!($ldapbind = @ldap_bind($ds, $dn, $oldpass))) {
            if ($PARANOID) {
                    display_template($TEMPLATE_CHANGEPASS, "You gave an incorrect user ID 
    and/or current password");
            }
    //      display_template($TEMPLATE_CHANGEPASS, "You gave an incorrect current password");
            display_template($TEMPLATE_CHANGEPASS, "旧パスワードが正しくありません。");
    }
    


  3. パスワード変更が成功した時のメッセージを日本語で表示したい場合は、 「index.php」 の以下の箇所を編集します。
    [root]# cd /home/gamba/public_html/phpLdapPasswd
    [root]# vi index.php
    
    //display_template($TEMPLATE_CHANGEPASS, $error, "Your password has been succes
    sfully changed");
    display_template($TEMPLATE_CHANGEPASS, $error, "パスワード変更が成功しました。");
    



ここまで

| arinux | openldap | 12:59 | comments(0) | trackbacks(0) | pookmark |
phpLdapPasswd (2) - カスタマイズ(1)


メモパスワード変更画面のカスタマイズ


  1. パスワード変更の画面を日本語にしたい場合は、以下のように編集します。
    [root]# cd /home/gamba/public_html/phpLdapPasswd/templates
    [root]# vi passwordChange.html
    
    オリジナル
    <style type="text/css" media="all">
    @import "templates/phpLdapPasswd.css";
    </style>
    
    編集後
    <meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
    <style type="text/css" media="all">
    @import "templates/phpLdapPasswd.css";
    </style>
    
    オリジナル <h1>Change Password</h1> <p> This form will allow you to change your password. Please make sure that your new password meets any applicable password policies. </p> 編集後 <h1>パスワード変更</h1> <p> 以下のフォームでパスワードを変更できます。適切なパスワードを入力してください。 </p>
    オリジナル <h2>Change Form</h2> 編集後 <h2>変更フォーム</h2>


  2. パスワードの入力フォームを日本語にする場合は、以下のように編集します。
    [root]# cd /home/gamba/public_html/phpLdapPasswd
    [root]# vi functions.php
    
    オリジナル
    <td><p><strong>User ID</strong></p></td>
    
    編集後
    <td><p><strong>ユーザー名</strong></p></td>
    
    オリジナル <td><p><strong>Current Password</strong></p></td> 編集後 <td><p><strong>旧パスワード</strong></p></td>
    オリジナル <td><p><strong>New Password</strong></p></td> 編集後 <td><p><strong>新パスワード</strong></p></td>
    オリジナル <td><p><strong>New Password (again)</strong></p></td> 編集後 <td><p><strong>新パスワード(再入力)</strong></p></td>
    オリジナル <center><input type="submit" value="Change Password"></center> 編集後 <center><input type="submit" value="パスワード変更"></center>


  3. 上記の編集により、パスワード変更の画面は以下のようになります。
    phpLdapPasswd 変更フォームの日本語表示



メモPassword Suggestions の変更


「Password Suggestions」 は、画面が更新されるたびに、指定された文字数で生成されたパスワードをサンプルとして表示します。生成されるパスワードを、パスワード・ポリシーとマッチしたものに変更します。


  1. どのファイルによって生成するかは、「config.php」 に書かれています。
    $GENERATEPASSWORD = "./generators/random.php";
    


  2. 以下のように編集します。
    [root]# cd /home/gamba/public_html/phpLdapPasswd/generators
    [root]# vi random.php
    
        // Number of passwords to generate for suggestions.
        // 生成する個数
        $number_suggestions = 6;
    
        // Length of the passwords.
        // パスワードの文字数
        $length = 8;
    
        // パスワードで使用する文字、randchar.php で定義
        // abc = alphabetic(英字のみ)
        // anc = alphanumeric(英字と数字)
        // hxd = hexadecimal(16進[0-9,A-F])
        // nmc = numeric(数字のみ)
        $range = 'anc';
    
        // パスワードの形態、randchar.php で定義
        // l = lower(小文字)
        // u = upper(大文字)
        // m = mixed(小文字と大文字をミックス)
        $case = 'm';
    


  3. 「Password Suggestions」 を日本語にする場合は、以下のようにします。
    [root]# cd /home/gamba/public_html/phpLdapPasswd/templates
    [root]# vi passwordChange.html
    
    オリジナル
    <h2>Password Suggestions</h2>
    
    編集後
    <h2>パスワードの例</h2>
    


  4. 以下は、「Password Suggestions」 の箇所を、パスワード・ポリシーの説明に変えた例です。
    オリジナル
    <td valign="top">
    <h2>Password Suggestions</h2>
    <!-- INSERT PHPLDAPPASSWD PASSWORDSUGGEST -->
    </td>
    
    編集後
    <td valign="top">
    <h2>パスワード・ポリシー</h2>
    <ul>
    <li> 8文字以上
    <li> 1文字以上の数字を含める
    <li> ユーザーID を含めない
    </ul>
    </td>
    


  5. 上記の編集により、パスワード変更の画面は以下のようになります。
    phpLdapPasswd 「Password Suggestions」の変更例



メモ「password reset」 の停止


パスワード・リセットの機能そのものを停止する場合は、以下のようにします。


  1. パスワード変更画面から、「password reset」 のリンクをクリックすると、パスワード・リセット画面へ移ります。以下は、その画面です。
    phpLdapPasswd 「Reset Password」画面


  2. reset.php を rename します。
    [root]# cd /home/gamba/public_html/phpLdapPasswd
    [root]# mv reset.php reset.php_save
    


  3. 「$RESETFREQUENCY」 の値を変更します。
    [root]# vi config.php
    変更前
    $RESETFREQUENCY = 1;
    
    変更後
    $RESETFREQUENCY = -1;
    


  4. パスワード変更画面から、「password reset」 へのリンクを削除します。
    [root]# cd /home/gamba/public_html/phpLdapPasswd/templates
    [root]# vi passwordChange.html
    (以下を削除)
    
    <p>
    If you have forgotten your current password, please visit the
    <a href="reset.php">password reset</a>
    page.
    </p>
    



つづく

| arinux | openldap | 10:11 | comments(0) | trackbacks(0) | pookmark |
phpLdapPasswd (1) - インストールと設定


「phpLdapPasswd」 は、PHP と LDAP関数を使用して、ブラウザからユーザーまたは管理者のパスワードの変更、リセットを実行するツールです。


メモphpLdapPasswd インスト―ル


  1. http://www.karylstein.com/phpLdapPasswd から、
    「phpLdapPasswd-0.5.tar.gz 」 をダウンロードして、「/usr/local/src」 に置きます。


  2. 解凍します(例として、DocumentRoot に解凍します)。
    [root]# cd /home/gamba/public_html
    [root]# tar zxvf /usr/local/src/phpLdapPasswd-0.5.tar.gz
    


  3. 「phpLdapPasswd」 ディレクトリ以下のユーザーとグループを変更します。
    [root]# chown -R gamba:gyomu phpLdapPasswd
    


  4. クライアントのブラウザから、「phpLdapPasswd/index.php」 にアクセスします。
    phpLdapPasswd パスワード変更画面


  5. 管理者パスワード変更の際は、、「phpLdapPasswd/admin.php」 にアクセスします。
    phpLdapPasswd 管理者パスワード変更画面



メモphpLdapPasswd コンフィグレーション・ファイル設定


  1. 「config.php」 を以下のように編集します。
    [root]# cd /home/gamba/public_html/phpLdapPasswd
    [root]# vi config.php
    (テストでは、青字の部分を変更しました)
    <?php
    $LDAPSERVER = "ldap://localhost/";
    $LDAPPORT = 389;
    $LDAPBASEDN = "dc=examples,dc=com";
    $LDAPVERSION = 3;
    $USETLS = 0;
    $ENCODING = MD5;
    $IDATTRIBUTE = uid;
    $IDCHARACTERS = "[A-Za-z0-9-_.@]";
    $PARANOID = 0;
    $CHANGELASTDATE = 0;
    $LASTDATEBINDDN = "cn=Manager,dc=exapmples,dc=com";
    $LASTDATEBINDPW = "bindpasswd";
    $LASTDATEATTRIBUTE = "shadowLastChange";
    $SYSADMINEMAIL = "root@localhost";
    $AUTOEMAIL = 0;
    $TEMPLATE_ADMINPASS = "./templates/passwordAdmin.html";
    $TEMPLATE_CHANGEPASS = "./templates/passwordChange.html";
    $TEMPLATE_RESETPASS = "./templates/passwordReset.html";
    $TEMPLATE_ERROR = "./templates/passwordError.html";
    $CHECKPASSWORD = "./policies/xenos.php";
    $GENERATEPASSWORD = "./generators/random.php";
    $ERROR_MESSAGE = "<p style=¥"margin-top:0px;margin-bottom:0px¥">
    <strong style=¥"color:red¥">Error:</strong> <strong><!-- ERROR --></strong></p>";
    $RESETBINDDN = "cn=Manager,dc=exapmples,dc=com";
    $RESETBINDPW = "bindpasswd";
    $MAILATTRIBUTE = mail;
    $RESETFREQUENCY = 1;
    $RESETATTEMPTS = 10;
    $RESET_MAILBODY = "templates/mailReset.txt";
    $RESET_MAILSUBJECT = "Password Reset";
    $RESET_MAILFROM = $SYSADMINEMAIL;
    define("GENERATE_SUGGESTIONS", 1);
    define("GENERATE_PASSWORD", 2);
    define("FORM_NULL", 0);
    define("FORM_ADMIN", 1);
    define("FORM_CHANGE", 2);
    define("FORM_RESET", 4);
    ?>
    



メモphpLdapPasswd パスワードポリシー設定


「phpLdapPasswd」 によるパスワード変更は、LDAP関数を使用して直接 「userPassword」 に新しいパスワード書き込みますので、パスワードポリシーは、「phpLdapPasswd」 の中で設定します。


※OS もしくは LDAP 上のパスワードポリシーは適用されません。


  1. どのファイルによってポリシーチェックをするかは、「config.php」 に書かれています。
    $CHECKPASSWORD = "./policies/xenos.php";
    


  2. パスワードポリシーを設定します。
    [root]# cd /home/gamba/public_html/phpLdapPasswd/policies
    [root]# vi xenos.php
    
        // Minimum length of password.
        // 最小文字数
        $MINLEN = 8;
    
        // Maximum length of password.
        //最大文字数
        $MAXLEN = 250;
    
        // Set to 1 if the password cannot contain the user ID
        //パスワードの中に user ID を含めさせないなら 1 にセット
        $NOUSER = 1;
    
        // Minimum number of uppercase letters required.
        //含めなければいけない大文字の最小数
        $MINUPPER = 0;
    
        // Minimum number of lowercase letters required.
        //含めなければいけない小文字の最小数
        $MINLOWER = 0;
    
        // Minimum number of numbers required.
        //含めなければいけない数字の最小数
        $MINNUMBER = 1;
    
        // Minimum number of special characters required.
        // 含めなければいけない記号の最小数
        $MINSPECIAL = 0;
    



メモパスワード変更テスト


  1. 以下のように、パスワードを変更してみます。
    phpLdapPasswd パスワード変更の実行


  2. 以下は、パスワード変更が成功した場合に表示される画面です。
    phpLdapPasswd パスワード変更の成功画面



つづく

| arinux | openldap | 16:17 | comments(0) | trackbacks(0) | pookmark |
openLDAP 構築(45) - マルチマスター(MirrorMode) (2)


メモ レプリケーション(複製)・テスト


青い旗 node 1【Active】 ― 【Active】node 2


  1. 「node 1」「node 2」 ともに、Active(slapd が起動した状態) で始めます。


  2. 「node 1」 でエントリーを追加します。
    ●node 1
    [root]# cat useradd_jef.ldif
    dn: uid=jef,ou=people,dc=examples,dc=com
    uid: jef
    objectClass: top
    objectClass: account
    objectClass: posixAccount
    objectClass: shadowAccount
    cn: jef
    uidNumber: 25011
    gidNumber: 1001
    userPassword: {MD5}X03MO1qnZdYdgyfeuILPmQ==
    homeDirectory: /home/jef
    loginShell: /bin/bash
    
    [root]# ldapadd -x -W -D "cn=Manager,dc=examples,dc=com" -f ./useradd_jef.ldif
    Enter LDAP Password:
    adding new entry "uid=jef,ou=people,dc=examples,dc=com"
    


  3. DB のログファイルの更新日時を、各 node 上で確認します。
    ●node 1
    [root]# ls -l /usr/local/var/openldap-data/log.0000000001
    -rw-------  1 ldap ldap  10485760 Mar  7 14:08 log.0000000001
    (エントリーが更新された日時になります)
    
    ●node 2
    [root]# ls -l /usr/local/var/openldap-data/log.0000000001
    -rw-------  1 ldap ldap  10485760 Mar  7 14:08 log.0000000001
    (複製された日時になります)
    


  4. エントリーが追加されたことを、各 node 上で確認します。
    ●node 1
    [root]# ldapsearch -x -h localhost uid=jef
    (省略)
    # jef, people, examples.com
    dn: uid=jef,ou=people,dc=examples,dc=com
    (省略)
    
    ●node 2
    [root]# ldapsearch -x -h localhost uid=jef
    (省略)
    # jef, people, examples.com
    dn: uid=jef,ou=people,dc=examples,dc=com
    (省略)
    


    虫眼鏡 解説


    この例は、「node 1」 に対する更新分が 「node 2」 に直ちに複製されたことを示しています。


赤い旗 node 1【Inactive】 ― 【Active】node 2


  1. 「node 1」 の slapd を停止します。
    ●node 1
    [root]# /etc/rc.d/init.d/slapd stop
    


  2. 「node 2」 でエントリーを削除します。
    ●node 2
    [root]# ldapdelete -x -W -D "cn=Manager,dc=examples,dc=com" "uid=jef,ou=people,dc=examples,dc=com"
    Enter LDAP Password:
    


  3. 「node 2」 でエントリーが削除されたことを確認します。
    ●node 2
    [root]# ldapsearch -x -h localhost uid=jef
    


  4. 「node 1」 の slapd を起動します。
    ●node 1
    [root]# /etc/rc.d/init.d/slapd start
    


  5. DB のログファイルの更新日時を、各 node 上で確認します。
    ●node 1
    [root]# ls -l /usr/local/var/openldap-data/log.0000000001
    -rw-------  1 ldap ldap  10485760 Mar  7 15:25 log.0000000001
    (複製された日時になります)
    
    ●node 2
    [root]# ls -l /usr/local/var/openldap-data/log.0000000001
    -rw-------  1 ldap ldap  10485760 Mar  7 15:23 log.0000000001
    (エントリーが更新された日時になります)
    


  6. 「node 1」 でエントリーが削除されたことを確認します。
    ●node 1
    [root]# ldapsearch -x -h localhost uid=jef
    


    虫眼鏡 解説


    この例は、「node 2」 に対する更新分が 「node 1」 に正しく複製されたことを示しています。


赤い旗 node 1【Active】 ― 【Inactive】node 2


  1. 「node 2」 の slapd を停止します。
    ●node 2
    [root]# /etc/rc.d/init.d/slapd stop
    


  2. 「node 1」 でエントリーを追加します。


    ●node 1
    [root]# cat useradd_marinos.ldif
    dn: uid=marinos,ou=people,dc=examples,dc=com
    uid: marinos
    objectClass: top
    objectClass: account
    objectClass: posixAccount
    objectClass: shadowAccount
    cn: marinos
    uidNumber: 25012
    gidNumber: 1001
    userPassword: {MD5}X03MO1qnZdYdgyfeuILPmQ==
    homeDirectory: /home/marinos
    loginShell: /bin/bash
    
    [root]# ldapadd -x -W -D "cn=Manager,dc=examples,dc=com" -f ./useradd_marinos.ldif
    Enter LDAP Password:
    adding new entry "uid=marinos,ou=people,dc=examples,dc=com"
    


  3. 「node 1」 でエントリーが追加されたことを確認します。
    ●node 1
    [root]# ldapsearch -x -h localhost uid=marinos
    (省略)
    # marinos, people, examples.com
    dn: uid=marinos,ou=people,dc=examples,dc=com
    (省略)
    


  4. 「node 2」 の 「slapd」 を起動します。
    ●node 2
    [root]# /etc/rc.d/init.d/slapd start
    


  5. DB のログファイルの更新日時を、各 node 上で確認します。
    ●node 1
    [root]# ls -l /usr/local/var/openldap-data/log.0000000001
    -rw-------  1 ldap ldap  10485760 Mar  7 15:54 log.0000000001
    (エントリーが更新された日時になります)
    
    ●node 2
    [root]# ls -l /usr/local/var/openldap-data/log.0000000001
    -rw-------  1 ldap ldap  10485760 Mar  7 15:59 log.0000000001
    (複製された日時になります)
    


  6. 「node 2」 でエントリーが追加されたことを確認します。
    ●node 2
    [root]# ldapsearch -x -h localhost uid=marinos
    (省略)
    # marinos, people, examples.com
    dn: uid=marinos,ou=people,dc=examples,dc=com
    (省略)
    


    虫眼鏡 解説


    この例は、「node 1」 に対する更新分が 「node 2」 に正しく複製されたことを示しています。


メモ 備考


  • slapd が停止中の node に対しては、どんな更新操作も行えません。もし、slapd が停止中の node に対して 「ldapsearch」 や 「ldapdelete」 などのコマンドを発行した場合は、以下のエラーが出力されます。
    ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)
    


  • クライアントから Active の node に対してコマンドを発行する時は、以下のようにします。
    [root]# ldapadd -x -W -H "ldap://ldap-node2.examples.com/" ¥
    -D "cn=Manager,dc=examples,dc=com" -f ./useradd_jef.ldif
    



ここまで

| arinux | openldap | 13:31 | comments(0) | trackbacks(0) | pookmark |
openLDAP 構築(44) - マルチマスター(MirrorMode) (1)


メモ テスト環境


機種NEC Express5800
OSCentOS 4.5
kernel2.6.9-55.EL
LDAPopenldap-2.4.8



メモ MirrorMode 概要


この例では、2台のサーバーがいずれもマスターとなるように、「node 1」 「node 2」 として MirrorMode を構成します。なお、3台以上によるマルチマスター構成は、未検証です。


  • 2台の node 間はセッションを張ったままにして、いずれか一方の node に更新された内容を、もう一方の node に push します。
  • 「refreshAndPersist」 モードの場合は、更新後直ちにもう一台に差分が push されます。
  • いずれかの 「マスター」 が停止しても、稼働中の 「マスター」 に対して更新が行えます。
  • 停止していた node が再起動した際に、自動的に再同期が行われます。
  • 但し、MirrorMode は厳密に言うと 「Multi-Master solution」 とは呼びません。なぜなら、仮想的な mirror device を使用するわけではなく、また物理的な 2台に同時に書き込みが行われるわけではないからです。あくまでもいずれかの node に書かれた後、もう一方の node に同期されます。
  • ゆえに、MirrorMode は 「Active-Active Hot-Standby」 と呼ばれます。



メモ MirrorMode 設定


  1. 「node 1」 「node 2」 とも、openldap サーバーの環境が整っている状態で始めます。


  2. 「node 1」 「node 2」 とも、slapd デーモンは停止した状態で始めます。


  3. 「node 1」 の 「/usr/local/etc/openldap/slapd.conf」 に、以下を追加します。
    ●node 1
    index entryCSN,entryUUID eq
    
    overlay syncprov
    
    syncrepl        rid=1
                    provider=ldap://ldap-node1.examples.com
                    bindmethod=simple
                    binddn="cn=Manager,dc=examples,dc=com"
                    credentials=bindpasswd
                    searchbase="dc=examples,dc=com"
                    schemachecking=on
                    type=refreshAndPersist
                    retry="60 +"
    
    syncrepl        rid=2
                    provider=ldap://ldap-node2.examples.com
                    bindmethod=simple
                    binddn="cn=Manager,dc=examples,dc=com"
                    credentials=bindpasswd
                    searchbase="dc=examples,dc=com"
                    schemachecking=on
                    type=refreshAndPersist
                    retry="60 +"
    
    mirrormode      on
    serverID        1
    


    虫眼鏡 注意


    • 「credentials」 には、「openLDAP 構築(6) で生成したパスワード」 を平文で記述します。
    • 「serverID」 は、MirrorMode を構成する node の中で、ユニークな番号でなければいけません。
  4. 「node 1」 の 「/usr/local/etc/openldap/slapd.conf」 を 「node 2」 にコピーします。
    ●node 1
    [root]# scp -p /usr/local/etc/openldap/slapd.conf 10.1.1.16:/tmp
    root@10.1.1.16's password:
    slapd.conf                          100% 3999     3.9KB/s   00:00
    


  5. 「node 2」 の 「/usr/local/etc/openldap/slapd.conf」 を入れ替えます。
    ●node 2
    [root]# cd /usr/local/etc/openldap
    [root]# mv slapd.conf slapd.conf.save02
    [root]# cp /tmp/slapd.conf .
    


  6. 「node 2」 の 「slapd.conf」 設定を、以下のようにします。
    ●node 2
    overlay syncprov
    
    syncrepl        rid=1
                    provider=ldap://ldap-node2.examples.com    #ここ注意!
                    bindmethod=simple
                    binddn="cn=Manager,dc=examples,dc=com"
                    credentials=bindpasswd
                    searchbase="dc=examples,dc=com"
                    schemachecking=on
                    type=refreshAndPersist
                    retry="60 +"
    
    syncrepl        rid=2
                    provider=ldap://ldap-node1.examples.com    #ここ注意!
                    bindmethod=simple
                    binddn="cn=Manager,dc=examples,dc=com"
                    credentials=bindpasswd
                    searchbase="dc=examples,dc=com"
                    schemachecking=on
                    type=refreshAndPersist
                    retry="60 +"
    
    mirrormode      on
    serverID        2     #ここ注意!
    


    虫眼鏡 注意


    • 「credentials」 には、「openLDAP 構築(6) で生成したパスワード」 を平文で記述します。
    • 「serverID」 は、MirrorMode を構成する node の中で、ユニークな番号でなければいけません。
  7. 「openLDAP 構築(22) - SSL/TLS」 を参考に、「node 2」 上でサーバー証明書と秘密鍵を作成します。


  8. 「node 1」 の DB を 「node 2」 にコピーします。
    ●node 1
    [root]# cd /usr/local/var/openldap-data
    [root]# tar zcvf ../master02.tar.gz .
    [root]# cd ..
    [root]# scp -p ./master02.tar.gz 10.1.1.16:/tmp
    root@10.1.1.16's password:
    master02.tar.gz                          100%  680KB 680.3KB/s   00:00
    


  9. 「node 2」 の LDAP DB 用のディレクトリを再作成します。
    ●node 2
    [root]# cd /usr/local/var
    [root]# mv openldap-data openldap-data.save02
    [root]# mkdir openldap-data
    [root]# chown ldap:ldap openldap-data
    


  10. コピーしたファイルを 「node 2」 上で解凍します。
    ●node 2
    [root]# cd /usr/local/var/openldap-data
    [root]# cp /tmp/master02.tar.gz .
    [root]# tar zxvf master02.tar.gz
    [root]# rm master02.tar.gz
    


  11. 「node 1」 と 「node 2」 の 「/etc/ldap.conf」 の 「host」 を、以下のようにします。
    ●node 1
    host 127.0.0.1 10.1.1.16   # 10.1.1.16 は node 2 の IP アドレス
    

    ●node 2
    host 127.0.0.1 10.1.1.15   # 10.1.1.15 は node 1 の IP アドレス
    


  12. 「node 1」 の 「slapd」 を起動します。
    ●node 1
    [root]# /etc/rc.d/init.d/slapd start
    


  13. 「node 2」 の 「slapd」を起動します。
    ●node 2
    [root]# /etc/rc.d/init.d/slapd start
    




つづく

| arinux | openldap | 14:26 | comments(0) | trackbacks(0) | pookmark |
openLDAP 構築(43) - パスワードポリシー(ppolicy) (2)


メモ パスワード履歴(pwdInHistory)


ここでは、例として 「frontale」 ユーザーでログインして、パスワードを変更してみます。Default ポリシーでは 「pwdInHistory: 2」 にセットしていますので、過去 2つの履歴が残ることになります。なお、現在のパスワードは履歴にはまだ入っていません。


  1. passwd コマンドで履歴に残っているパスワードに変更してみます。
    [frontale]$ passwd
    Changing password for user frontale.
    Enter login(LDAP) password: <現在のパスワード>
    New password: <履歴にあるパスワード>
    Retype new password: <再入力>
    LDAP password information changed for frontale
    passwd: all authentication tokens updated successfully.
    
    passwd コマンドでは、パスワード履歴を参照しません。


  2. ldappasswd コマンドでパスワードを変更してみます。
    [frontale]$ ldappasswd -x -D 'cn=kawasaki frontale,ou=people,dc=examples,dc=com' -W -S
    New password: <履歴にあるパスワード>
    Re-enter new password: <再入力>
    Enter LDAP Password: <現在のパスワード>
    Result: Constraint violation (19)
    Additional info: Password is in history of old passwords
    
    ldappasswd コマンドでは、パスワード履歴を参照します。


  3. 新しいパスワードに現在のパスワードを入力した場合は、以下のようになります。
    [frontale]$ ldappasswd -x -D 'cn=kawasaki frontale,ou=people,dc=examples,dc=com' -W -S
    New password: <現在のパスワード>
    Re-enter new password: <再入力>
    Enter LDAP Password: <現在のパスワード>
    Additional info: Password is not being changed from existing value
    



メモ パスワード履歴(pwdInHistory)- ハッシュ値


ここでは、例として 「frontale」 ユーザーでログインして、パスワードを変更してみます。Default ポリシーでは 「pwdInHistory: 2」 にセットしていますので、過去 2つの履歴が残ることになります。


  1. 現在の状況を確認します。
    [frontale]$ ldapsearch -x -h localhost uid=frontale +
    # kawasaki frontale, people, examples.com
    dn: cn=kawasaki frontale,ou=people,dc=examples,dc=com
    structuralObjectClass: inetOrgPerson
    entryUUID: db3bd614-2ab6-102c-9835-91a0fa518afd
    creatorsName: cn=Manager,dc=examples,dc=com
    createTimestamp: 20071119064610Z
    entryCSN: 20071119064610Z#000000#00#000000
    modifiersName: cn=Manager,dc=examples,dc=com
    modifyTimestamp: 20071119064610Z
    entryDN: cn=kawasaki frontale,ou=people,dc=examples,dc=com
    subschemaSubentry: cn=Subschema
    hasSubordinates: FALSE
    
    一度もパスワードを変更していない状況では、履歴は残されていません。


  2. passwd コマンドでパスワードを変更してみます。
    [frontale]$ passwd
    Changing password for user frontale.
    Enter login(LDAP) password: <現在のパスワード>
    New password:
    Retype new password:
    LDAP password information changed for frontale
    passwd: all authentication tokens updated successfully.
    
    [frontale]$ ldapsearch -x -h localhost uid=frontale +
    # kawasaki frontale, people, examples.com
    dn: cn=kawasaki frontale,ou=people,dc=examples,dc=com
    structuralObjectClass: inetOrgPerson
    entryUUID: db3bd614-2ab6-102c-9835-91a0fa518afd
    creatorsName: cn=Manager,dc=examples,dc=com
    createTimestamp: 20071119064610Z
    pwdChangedTime: 20080107075438Z
    pwdHistory: 20080107075438Z#1.3.6.1.4.1.1466.115.121.1.40#29#{MD5}bdamui2LVazu
     sTlHKGNUxw==
    entryCSN: 20080107075438Z#000000#00#000000
    modifiersName: cn=kawasaki frontale,ou=people,dc=examples,dc=com
    modifyTimestamp: 20080107075438Z
    entryDN: cn=kawasaki frontale,ou=people,dc=examples,dc=com
    subschemaSubentry: cn=Subschema
    hasSubordinates: FALSE
    
    「pwdHistory」 という属性に、過去のパスワードが保存されました。


  3. もう一度、パスワードを変更してみます。
    [frontale]$ passwd
    Changing password for user frontale.
    Enter login(LDAP) password: <現在のパスワード>
    New password:
    Retype new password:
    LDAP password information changed for frontale
    passwd: all authentication tokens updated successfully.
    
    [frontale]$ ldapsearch -x -h localhost uid=frontale +
    # kawasaki frontale, people, examples.com
    (省略)
    pwdHistory: 20080107075438Z#1.3.6.1.4.1.1466.115.121.1.40#29#{MD5}bdamui2LVazu
     sTlHKGNUxw==
    pwdHistory: 20080107080430Z#1.3.6.1.4.1.1466.115.121.1.40#41#{crypt}$1$hwbXI04
     3$vuoaWZfgM.iOXKAJg/zZ91
    (省略)
    
    2つ目の 「pwdHistory」 が保存されました。ハッシュは 「crypt」 になっています。


  4. ldappasswd コマンドでパスワードを変更してみます。
    [frontale]$ ldappasswd -x -D 'cn=kawasaki frontale,ou=people,dc=examples,dc=com' -W -S
    New password:
    Re-enter new password:
    Enter LDAP Password: <現在のパスワード>
    Result: Success (0)
    
    [frontale]$ ldapsearch -x -h localhost uid=frontale +
    # kawasaki frontale, people, examples.com
    (省略)
    pwdHistory: 20080107080430Z#1.3.6.1.4.1.1466.115.121.1.40#41#{crypt}$1$hwbXI04
     3$vuoaWZfgM.iOXKAJg/zZ91
    pwdHistory: 20080107085822Z#1.3.6.1.4.1.1466.115.121.1.40#41#{crypt}$1$0iPCRr7
     R$ylAQb0Wcabruo1e9Ryz531
    (省略)
    
    2つの 「pwdHistory」 は、いずれも passwd コマンドで変更したパスワードです。


  5. もう一度、ldappasswd コマンドでパスワードを変更してみます。
    [frontale@test214 frontale]$ ldappasswd -x -D 'cn=kawasaki frontale,ou=people,dc=examples,dc=com' -W -S
    New password:
    Re-enter new password:
    Enter LDAP Password: <現在のパスワード>
    Result: Success (0)
    
    [frontale]$ ldapsearch -x -h localhost uid=frontale +
    # kawasaki frontale, people, examples.com
    (省略)
    pwdHistory: 20080107085822Z#1.3.6.1.4.1.1466.115.121.1.40#41#{crypt}$1$0iPCRr7
     R$ylAQb0Wcabruo1e9Ryz531
    pwdHistory: 20080107090419Z#1.3.6.1.4.1.1466.115.121.1.40#29#{MD5}n3YK3iX+83W5
     nAIclbHr8A==
    (省略)
    
    2つ目の 「pwdHistory」 は、「MD5」 になりました。


    虫眼鏡 パスワードのハッシュ


    • passwd コマンドでは、「crypt」 でパスワードが生成されます。
    • ldappasswd コマンドでは、slapd.conf に記述したハッシュ値でパスワードが生成されます。
      password-hash {MD5}
      
    • password-hash の引数は {SSHA}, {SHA}, {SMD5}, {MD5}, {CRYPT}, {CLEARTEXT} のいずれかでなければなりません。デフォルトは {SSHA} です。


ここまで

| arinux | openldap | 17:36 | comments(0) | trackbacks(0) | pookmark |
openLDAP 構築(42) - パスワードポリシー(ppolicy) (1)


この記事は、LDAP Super Expert の 「LDAP パスワードポリシーの利用法」 を参考にしています。


パスワードポリシー(ppolicy)は、openldap 2.3 以降で追加された機能です。パスワードの文字数や履歴回数、有効期限などを、アカウント全体に default 値として適用したり、各アカウントに対して個別に適用することができます。


メモ モジュールまたはオーバーレイ


パスワードポリシー(ppolicy)を利用するためには、ソースのコンパイル前に、以下のようにコンフィグしておかなければいけません。

●モジュールを使用する場合
[root]# ./configure --enable-ldap=yes --enable-debug=yes --with-tls --enable-crypt=yes --with-cyrus-sasl ¥
--enable-overlays=yes --enable-modules=yes --enable-ppolicy=mod

●オーバーレイを使用する場合
[root]# ./configure --enable-ldap=yes --enable-debug=yes --with-tls --enable-crypt=yes --with-cyrus-sasl ¥
--enable-overlays=yes --enable-ppolicy=yes


モジュールの場合は、以下の場所に置かれます。

[root]# ls -l /usr/local/libexec/openldap
lrwxrwxrwx 1 root root     21 Dec  6 12:54 ppolicy-2.3.so.0 -> ppolicy-2.3.so.0.2.25
-rwxr-xr-x 1 root root 113484 Dec  6 12:54 ppolicy-2.3.so.0.2.25
-rwxr-xr-x 1 root root    868 Dec  6 12:54 ppolicy.la
lrwxrwxrwx 1 root root     21 Dec  6 12:54 ppolicy.so -> ppolicy-2.3.so.0.2.25



メモ slapd.conf 設定


  1. slapd.conf を編集します。
    # schema 追加
    include         /usr/local/etc/openldap/schema/ppolicy.schema
    
    # モジュールの場合は、以下を追加
    # Load dynamic backend modules:    # この行はもともと書かれてます。
    moduleload      ppolicy.la
    
    # アクセス制御は変更しません。
    
    # 以下を index の行よりも下に追加します。
    # Password Policy
    overlay ppolicy                    # この行はモジュール使用の際も書きます。
    ppolicy_default "cn=Standard Policy,ou=Policies,dc=examples,dc=com"
    ppolicy_use_lockout
    
    # 続いて、以下を追加します。
    password-hash {MD5}
    
    虫眼鏡 ppolicy ディレクティブの意味


    ディレクティブ意味
    overlay利用するオーバーレイを指定
    ppolicy_defaultDefault のパスワードポリシーを設定したエントリーの DN
    policy_use_lockoutアカウントがロックされている場合に、ロックしていることを知らせるエラーを返す


    虫眼鏡 password-hash


    ldappasswd コマンドでパスワードを設定・変更した際に、「userPassword」 に格納するパスワードのハッシュ方式を設定します。引数は {SSHA}, {SHA}, {SMD5}, {MD5}, {CRYPT}, {CLEARTEXT} のいずれかでなければなりません。デフォルトは {SSHA} です。


  2. slapd を再起動します。
    [root]# /etc/rc.d/init.d/slapd restart
    Stopping slapd
    Starting slapd
    



メモ Default パスワードポリシーのエントリー追加


全ユーザーに適用する Default のパスワードポリシーを設定します。


  1. 以下のように ou(organization unit) を追加します。
    [root]# vi ppolicy_ou.ldif
    dn: ou=Policies,dc=examples,dc=com
    objectClass: top
    objectClass: organizationalUnit
    ou: Policies
    
    [root]# ldapadd -x -W -D "cn=Manager,dc=examples,dc=com" -f ./ppolicy_ou.ldif
    Enter LDAP Password:(openLDAP 構築(6) で生成したパスワードを入力)
    adding new entry "ou=Policies,dc=examples,dc=com"
    


  2. 以下のように Default ポリシーの DN を追加します。
    [root]# vi ppolicy_default.ldif
    
    dn: cn=Standard Policy,ou=Policies,dc=examples,dc=com
    objectClass: top
    objectClass: device
    objectClass: pwdPolicy
    cn: Standard Policy
    pwdAttribute: userPassword
    pwdMustChange: TRUE
    pwdCheckQuality: 1
    pwdInHistory: 2
    pwdMinLength: 8
    pwdReset: TRUE
    
    [root]# ldapadd -x -W -D "cn=Manager,dc=examples,dc=com" -f ./ppolicy_default.ldif
    Enter LDAP Password:(openLDAP 構築(6) で生成したパスワードを入力)
    adding new entry "cn=Standard Policy,ou=Policies,dc=examples,dc=com"
    


    虫眼鏡 pwdPolicy オブジェクトクラスの属性


    属性意味
    pwdAttributeパスワードポリシーを適用する属性 「userPassword」 を指定。
    pwdMustChange「TRUE」 の場合は、最初のバインドの直後にパスワードを変更しなければならない。「FALSE」 の場合には、パスワードの変更を要求されない。Default は 「FALSE」。
    pwdCheckQualityパスワードの構文を検査するかを指定する。「0」 の場合は検査しない。「1」 の場合には検査するがパスワードをクライアント側でハッシュ化した場合など、 サーバー側での検査が不可能である場合には、検査せずに受け入れる。「2」 の場合には検査を行い、サーバー側での検査が不可能な場合にはエラーを返す。
    pwdInHistory古いパスワードを履歴に何個まで記録するかを指定する。履歴に記録されているパスワードは再利用できない。「0」の場合には、古いパスワードを履歴に記録しない。
    pwdMinLengthパスワードの最少の文字数で指定する。Defaultでは文字数に制限はない。
    pwdReset「TRUE」 の場合、管理者によってパスワードが変更された後の最初のログインの際、パスワードを変更しなければいけない。「FALSE」 の場合は変更する必要はない。
    pwdMinAgeパスワードの変更禁止期間を秒数で指定。一度パスワードを変更したら、一定期間パスワードを変更させないためのもの。「0」を指定すると、制限がなくなる。Default は 「0」。
    pwdMaxAgeパスワードの有効期限を秒数で指定。「0」を指定すると、制限がなくなる。Default は 「0」。
    pwdExpireWarningパスワード期限満了警告日数。パスワードがもうすぐ期限切れになる、と警告を何日前に出すかを秒数で指定する。Default は 「0」。



メモ パスワードの文字数(pwdMinLength)


  1. passwd コマンドでパスワードを変更してみます。例として、「frontale」 ユーザーでログインします。「pwdMinLength: 8」 引っかかるかを確認します。
    [frontale]$ mkpasswd -l 7
    PK8qt8%
    
    [frontale]$ passwd
    Changing password for user frontale.
    Enter login(LDAP) password: <現在のパスワード>
    New password: PK8qt8%
    Retype new password:PK8qt8%
    LDAP password information changed for frontale
    passwd: all authentication tokens updated successfully.
    

    passwd コマンドの場合は、ポリシーが適用されません。


  2. ldappasswd コマンドで、同様にパスワードを変更してみます。
    [frontale]$ mkpasswd -l 7
    79TjyB!
    
    [frontale]$ ldappasswd -x -D 'cn=kawasaki frontale,ou=people,dc=examples,dc=com' -W -S
    New password: 79TjyB!
    Re-enter new password:79TjyB!
    Enter LDAP Password:PK8qt8%
    Result: Constraint violation (19)
    Additional info: Password fails quality checking policy
    

    今度は、ポリシーに違反しパスワード変更が行えませんでした。


  3. ldappasswd コマンドで、「pwdMinLength: 8」 をクリアするパスワードに変更してみます。
    [frontale]$ mkpasswd -l 8
    2JI#jfc9
    
    [frontale]$ ldappasswd -x -D 'cn=kawasaki frontale,ou=people,dc=examples,dc=com' -W -S
    New password: 2JI#jfc9
    Re-enter new password: 2JI#jfc9
    Enter LDAP Password: PK8qt8%
    Result: Success (0)
    
    今度はうまくパスワードを変更できました。


    虫眼鏡 パスワードポリシー(ppolicy)の適用範囲


    パスワードポリシー(ppolicy)は、passwd コマンドによるパスワード変更には適用されません。ldappasswd コマンドに対して適用されます。


つづく

| arinux | openldap | 17:38 | comments(0) | trackbacks(0) | pookmark |
openLDAP 構築(41) - Vine 3.2 クライアント設定


以下の設定は、LDAP クライアントとなる Vine 3.2 のホスト上で行います。


メモ openldap、nss_ldap パッケージのインストール


  1. ftp://ftp.ics.es.osaka-u.ac.jp/pub/mirrors/Vine/VinePlus/3.2/i386/RPMS.plus/ から、
    以下のパッケージをダウンロードして、「/usr/local/src」 に置きます。


    • openldap-2.1.30-0vl1.4.i386.rpm
    • openldap-devel-2.1.30-0vl1.4.i386.rpm
    • nss_ldap-217-1vl1.i386.rpm
    虫眼鏡 ダウンロードのミラーサイトは こちら


  2. ダウンロードしたパッケージをインストールします。
    [root]# rpm -ivh openldap-2.1.30-0vl1.4.i386.rpm
    [root]# rpm -ivh openldap-devel-2.1.30-0vl1.4.i386.rpm
    [root]# rpm -ivh nss_ldap-217-1vl1.i386.rpm
    



メモ pam_ldap のインストール


  1. http://www.padl.com/Contents/OpenSourceSoftware.html から、
    「pam_ldap.tgz」 をダウンロードして、「/usr/local/src」 に置きます。


  2. 解凍します。
    [root]# cd /usr/local/src
    [root]# tar zxvf pam_ldap.tgz
    


  3. 共有ライブラリの検索パスを追加します。
    [root]# echo "/usr/local/bin" >> /etc/ld.so.conf
    [root]# /sbin/ldconfig
    


  4. コンフィグ、コンパイルしてインストールします。
    [root]# cd pam_ldap-184
    [root]# ./configure
    [root]# make
    [root]# make install
    



メモ sudo のインストール


  1. すでにインストールされている sudo パッケージを削除します。
    [root#] rpm -qa | grep sudo
    sudo-1.6.8p9-0vl3
    
    [root]# rpm -e sudo-1.6.8p9-0vl3
    


  2. http://www.gratisoft.us/sudo/download.html から、
    「sudo-1.6.8p12.tar.gz」 をダウンロードして、「/usr/local/src」 に置きます。


  3. 解凍します。
    [root]# cd /usr/local/src
    [root]# tar sudo-1.6.8p12.tar.gz
    


  4. コンフィグします。
    [root]# cd /usr/local/src/sudo-1.6.8p12
    [root]# ./configure --with-ldap --with-pam
    configure: You will need to customize sample.pam and install it as /etc/pam.d/sudo
    


  5. sample.pamを /etc/pam.d/sudo にコピーします。
    [root]# cp sample.pam /etc/pam.d/sudo
    


  6. コンパイルしてインストールします。
    [root]# make
    [root]# make install
    



メモ ファイル編集


  1. /etc/ldap.conf
    host 10.1.1.15 10.1.1.16 #LDAPサーバーの IPアドレスまたはホスト名を参照順に「space」で区切って記述
    base dc=examples,dc=com
    sudoers_base ou=SUDOers,dc=examples,dc=com
    timelimit 120
    bind_timelimit 120
    idle_timelimit 3600
    pam_filter objectclass=posixAccount
    pam_login_attribute uid
    pam_password md5
    


  2. /etc/openldap/ldap.conf
    URI ldap://test15.examples.com
    BASE dc=examples,dc=com
    TLS_CACERTDIR /etc/openldap/cacerts
    TLS_CACERT /etc/openldap/cacerts/cacert.pem
    


  3. /etc/sysconfig/authconfig
    USEDB=no
    USEHESIOD=no
    USELDAP=yes       # default は no
    USENIS=no
    USEWINBIND=no
    USEKERBEROS=no
    USELDAPAUTH=yes   # default は no
    USEMD5=yes
    USESHADOW=yes
    USESMBAUTH=no
    


  4. /etc/nsswitch.conf
    (省略)
    passwd:     files ldap
    shadow:     files ldap
    group:      files ldap
    (省略)
    


  5. /etc/ssh/sshd_config
    [root]# vi /etc/ssh/sshd_config
    (省略)
    UsePAM yes
    (省略)
    



メモ PAM 設定ファイル編集


  • system-auth を使用しない例です(su は除く)。
  • pam_unix.so よりも pam_ldap.so が先に 読まれるようにしています。

  1. /etc/pam.d/sshd
    #%PAM-1.0
    auth       required     /lib/security/pam_nologin.so
    auth       sufficient   /lib/security/pam_ldap.so
    auth       required     /lib/security/pam_unix_auth.so try_first_pass
    
    account    [default=bad success=ok user_unknown=ignore service_err=ignore ¥
     system_err=ignore authinfo_unavail=ignore] /lib/security/pam_ldap.so
    account    required     /lib/security/pam_unix_acct.so
    
    password   required     /lib/security/pam_cracklib.so retry=3 type=
    password   sufficient   /lib/security/pam_ldap.so
    password   required     /lib/security/pam_pwdb.so use_first_pass
    
    session    required     /lib/security/pam_mkhomedir.so skel=/etc/skel/ umask=0022
    session    required     /lib/security/pam_unix_session.so
    session    optional     /lib/security/pam_ldap.so
    


  2. /etc/pam.d/passwd
    #%PAM-1.0
    auth       sufficient   /lib/security/pam_ldap.so
    auth       required     /lib/security/pam_unix_auth.so use_first_pass
    
    account    sufficient   /lib/security/pam_ldap.so
    account    required     /lib/security/pam_unix_acct.so
    
    password    required      /lib/security/pam_cracklib.so minlen=8 ¥
     dcredit=-1 ucredit=0 lcredit=0 ocredit=0 retry=3 type=
    password   sufficient   /lib/security/pam_ldap.so use_authtok
    password   sufficient   /lib/security/pam_unix.so use_authtok md5 shadow remember=1
    
    


  3. /etc/pam.d/su
    auth       sufficient   /lib/security/pam_rootok.so
    # Uncomment the following line to implicitly trust users in the "wheel" group.
    #auth       sufficient   /lib/security/pam_wheel.so trust use_uid
    # Uncomment the following line to require a user to be in the "wheel" group.
    auth       required     /lib/security/pam_wheel.so use_uid group=nsadmin group=wheel
    auth       required     /lib/security/pam_stack.so service=system-auth
    account    required     /lib/security/pam_stack.so service=system-auth
    password   required     /lib/security/pam_stack.so service=system-auth
    session    required     /lib/security/pam_stack.so service=system-auth
    session    optional     /lib/security/pam_xauth.so
    


  4. /etc/pam.d/sudo
    auth       required     /lib/security/pam_env.so
    auth       sufficient   /lib/security/pam_ldap.so
    auth       sufficient   /lib/security/pam_unix.so
    
    account    [default=bad success=ok user_unknown=ignore service_err=ignore ¥
    system_err=ignore authinfo_unavail=ignore] /lib/security/pam_ldap.so
    account    required     /lib/security/pam_unix.so
    
    password   required     /lib/security/pam_cracklib.so retry=3 type=
    password   sufficient   /lib/security/pam_ldap.so use_authtok
    password   sufficient   /lib/security/pam_unix.so use_authtok md5 shadow
    
    session    required     /lib/security/pam_limits.so
    session    optional     /lib/security/pam_ldap.so
    session    required     /lib/security/pam_unix.so
    



メモ logrotate ファイル編集


  1. /etc/syslog.conf
    # 以下を最終行に追加
    # Save sudo logs
    local3.*                          /var/log/sudo.log
    


  2. /etc/logrotate.d/syslog
    /var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log ¥
    /var/log/cron /var/log/sudo.log {
            sharedscripts
            daily
            rotate 30
        postrotate
            /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
        endscript
    



メモ Default の skel ファイル編集


  1. /etc/skel/.bashrc
    # .bashrc
    
    # User specific aliases and functions
    
    # Source global definitions
    if [ -f /etc/bashrc ]; then
            . /etc/bashrc
    fi
    
    #stty -ixon
    
    # unlimit stacksize for large aray in user mode
    #ulimit -s unlimited
    
    set -o noclobber
    
    # set aliases
    alias ls='ls -F --color=auto'
    alias ll='ls -la --color=auto'
    alias la='ls -a --color=auto'
    alias eng='LANG=C LANGUAGE=C LC_ALL=C'
    alias rm='rm -i'
    
    # user file-creation mask
    umask 022
    


  2. /etc/skel/.bash_profile
    # .bash_profile
    
    # Get the aliases and functions
    if [ -f ~/.bashrc ]; then
        . ~/.bashrc
    fi
    
    # User specific environment and startup programs
    
    # addpath $HOME/bin
    BASH_ENV=$HOME/.bashrc
    USERNAME=""
    
    export USERNAME BASH_ENV PATH LESSOPEN
    export PATH=$PATH:/usr/local/bin
    export LD_LIBRARY_PATH=/usr/local/lib
    



メモ その他


  1. CA証明書をコピー
    マスターの
      /usr/local/etc/openldap/cacerts/cacert.pem
    をクライアントの
      /etc/openldap/cacerts
    にコピー
    


  2. おまじない
    [root]# /sbin/ldconfig
    



ここまで

| arinux | openldap | 10:21 | comments(0) | trackbacks(0) | pookmark |
openLDAP 構築(40) - Vine 2.6 クライアント設定(2)


メモ ファイル編集


  1. /etc/ldap.conf
    host 10.1.1.15 10.1.1.16 #LDAPサーバーの IPアドレスまたはホスト名を参照順に「space」で区切って記述
    base dc=examples,dc=com
    sudoers_base ou=SUDOers,dc=examples,dc=com
    timelimit 120
    bind_timelimit 120
    idle_timelimit 3600
    pam_filter objectclass=posixAccount
    pam_login_attribute uid
    pam_password md5
    


  2. /etc/openldap/ldap.conf
    URI ldap://test15.examples.com
    BASE dc=examples,dc=com
    TLS_CACERTDIR /etc/openldap/cacerts
    TLS_CACERT /etc/openldap/cacerts/cacert.pem
    


  3. /etc/sysconfig/authconfig
    USEDB=no
    USEHESIOD=no
    USELDAP=yes       # default は no
    USENIS=no
    USEWINBIND=no
    USEKERBEROS=no
    USELDAPAUTH=yes   # default は no
    USEMD5=yes
    USESHADOW=yes
    USESMBAUTH=no
    


  4. /etc/nsswitch.conf
    (省略)
    passwd:     files ldap
    shadow:     files ldap
    group:      files ldap
    (省略)
    



メモ PAM 設定ファイル編集


  • system-auth を使用しない例です(su は除く)。
  • pam_unix.so よりも pam_ldap.so が先に 読まれるようにしています。

  1. /etc/pam.d/sshd
    #%PAM-1.0
    auth       required     /lib/security/pam_nologin.so
    auth       sufficient   /lib/security/pam_ldap.so
    auth       required     /lib/security/pam_unix_auth.so try_first_pass
    
    account    [default=bad success=ok user_unknown=ignore service_err=ignore ¥
    system_err=ignore authinfo_unavail=ignore] /lib/security/pam_ldap.so
    account    required     /lib/security/pam_unix_acct.so
    
    password   required     /lib/security/pam_cracklib.so retry=3 type=
    password   sufficient   /lib/security/pam_ldap.so
    password   required     /lib/security/pam_pwdb.so use_first_pass
    
    session    required     /lib/security/pam_mkhomedir.so skel=/etc/skel/ umask=0022
    session    required     /lib/security/pam_unix_session.so
    session    optional     /lib/security/pam_ldap.so
    


  2. /etc/pam.d/passwd
    #%PAM-1.0
    auth       sufficient   /lib/security/pam_ldap.so
    auth       required     /lib/security/pam_unix_auth.so use_first_pass
    
    account    sufficient   /lib/security/pam_ldap.so
    account    required     /lib/security/pam_unix_acct.so
    
    password    required      /lib/security/pam_cracklib.so minlen=8 ¥
    dcredit=-1 ucredit=0 lcredit=0 ocredit=0 retry=3 type=
    password   sufficient   /lib/security/pam_ldap.so use_authtok
    password   sufficient   /lib/security/pam_unix.so use_authtok md5 shadow remember=1
    


  3. /etc/pam.d/su
    auth       sufficient   /lib/security/pam_rootok.so
    # Uncomment the following line to implicitly trust users in the "wheel" group.
    #auth       sufficient   /lib/security/pam_wheel.so trust use_uid
    # Uncomment the following line to require a user to be in the "wheel" group.
    auth       required     /lib/security/pam_wheel.so use_uid group=nsadmin group=wheel
    auth       required     /lib/security/pam_stack.so service=system-auth
    account    required     /lib/security/pam_stack.so service=system-auth
    password   required     /lib/security/pam_stack.so service=system-auth
    session    required     /lib/security/pam_stack.so service=system-auth
    session    optional     /lib/security/pam_xauth.so
    


  4. /etc/pam.d/sudo
    auth       required     /lib/security/pam_env.so
    auth       sufficient   /lib/security/pam_ldap.so
    auth       sufficient   /lib/security/pam_unix.so
    
    account    [default=bad success=ok user_unknown=ignore service_err=ignore ¥
    system_err=ignore authinfo_unavail=ignore] /lib/security/pam_ldap.so
    account    required     /lib/security/pam_unix.so
    
    password   required     /lib/security/pam_cracklib.so retry=3 type=
    password   sufficient   /lib/security/pam_ldap.so use_authtok
    password   sufficient   /lib/security/pam_unix.so use_authtok md5 shadow
    
    session    required     /lib/security/pam_limits.so
    session    optional     /lib/security/pam_ldap.so
    session    required     /lib/security/pam_unix.so
    



メモ logrotate ファイル編集


  1. /etc/syslog.conf
    # 以下を最終行に追加
    # Save sudo logs
    local3.*                          /var/log/sudo.log
    


  2. /etc/logrotate.d/syslog
    /var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log ¥
    /var/log/cron /var/log/sudo.log {
            sharedscripts
            daily
            rotate 30
        postrotate
            /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
        endscript
    



メモ Default の skel ファイル編集


  1. /etc/skel/.bashrc
    # .bashrc
    
    # User specific aliases and functions
    
    # Source global definitions
    if [ -f /etc/bashrc ]; then
            . /etc/bashrc
    fi
    
    #stty -ixon
    
    # unlimit stacksize for large aray in user mode
    #ulimit -s unlimited
    
    set -o noclobber
    
    # set aliases
    alias ls='ls -F --color=auto'
    alias ll='ls -la --color=auto'
    alias la='ls -a --color=auto'
    alias eng='LANG=C LANGUAGE=C LC_ALL=C'
    alias rm='rm -i'
    
    # user file-creation mask
    umask 022
    


  2. /etc/skel/.bash_profile
    # .bash_profile
    
    # Get the aliases and functions
    if [ -f ~/.bashrc ]; then
        . ~/.bashrc
    fi
    
    # User specific environment and startup programs
    
    # addpath $HOME/bin
    BASH_ENV=$HOME/.bashrc
    USERNAME=""
    
    export USERNAME BASH_ENV PATH LESSOPEN
    export PATH=$PATH:/usr/local/bin
    export LD_LIBRARY_PATH=/usr/local/lib
    



メモ その他


  1. CA証明書をコピー
    マスターの
      /usr/local/etc/openldap/cacerts/cacert.pem
    をクライアントの
      /etc/openldap/cacerts
    にコピー
    


  2. おまじない
    [root]# /sbin/ldconfig
    



ここまで

| arinux | openldap | 15:43 | comments(0) | trackbacks(0) | pookmark |
openLDAP 構築(39) - Vine 2.6 クライアント設定(1)


以下の設定は、LDAP クライアントとなる Vine 2.6 のホスト上で行います。


メモ openldap、nss_ldap パッケージのインストール


  1. ftp://ftp.ics.es.osaka-u.ac.jp/mirrors2/Linux/Vine/VinePlus/2.5/RPMS/i386/ から、
    以下のパッケージをダウンロードして、「/usr/local/src」 に置きます。


    • cyrus-sasl-1.5.27-17vl1.i386.rpm
    • openldap-2.1.22-0vl1.1.i386.rpm
    • openldap-devel-2.1.22-0vl1.1.i386.rpm
    • nss_ldap-181-1vl1.i386.rpm
    虫眼鏡 ダウンロードのミラーサイトは こちら


  2. ダウンロードしたパッケージをインストールします。
    [root]# rpm -ivh cyrus-sasl-1.5.27-17vl1.i386.rpm
    [root]# rpm -ivh openldap-2.1.22-0vl1.1.i386.rpm
    [root]# rpm -ivh openldap-devel-2.1.22-0vl1.1.i386.rpm
    [root]# rpm -ivh nss_ldap-181-1vl1.i386.rpm
    



メモ pam_ldap のインストール


  1. http://www.padl.com/Contents/OpenSourceSoftware.html から、
    「pam_ldap.tgz」 をダウンロードして、「/usr/local/src」 に置きます。


  2. 解凍します。
    [root]# cd /usr/local/src
    [root]# tar zxvf pam_ldap.tgz
    


  3. 共有ライブラリの検索パスを追加します。
    [root]# echo "/usr/local/bin" >> /etc/ld.so.conf
    [root]# /sbin/ldconfig
    


  4. コンフィグ、コンパイルしてインストールします。
    [root]# cd pam_ldap-184
    [root]# ./configure
    [root]# make
    [root]# make install
    



メモ sudo のインストール


  1. すでにインストールされている sudo パッケージを削除します。
    [root#] rpm -qa | grep sudo
    sudo-1.6.6-0vl4
    
    [root]# rpm -e sudo-1.6.6-0vl4
    


  2. http://www.gratisoft.us/sudo/download.html から、
    「sudo-1.6.8p12.tar.gz」 をダウンロードして、「/usr/local/src」 に置きます。


  3. 解凍します。
    [root]# cd /usr/local/src
    [root]# tar sudo-1.6.8p12.tar.gz
    


  4. コンフィグします。
    [root]# cd /usr/local/src/sudo-1.6.8p12
    [root]# ./configure --with-ldap --with-pam
    configure: You will need to customize sample.pam and install it as /etc/pam.d/sudo
    


  5. sample.pamを /etc/pam.d/sudo にコピーします。
    [root]# cp sample.pam /etc/pam.d/sudo
    


  6. コンパイルしてインストールします。
    [root]# make
    [root]# make install
    



メモ openSSH のインストール


  • セキュリティ上、「UsePrivilegeSeparation yes」 に設定したい。
  • 「openssh-3.6.1p2-0vl0.3」 の場合、「UsePrivilegeSeparation yes」 に設定すると、root で実行されるすべて の PAM セッションモジュールが動かなくなる(たとえば pam_mkhomedir.so)。
  • よって、現在インストールされている openSSH パッケージは削除して、新たに 「openssh-3.9p1」 のソースをコンパイルしてインストールします。
虫眼鏡 UsePrivilegeSeparation


  • root 権限を分離するかどうかを指定します(default は yes)。
  • 「yes」 に設定した場合、認証が成功すると、root ではなくそのユーザの権限をもつ別のプロセスが新たに作られます。
  • これによって、root 権限で実行されるコードの量を大幅に減らすことができ、sshd のセキュリティホールの影響を減らすことができます。


  1. すでにインストールされているopensshパッケージを削除します。
    [root]# rpm -e openssh-askpass-3.6.1p2-0vl0.3
    [root]# rpm -e openssh-askpass-gnome-3.6.1p2-0vl0.3
    [root]# rpm -e openssh-clients-3.6.1p2-0vl0.3
    [root]# rpm -e openssh-server-3.6.1p2-0vl0.3
    [root]# rpm -e openssh-3.6.1p2-0vl0.3
    


  2. ftp://ftp.jp.openbsd.org/pub/OpenBSD/OpenSSH/portable/ から、
    「openssh-3.9p1.tar.gz」 をダウンロードして、「/usr/local/src」 に置きます。
    虫眼鏡 ダウンロードのミラーサイトは こちら


  3. 解凍します。
    [root]# cd /usr/local/src
    [root]# tar zxvf openssh-3.9p1.tar.gz
    


  4. コンフィグします。
    [root]# cd /usr/local/src/openssh-3.9p1
    [root]# ./configure --prefix=/usr --sysconfdir=/etc/ssh -with-ssl-dir=/usr --with-pam
    


  5. コンパイルしてインストールします。
    [root]# make
    [root]# make install
    


  6. スタートアップ・スクリプトを用意して、OS boot 時に実行されるようにします。
    [root]# cp contrib/redhat/sshd.init /etc/rc.d/init.d/sshd
    [root]# chkconfig --add sshd
    [root]# chkconfig --list sshd
    sshd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
    


  7. 「sshd_config」を編集します。
    [root]# vi /etc/ssh/sshd_config
    
    SyslogFacility AUTHPRIV
    PermitRootLogin no
    PasswordAuthentication yes
    PermitEmptyPasswords no
    ChallengeResponseAuthentication yes
    UsePAM yes
    Subsystem       sftp    /usr/libexec/sftp-server
    


  8. 「sshd」を再起動します。
    [root]# /etc/rc.d/init.d/sshd restart
    sshdを停止中:                                              [  OK  ]
    sshdを起動中:                                              [  OK  ]
    



つづく

| arinux | openldap | 11:40 | comments(0) | trackbacks(0) | pookmark |
 123456
78910111213
14151617181920
21222324252627
28293031   
<< January 2018 >>
+ SELECTED ENTRIES
+ RECENT COMMENTS
+ RECENT TRACKBACK
+ CATEGORIES
+ ARCHIVES
+ 掲載予定のタイトル
  • Wordpress
  • Pukiwiki
  • SMTPs/POPs/IMAPs
  • fml
  • Tips
+ CSS Nite
+ MOBILE
qrcode
+ LINKS
+ RECOMMEND
+ PROFILE