パソコン鳥のブログ

アクセスカウンタ

zoom RSS Linuxでscpの利用開始時やログイン/ログアウト時などに任意のスクリプトやプログラムを実行する

<<   作成日時 : 2013/09/02 20:03   >>

なるほど(納得、参考になった、ヘー) ブログ気持玉 1 / トラックバック 0 / コメント 0

Linuxでscpやsshの利用開始時やログイン/ログアウト時、その他認証時などに任意のスクリプトやプログラムを実行する方法です。

PAMのスクリプトモジュール PAM-scriptを使用します。
PAMモジュールなので、認証時に限らず、パスワード変更時などでもスクリプトやプログラムを実行できます。


インストール


必要パッケージをインストールしておきます。


CentOSの場合
yum install pam-devel
Ubuntuの場合
apt-get install libpam0g-dev


ソースを以下からダウンロードします。
http://sourceforge.jp/projects/sfnet_pam-script/downloads/pam-script-1.1.6.tar.gz/

makeし、インストールします。
なお、下記 /opt/scripts はsshでのログイン時など、認証時に実行するスクリプトやプログラムの置き場所です。
任意のディレクトリで構いませんので、必要に合わせて変更して下さい。

tar zxvf pam-script-1.1.6.tar.gz
cd pam-script-1.1.6
./configure --sysconfdir=/opt/scripts
make
mkdir -p /opt/scripts
cp .libs/pam_script.so /lib64/security/
(/lib64 が無い場合は cp .libs/pam_script.so /lib/security/)



使い方(サンプル:ssh接続/切断時に実行するスクリプトやプログラムを実行する)


PAM-script はPAMモジュールなので、使用にはPAMの知識が必要です。
ここでは、とりあえずサンプルとして、ssh接続/切断時にスクリプトやプログラムを実行する方法を説明します。

接続/切断時には、インストール時に --sysconfdirオプションで指定したディレクトリ下の pam_script_ses_open , pam_script_ses_close が実行されます。
そこで、pam_script_ses_open , pam_script_ses_close を用意します。
また、pam_script_ses_open , pam_script_ses_close には実行権限を付けておいてください。

/opt/scripts/pam_script_ses_open

#! /bin/bash -p
echo SESSION-OPEN,$PAM_SERVICE,$PAM_TYPE,$PAM_USER,$PAM_RHOST,$PAM_TTY >> /tmp/pam.log
exit 0


/opt/scripts/pam_script_ses_close

#! /bin/bash -p
echo SESSION-CLOSE,$PAM_SERVICE,$PAM_TYPE,$PAM_USER,$PAM_RHOST,$PAM_TTY >> /tmp/pam.log
exit 0


実行権限設定

chmod +x /opt/scripts/*


任意のスクリプト/プログラムを実行する場合は、それらに対してシンボリックリンクを張り、リンク名を pam_script_ses_open , pam_script_ses_close として下さい。

ln -s 任意のスクリプトやプログラム /opt/scripts/pam_script_ses_open
ln -s 任意のスクリプトやプログラム /opt/scripts/pam_script_ses_close


次に、/etc/pam.d/sshd の末尾に以下を追加します。
/etc/pam.d/sshd

session required pam_script.so onerr=success


onerr=success の記述は重要です。
pam_script_ses_open , pam_script_ses_close に記述ミスをしていた場合でも、ssh接続/切断処理を継続します。
これが無いと、記述ミスがあった場合、接続が出来なくなってしまいます。

これで、sshで接続時に pam_script_ses_open が実行、切断時には pam_script_ses_close が実行されます。
上記サンプルでは、接続・切断時に /tmp/pam.log に記録されますので、確認してみて下さい。

なお、pam_script_ses_open , pam_script_ses_close が呼ばれた際には、PAM-scriptで環境変数に下記を設定していますので、スクリプトやプログラムからユーザ名などが取得できます。






PAM_SERVICEサービス名。ssh経由だと、sshd となります。
PAM_TYPEauth/account/passwd/sessionいずれかになります。本サンプルではsessionになります。
PAM_USERユーザ名
PAM_RHOSTリモートホスト名
PAM_TTYTTY名


注意
CentOSでSELinuxが有効になっていると、pam_script_ses_open等の実行が失敗することがあります。
とりあえず動作を確認する場合は、SELinuxを一時的に無効にして試してください。
一時的に無効にするには、

setenforce 0

を実行してください。

使い方(詳細)


上記で説明を一部省略しましたので、残りを説明します。
PAM設定ファイルに記述するモジュールタイプは4つありますが、タイプ毎に PAM-scriptから呼び出されるファイルが異なります。
呼び出されるファイルは次のものになります。
なお、ファイルは、インストール時に --sysconfdirオプションで指定したディレクトリ下のものが実行されます。






モジュールタイプ呼び出されるファイル
authpam_script_auth
accountpam_script_acct
passwordpam_script_passwd
sessionpam_script_ses_open , pam_script_ses_close


ファイルが呼び出された際、PAM-scriptでは下記環境変数を設定しており、スクリプトやプログラムから取得できます。
但し、サービスやモジュールタイプにより、設定されない環境変数名もあります。










環境変数名説明
PAM_SERVICEサービス名。ssh経由だと、sshd となります。
PAM_TYPEモジュールタイプ。auth/account/passwd/sessionいずれかになります。
PAM_USERユーザ名
PAM_RUSERリモートユーザ名
PAM_RHOSTリモートホスト名
PAM_TTYTTY名
PAM_AUTHTOKパスワード変更時の変更後パスワード
PAM_OLDAUTHTOKパスワード変更時の変更前パスワード



以下は、パスワード変更時にスクリプトを実行するサンプルです。
/etc/pam.d/passwd

password required pam_script.so onerr=success


/opt/scripts/pam_script_passwd

#! /bin/bash -p
echo $PAM_SERVICE $PAM_TYPE $PAM_USER $PAM_TTY $PAM_AUTHTOK $PAM_OLDAUTHTOK >> /tmp/pam.log
exit 0


この状態で、ユーザ user001 でパスワードを old_password から new_password に変更すると、/tmp/pam.log には次の1行が追加されます。

passwd password user001 pts/2 new_password old_password


参考


PAM-script プロジェクト日本語トップページ

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ
気持玉数 : 1
なるほど(納得、参考になった、ヘー)

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
Linuxでscpの利用開始時やログイン/ログアウト時などに任意のスクリプトやプログラムを実行する パソコン鳥のブログ/BIGLOBEウェブリブログ
文字サイズ:       閉じる