BSD 4.3 システム・マネージャー用パスワード・ファイルの編集

以下に、パスワード・ファイル内のエントリーを変更する方法、および AIX® 上のパスワードを BSD 4.3 の方法で管理する方法について説明します。

AIX では、lsusermkuserchuser、および rmuser コマンドがパスワード管理のために用意されています。 これらのコマンドはいずれも SMIT の実行によって使用できます。 しかし、これらのコマンドはいずれも一度に扱うユーザーは一人だけです。

これらのコマンドの詳細については、lsusermkuserchuser、および rmuser を参照してください。

注: エディターを使用して一度に複数のユーザー名項目を変更するには、同時に複数のファイルを編集する必要があります。これは、パスワードは /etc/security/passwd ファイルに保管され、許可情報は /etc/security/user ファイルに保管され、残りのユーザー・データは /etc/passwd ファイルに保管されているからです。

AIXvipw コマンドをサポートしませんが、mkpasswd コマンドはサポートします。 しかし、パスワードは AIX でも BSD 4.3 と同じように管理できます。 次の手順を使用してください。

  1. BSD 4.3 パスワード・ファイルを /etc/shadow ファイルに入れます。
  2. ファイルへの許可を次のように入力して変更します。
    chmod 000 /etc/shadow
  3. 次の vipw シェル・スクリプトを /etc ディレクトリーに入れます。
    
    -----------------------------------------------------
    ----
    #!/bin/bsh
    #
    # vipw. Uses pwdck for now. May use usrck someday
    #
    PATH=/bin:/usr/bin:/etc:/usr/ucb # Add to this if your editor is
                                     # some place else
    if [ -f /etc/ptmp ] ; then
                     echo "/etc/ptmp exists. Is someone else using vipw?"
            exit 1
    fi
    if [ ! -f /`which "$EDITOR" | awk '{ print $1 }'` ] ; then
            EDITOR=vi
    fi
    cp /etc/shadow /etc/ptmp
    if (cmp /etc/shadow /etc/ptmp) ; then
            $EDITOR /etc/ptmp
    else
            echo cannot copy shadow to ptmp
            exit 1
    fi
    if (egrep "^root:" /etc/ptmp >/dev/null) ; then
            cp /etc/ptmp /etc/shadow ; cp /etc/ptmp /etc/passwd
            chmod 000 /etc/passwd /etc/shadow
            pwdck -y ALL 2>1 >/dev/null # return code 114 may change
                    rc=$?
            if [ $rc -eq 114 ]; then
                    chmod 644 /etc/passwd
                            rm -f /etc/passwd.dir /etc/passwd.pag
                    mkpasswd /etc/passwd
                            # update /etc/security/limits, or ftp
                            # will fail
                    else
                             pwdck -y ALL
                    fi
    else
            echo bad entry for root in ptmp
    fi
    rm /etc/ptmp
    -----------------------------------------------------------
  4. vipw シェル・スクリプトまたは mkpasswd コマンドを使用するときは、SMIT、および mkuserchuser、および rmuser コマンドは、mkpasswd コマンドを使用しないことに注意してください。 次のように実行して、
    mkpasswd /etc/passwd
    /etc/passwd.dir および /etc/passwd.pag ファイルを更新しなければなりません。
    重要: IFS 変数と trap ステートメントを初期化すると、setuid 機能に固有のセキュリティー・ホールを利用するためによく使用される方法の一部から保護されます。 しかし、vipw および passwd シェル・スクリプトは、互換性が重要な考慮事項である、相対的にオープンな環境を目的としています。 もっと安全な環境が必要であれば、AIX の標準コマンドだけを使用してください。
  5. 次の passwd シェル・スクリプトを /usr/ucb ディレクトリーに入れます。
    
    -----------------------------------------------------
    #!/bin/ksh
    #
    # matches changes to /etc/security/passwd file with changes to
    #/etc/shadow
    #
    IFS=" "
    PATH=/bin
    trap "exit 2" 1 2 3 4 5 6 7 8 10 12 13 14 15 16 17 18 21 22 ¥
            23 24 25 27 28 29 30 31 32 33 34 35 36 60 61 62
    if [ -n "$1" ]; then
            USERNAME=$1
    else
            USERNAME=$LOGNAME
    fi
    if [ -f /etc/ptmp ]; then
            echo password file busy
            exit 1
    fi
            trap "rm /etc/ptmp; exit 3" 1 2 3 4 5 6 7 8 10 12 13 ¥
                    14 15 16 17 18 21 22 23 24 25 27 28 29 30 31 ¥
                    32 33 34 35 36 60 61 62
    if (cp /etc/security/passwd /etc/ptmp) ; then
            chmod 000 /etc/ptmp else
            rm -f /etc/ptmp exit 1
    fi
    if ( /bin/passwd $USERNAME ) ; then
            PW=` awk ' BEGIN { RS = "" }
                    $1 == user { print $4 } ' user="$USERNAME:" ¥
    /etc/security/passwd `
    else
            rm -f /etc/ptmp
            exit 1
    fi
    rm -f /etc/ptmp
    awk -F: '$1 == user { print $1":"pw":"$3 ":"$4":"$5":"$6":"$7 }
            $1 != user { print $0 }' user="$USERNAME" pw="$PW" ¥
                    /etc/shadow > /etc/ptmp
    chmod 000 /etc/ptmp
    mv -f /etc/ptmp /etc/shadow
    ---------------------------------------------------------
  6. passwd スクリプトへの許可を次のように入力することによって変更します。
    chmod 4711 /usr/ucb/passwd
  7. /usr/ucb ディレクトリーが /bin ディレクトリーよりも前に検索されるように、各ユーザーの PATH 環境変数が指定していることを確かめます。