Edited at

情報セキュリティの基本 ~パスワードの強化~

More than 1 year has passed since last update.

 ここでは,パスワードに関わる設定を行い,セキュリティを強化する方法を具体的に記しています.

 パスワードの強化は,セキュリティを向上させる大切な手段です.個人レベルでは強力なパスワードを用いたり,定期的にパスワードを変更するよう意識するくらいしかありませんが,管理者レベルでは,ユーザのパスワードレベルを保つための様々な対策を施すことができます.

 ここでは,パスワードのセキュリティを強化させるのに有効な,以下のことを扱っていきます.


内容


環境


  • Cent OS 6.8

  • PAM(/libpam.so) 0.82.2

 より細かい環境については,ブログを参考にしてください.

 また,今回の内容はブログの第13回により詳しく掲載しておりますので参考にしてください.


【第13回】情報セキュリティの雪山 ~パスワードの強化~


シャドウパスワードの設定


確認方法

 passwdもshadowもテキストファイルなのでファイル閲覧コマンドで見ることもできますが,これらはgetentコマンドで表示させるのが一般的です.

# /etc/passwdのユーザー名やそれぞれの設定の一覧を表示.

$ getent passwd
# 特定のユーザーを抜き出して表示.
$ getent passwd USERNAME

getent_1.PNG

 「:」区切りでユーザー名,パスワード,uid,gid,...と並んでいます.パスワードの欄が「x」という文字に置き換わっていたらシャドウパスワードが有効になっている証拠です.shadowファイルの方も確認してみると,暗号化されたパスワードが記載されています.

# /etc/shadowを表示

$ sudo getent shadow enryu
enryu:$1$********:17089:0:99999:7:::

 ********の部分が暗号化パスワードであり,その前の数字は暗号化アルゴリズムの種類を表しています.また,そのあとにはパスワードに関する設定などが続いています.


設定方法

 もしシャドウパスワードになっていなかったり,解除してしまったときには有効化する必要があります.シャドウパスワードを有効にするには,pwconvコマンドを使います.詳しくは$ man pwconvで調べられます.

# シャドウパスワードの有効化

$ sudo pwconv
# シャドウパスワードの無効化
$ sudo pwunconv


パスワードポリシーの設定


パスワードポリシーとは

 パスワードポリシーとは,パスワードの設定や更新に関する決まりのことで,PAMで設定するものとlogin.defsで設定するものがあります.以下の項目があります.

設定方法
項目
意味・概要
例(デフォルト値)

login.defs
PASS_ALWAYS_WARN
パスワードが弱いと警告します.
yes(no)

login.defs
PASS_MAX_DAYS
同じパスワードを使える最大日数です.
180(99999)

login.defs
PASS_MIN_DAYS
パスワードを変更してから,次に変更できるようになるまでの最小日数です.
1(0)

login.defs
PASS_WARN_AGE
パスワードの期限が切れる何日前から警告するかです.マイナスは警告しません.
7(7)

PAM
minlen
パスワードの最小文字数です.
8(4)

PAM
remember
パスワードを過去何世代と異なるものにするかを指定します.
3()

PAM
deny
パスワード入力を何回間違えたらアカウントをロックするかを指定します.
5()

PAM
unlock_time
アカウントをロックする時間(秒)を指定します.
180()

PAM
minclass
パスワードに最低限含めるべき文字の種類の数を指定します.
2(0)

PAM
maxsequence
'12345', 'abcde'などの連続した並びが何文字以上続いたらパスワードを破棄するかを指定します.
4(0)

PAM
dcredit, ucredit, lcredit, ocredit
パスワードに含める文字の種類と文字数などを指定します(※).
0(1)

※dcreditは数字,ucreditは大文字,lcreditは小文字,ocreditは記号などを表します.これらの振る舞いは少々複雑です.例えば(case 1) dcredit=2, minlen=8のとき,数字が1つ含まれていたらパスワードが7文字でも許可します.これを2文字まで許すので,実質パスワードの長さは6文字以上となります.ただし,数字が含まれていなければ8文字以上ということです.(case 2) dcredit=-2, minlen=8のとき,数字が2文字以上含まれていないと許可されません.また,数字が含まれていた場合,minlenには影響しません.(case 3) creditを何も設定せず,minlen=8のとき,creditのデフォルト値は1となります.数字,大文字,小文字,記号などをすべて含めると,minlenは4になりますが,実際は5文字以下のパスワードは弾かれるため,6文字が最小文字数となります.厳密にminlenを設定したいときは,?creditを0以下に設定すべきです.


