321.1 ホストベースのアクセス制御

2021-06-21

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 ファイルに設定項目が存在する場合は接続拒否

LPIC 30xLPIC303

Posted by admin