321.1 ホストベースのアクセス制御
321.1 ホストベースのアクセス制御
重要度 2
説明 nsswitch構成、PAM、パスワードクラッキングなどの基本的なホストベースアクセス制御に精通していること。
主要な知識範囲
- PAM 及び PAMの設定ファイル
- パスワードクラッキング
- nsswitchについて
重要なファイル、用語、ユーティリティ
- nsswitch.conf
- john
nsswitch.conf
/etc/nsswitch.confは、各種サービスの名前解決順序を指定するファイル。
古いライブラリでは、/etc/host.confファイルで参照順を設定しますが、現在において/etc/nsswitch.confファイルを編集することがほとんどです。
$ grep "hosts" /etc/nsswitch.conf hosts: files nisplus dns
1番目にローカルの /etc/hosts
2番目に NIS+ を探す
最後にネームサービスを利用する
John the Ripper
John the Ripperとは古くからあるパスワードクラッカーです。主にDES、MD5などの暗号化アルゴリズムに対応しています。
passwdファイル・shadowファイルもDESやMD5で暗号化されています
install (CentOS 6.x)方法
# wget http://pkgs.repoforge.org/john/john-1.7.9-1.el6.rf.x86_64.rpm # rpm -Uvh john-1.7.9-1.el6.rf.x86_64.rpm
書式
john [オプション] パスワードファイル
[]は省略可能。但し、全アルゴリズムで全ユーザで実施するので時間がかかる
オプション
使用例test01 ユーザー作成、パスワードは「test0123」
# useradd test01 # passwd test01 test0123
test02 ユーザー作成、パスワードは「dgr@sda84LL」test02は複雑なパスワード
# useradd test02 # passwd test02 dgr@sda84LL
/etc/passwd, /etc/shadowファイルから、JOHNで解析可能な形式に変換したファイル(passwd_shadow)を生成する
$ sudo unshadow /etc/passwd /etc/shadow > passwd_shadow
test01のパスワード解析 数秒で解析可能
# john --users=test02 --single passwd_shadow Loaded 1 password hash (generic crypt(3) [?/64]) test0123 (test01) guesses: 1 time: 0:00:00:01 DONE (Tue Oct 6 06:11:15 2015) c/s: 294 trying: Test0191 - test01Q Use the "--show" option to display all of the cracked passwords reliably
test02のパスワード解析 解析不能
# john --users=test02 --single passwd_shadow Loaded 1 password hash (generic crypt(3) [?/64]) guesses: 0 time: 0:00:00:02 DONE (Tue Oct 6 06:11:53 2015) c/s: 291 trying: test021968 - test021900
オプション無しでtest02を解析 解析に時間がかかるので途中で停止しました
# john --users=test02 passwd_shadow guesses: 0 time: 0:00:01:19 14.44% (2) (ETA: Tue Oct 6 06:21:38 2015) c/s: 287 trying: 1destiny - 1lola guesses: 0 time: 0:00:02:19 23.76% (2) (ETA: Tue Oct 6 06:22:17 2015) c/s: 283 trying: donkey7 - pineapple7 guesses: 0 time: 0:00:03:19 33.46% (2) (ETA: Tue Oct 6 06:22:25 2015) c/s: 283 trying: mercury0 - insane0 guesses: 0 time: 0:00:04:19 47.71% (2) (ETA: Tue Oct 6 06:21:33 2015) c/s: 283 trying: Ellehcim - Htaed
解析したパスワードを表示
# john --show passwd_shadow test01:test0123:500:500::/home/test01:/bin/bash1 password hash cracked, 2 left
PAMとは?PAM(Pluggable Authentication Module)とは、 ユーザー認証に使用するモジュール群と、 それを利用するための標準的なAPI備えたライブラリからなるユーザー認証システム
PAM には以下のようなメリットがあります。
- アプリケーションから認証処理を独立させることができる。アプリケーションはPAMのAPIを利用するだけで認証を行える。
- PAMはアプリケーションから見たインタフェースが標準化されているため、システム(Linuxのディストリビューション)が異なってもソースの互換性が保たれる。
- PAMモジュールを入れ替えることで、アプリケーションに手を加えずに認証方式を動的に変更できる
/etc/pam.d/
PAM認証に利用するアプリケーション・コマンドの設定ファイルは /etc/pam.d/ ディレクトリに格納されています/etc/pam.d/ディレクトリに格納されている主なファイル書式
PAMの設定ファイルの書式
ライブラリタイプ コントロール モジュール [引数]
[]は省略可能ライブラリタイプコントロール主なモジュール
「/lib64/security(32bitの場合は/lib/security)」にあるモジュールがあります引数例・パスワード入力なしでも、suコマンドでユーザー変更できるようにする設定
1. /etc/pam.d/su を以下に設定
# vi /etc/pam.d/su auth sufficient pam_rootok.so auth sufficient pam_wheel.so trust use_uid
2. パスワード無しでsuコマンドを許可させるユーザー(test01)を、wheelグループに追加する
# usermod -G wheel test01
・root以外のユーザーをログインを禁止する
1. /etc/nologin ファイルを存在する事を確認する
# ls /etc/nologin /etc/nologin
2. /etc/pam.d/login ファイルに以下を追加する
# vi /etc/pam.d/login auth required pam_nologin.so
・root以外のユーザーをログインを禁止する
1. loginの制限
認証を失敗したユーザーは接続拒否するので、 [required] or [requisite] を指定
ログインを制限するので itemはuser 拒否するユーザーを指定するので sense=deny
fileは/etc/security/listfile onerr=succeedを指定
# vi /etc/pam.d/login auth required pam_listfile.so item=user sense=deny file=/etc/security/listfile onerr=succeed
2. gdmの制限(グラフィカルログイン)の制限
認証を失敗したユーザーは接続拒否するので、 required or requisite を指定
ログインを制限するので itemはuser 拒否するユーザーを指定するので sense=deny
fileは/etc/security/listfile onerr=succeedを指定
# vi /etc/pam.d/gdm auth required pam_listfile.so item=user sense=deny file=/etc/security/listfile onerr=succeed
3. /etc/security/listfile でログインを拒否するユーザーを追加
# vi /etc/security/listfile root
–single | シングルモード。「ユーザ名」からパスワードを解析する。 |
–wordlist=’dictionary_list’ | 辞書解析モード。辞書ファイル「discionary_list」を指定してそいつを照らしあわせていく。 |
–incremental | ブルートフォールス方式。 |
–show | 解析した元のパスワードを表示 |
/etc/pam.d/login | loginコマンドの使用制限に関する設定ファイル |
/etc/pam.d/sshd | sshコマンドの使用制限に関する設定ファイル |
/etc/pam.d/su | suコマンドの使用制限に関する設定ファイル |
/etc/pam.d/system-auth | 各アプリケーションで共通する認証設定ファイル |
auth | ユーザー認証の許可 |
account | アカウント有効期間や有効性をチェック |
password | パスワード関連の設定 |
session | ユーザーセッション・接続時の動作設定 |
optional | ステータスを無視 |
required | 失敗時はログインに失敗するが処理を進める。requiredエラーになる。 |
requisite | 失敗時は処理終了 |
sufficient | 成功時はアクセス許可 |
pam_access.so | /etc/security/access.conf ファイルの設定に従ってアクセスを許可 |
pam_deny.so | 常にアクセスを拒否 |
pam_listfile.so | fileの引数とitem引数で指定したファイルの内容によって特定のユーザーのサービスの利用を制限 |
pam_nologin.so | /etc/nologinファイルがあればrootユーザー以外のログインを拒否。ファイルの中身は空でもOK |
pam_permit.so | 全ユーザーのアクセスを許可 |
pam_rootok.so | uidのチェックをおこない、現ユーザーがrootかどうか確認する。ゼロの場合は許可 |
pam_securetty.so | /etc/securityファイルの設定に従ってttyからのログインを制限 |
file=[値] | ACL設定情報として参照する設定ファイル |
item=[値] | ACL設定する項目を指定。rhost, userなどの値を指定可 |
rhost | リモートユーザーからの接続を設定 |
user | ユーザーのログインを設定 |
onerr=[値] | listfileモジュールにエラーが発生した場合の処理を設定。succeed, failのいずれかの選択 |
succeed | 処理を続ける |
fail | 処理を終了する |
sense=[値] | ACLファイルがどのように解釈されるかを設定。allow, denyのいずれかの選択 |
allow | ファイルに設定項目が存在する場合は接続許可 |
deny | ファイルに設定項目が存在する場合は接続拒否 |
ディスカッション
コメント一覧
まだ、コメントがありません