Custom Search

JITAKU_SVR_Wiki

ユーザ認証/制御はコンプライアンス的に必須となるところが増えている。
サーバ台数が数十台、数百台あるような状況であればLDAP導入を検討するだろうが、
10台前後だとLDAPまでは考えにくい。

そんな時はOSで出来る限りの制御を行えるので、それで対応をしてみる。

ポリシー

とりあえず、セキュリティポシリーがなければ始まらないので、適当に以下の内容で作成。

  • パスワードルール
  • 初回ログイン時にパスワード変更
  • 使い回し禁止(世代管理)
  • ログイン連続失敗
  • パスワードの有効期限

大項目は以上。以下から詳細と手順。

パスワードルール

パスワードもITリテラシーが低い人や、考えが甘い人だと「1234」とかやってしまうので、サーバ側で制御してしまう。

ルールは次の3つのルールのを適応する
○英大文字 (A から Z) ※1文字以上
○英小文字 (a から z) ※1文字以上
○10進数の数字 (0 から 9) ※1文字以上



設定

# vim /etc/pam.d/system-auth
※system-authファイルはsystem-auth-acのシンボリックリンクなので注意

password requisite pam_cracklib.so try_first_pass type= minlen=8 dcredit=-1 ucredit=-1 lcredit=-1

passwordから始まるカラムがあり、その次にrequisiteがあり、pam_cracklib.soを宣言している行があり…、と非常に間違いやすいので注意。

ちなみに、ここの意味は以下のサイトでとっても分かりやすくまとめて頂いているので、
是非参考にしてほしい。

http://www.server-world.info/query?os=CentOS_6&p=password

簡単に書式説明をすると、

  • password
     パスワードの設定/変更時の宣言(のようなもの)
  • requisite
     パスワード設定/変更の成功を前提とする。失敗時はその場で終了。
  • pam_cracklib.so
     password、requisiteを使用する際にどのモジュールを使用するか(ここではpam_cracklib.so)
  • type=
    パスワード変更時に出力されるプロンプト
    例)type=USERだった場合
    $ passwd
    ユーザー testuser のパスワードを変更。
    testuser 用にパスワードを変更中
    現在のUNIXパスワード:
    新しいUSER パスワード:           # ← この部分
    新しいUSER パスワードを再入力してください: # ← この部分
    passwd: 全ての認証トークンが正しく更新できました。
  • minlen=8
    パスワードの文字列の長さ
    8にすることでパスワードの長さが8文字以上になる。
  • dcredit=-1
    数字が1文字以上入っていること。
  • ucredit=-1
    アルファベット小文字が1文字以上入っていること。
  • lcredit=-1
    アルファベット大文字が1文字以上入っていること。

以上となる。

system-authとpassword-authの違い

基本的にsystem-authはサーバのユーザ認証全般に関わる設定を司る。
例えばコンソールログインや、PAM認証など(たぶん?)

password-authはsshや、ftpなどのミドルウェアのユーザ認証を司る。

初回ログイン時にパスワード変更

これも提供されたパスワードを使う人がいるので、その対策の一つ。
パスワードはどこで盗み見られているかわからないので注意。

設定

すでにパスワード登録されたユーザに対して行う。

# passwd -e testuser

こうすることで強制的にパスワードの有効期限を超えることが出来るので、
ユーザはログイン時に強制的にパスワード変更を求められる。

使い回し禁止(世代管理)

パスワードを変更しても、前回、前々回と同じものを使い回せば当然セキュリティも脆くなる。
そんなときはパスワードの使い回し(世代管理)をして使用できなくさせる。

設定

# vim /etc/pam.d/system-auth
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=3
前述で出てきたものとは違う行なので注意。

注目すべきは、最後尾の"remember=3"。
この数値を3にすることで過去3回と同じものを使用することができなくなる。

また、この管理専用のファイルを作成する必要がある。

# touch /etc/security/opasswd

# chmod 600 /etc/security/opasswd

ログイン連続失敗

ログインを連続で失敗した場合ロックをかける、そうすることで悪いものからの連続アタックも拒否できる。

設定

色々試してうまく行った結果。
恐らく大切なのは順番だと思われる。
auth、accountの2行を追加する必要がある。

# vim /etc/pam.d/system-auth

auth        required      pam_env.so
auth        required      pam_tally2.so deny=3 unlock_time=30 ## ←ここ①
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 500 quiet
auth        required      pam_deny.so
----省略----
account     required      pam_unix.so
account     required      pam_tally2.so ## ←ここ②
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 500 quiet
account     required      pam_permit.so

また、ssh経由でも当然制御したいので、password-authにも上の2行と同じものを同じ場所へ記述する。

# vim /etc/pam.d/password-auth
※これもpassword-auth-acのシンボリックリンクなので注意

少し補足
deny=3
失敗を連続4回でロックをかける場合。

unlock_time=30
ロック解除は30秒後。

備考

ユーザのロックはコマンドでも確認出来る。当然コマンドで解除も出来る。

testuserのログイン失敗履歴確認

# pam_tally2 -u testuser
Login Failures Latest failure From
testuser 10 03/11/15 15:57:27 192.168.1.1

testuserのロックを解除

# pam_tally2 -u testuser --reset

再度確認

# pam_tally2 -u testuser
Login Failures Latest failure From
testuser 0

パスワードの有効期限

パスワードをそのままに使用し続けることもセキュリティホールの一つなので、適期的に変更を求める。

以下をポリシーにする。
有効期限 45日間
変更禁止期間 0日間
事前警告日数 10日前

設定

# vim /etc/login.defs

PASS_MAX_DAYS   45 # 有効期限
PASS_MIN_DAYS   0  # 変更禁止期間
PASS_WARN_AGE   10 # 事前警告日数

特定ユーザの制御を解除

例えば、rootと同一アカウントを作成した場合、そのユーザのみ上記の制御から外し、
有効期限を無期限にしたい場合はコマンドで制御を解除することが可能。

# chage -M 99999 root2
と言うように、root2ユーザのパスワード有効期限は99999日間(約274年間)になる。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-12-22 (火) 14:39:41 (697d)