パスワードポリシーの設定

 では実際に設定していきましょう.これからやるのはあくまで一例です.数値などはご自身で決めたものに適宜変えてください.

 まずはlogin.defsです.ここでは編集にviを使っていますが,もちろんお好きなテキストエディタで構いません.画像のようにデフォルトでパスワードに関する設定が書かれている場所がありますので,変更していきます.

$ sudo vi /etc/login.defs

login_defs_3.PNG


/etc/login.defs

PASS_MAX_DAYS    180

PASS_MIN_DAYS 1
PASS_MIN_LEN 8 # PAMの設定が優先されるのであまり意味はありません
PASS_WARN_AGE 7

 次はPAMsystem-authです.

$ sudo vi /etc/pam.d/system-auth

pam_system-auth_1.PNG

 ここにどんどん書き足していきます.心配な人はバックアップを取っておいてもいいでしょう.ファイルが大きくて分かりにくいかもしれないので,編集ポイントをまとめます.なお,行数は:set numberで表示できます.


  1. 8行目の下に auth required pam_tally2.so deny=5 unlock_time=180 を挿入

  2. 17行目 password requisite pam_cracklib.so にminlen=8 minclass=3 maxsequence=4 dcredit=-1 ucredit=0 lcredit=0 ocredit=0を追加

  3. 18行目 password required pam_unix.so にremember=3を追加

pam_system-auth_7.PNG

 これで設定は終了です.:wqで保存して終了しましょう.


ユーザごとの設定

 上で設定した項目のうちのいくつかは,chageコマンドで確認したり,変更したりできます.

$ chage -l enryu

Last password change : Nov 02, 2016
Password expires : May 01, 2017
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 180
Number of days of warning before password expires : 7

 変更するときは次のオプションを使います.

オプション
項目
意味

-m
mindays
パスワードを変更してから次に変更できるようになるまでの最小日数を変更

-M
maxdays
同じパスワードを使用できる最大日数を変更

-W
warndays
パスワードの期限が切れる警告を何日前から行うかを変更

 このコマンドを使用して,各ユーザーごとに設定を変更することができます.

# 例:ユーザenryuのパスワード更新最小日数を0にする

$ sudo chage -m 0 enryu

 他のオプションについてはセキュアなアカウント制御の回でお話しします.


暗号化アルゴリズムの設定


暗号化アルゴリズムの種類

 パスワードを暗号化するアルゴリズムにはいろいろ種類があります.ひと昔前は標準的な暗号方式の規格であるDESが一般的でした.今使っているCentOS6.8ではMD5によるハッシュ化が用いられています.

 しかし,DESは8文字までのパスワードしか扱えず,MD5は脆弱性が発見されてパスワードを破られる可能性が出てきたため,CentOS7からはSHA-2というハッシュ化方式が取られています.

 暗号化アルゴリズムの方式は,時代を経るにしたがってまだまだ移り変わっていくでしょう.そのたびに新しい方式へと設定を直していく必要があるのです.

 ここでは,SHA-2のひとつ,SHA512という方式に設定しましょう.

 再びPAMのsystem-authを変更します.

# cオプションは起動時にコマンドを実行する

$ sudo vi /etc/pam.d/system-auth -c "set number"


/etc/pam.d/system-auth

    :

18 password sufficient pam_unix.so md5 shadow nullok remember=3 try_first_pass use_authtok
↑この行のMD5をSHA512に変更↓
18 password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
:


設定の反映

 以上でパスワードに関する設定が完了したわけですが,このままでは設定は反映されません.設定の仕方によって,反映されるタイミングは様々です.


login.defsの設定の反映

 login.defsで設定した内容は,useraddで新しくアカウントを作るか,pwconvでshadowファイルを作り直すときに反映されます.useraddの場合は,既存のアカウントへは反映されないので,pwconvしなおすのが良いでしょう.

# pwconvしなおす場合

$ sudo pwunconv
$ sudo pwconv
# 確認
$ chage -l USERNAME

 なおchageによる設定はその場で反映されます.


PAMの設定

 PAMで設定したパスワードポリシーや,パスワードの暗号化方式は,新たにパスワードを発行するときに有効になります.したがって,既存のパスワードは以前の暗号化形式のままになっています.したがって,各ユーザが次回ログインするときに,パスワードを変更させる必要があります.

# 自分で行う場合

$ passwd
# 次回ログイン時にUSERに変更させる場合
$ passwd -e USER

---- 以上


参考ページ


パスワードをシャドウパスワードに変更するには


Linuxでパスワードポリシーを設定する|俺的備忘録 〜なんかいろいろ〜


CentOS/パスワードの長さや文字などの制限事項を設定する方法


[FreeBSD]パスワードハッシュにmd5を使うのは小学生までだよねー


Linux,UNIXで次回ログイン時にパスワードを変更させる


こちらもよろしくお願いいたします.


エンリュの迷い森|トップページ