passwd
が実行されたときにカスタムコマンドを実行する方法はありますか?私はサーバーGUIを作成しています、そして私はアプリユーザーをシステムユーザーと結びつけ、そして私は単純なPAM認証を使いたくありません。だから私はユーザーとパスワードを受け取るスクリプトを実行し、それをMySQLサーバーに送信したいです。実際に私はそれを書いているので、それはいくつかのセキュリティ問題のようなものです。関係に関係なく、これは可能ですか?
誰かがpasswd
を使ってinotifywait
を実行したかどうかを検出することができますが、私が知っている限りでは、このように動作を制御することはできません。
ただし、独自のサーバーでは、Real passwd
プログラムをスクリプトに置き換えることができます。これは、実際のpasswd
プログラムを呼び出します。これはいくつかのセキュリティリスクを暗示しているかもしれませんので、私はそうしないでしょう、そして私はすべてのリスクをリストしようとしないでしょう。それでもあなたがそのようなことをするような気がするなら、このようなexpect
スクリプトは置き換えとして機能する可能性があります:
#!/usr/bin/expect
set timeout -1
set new_passwd ""
log_user 0
spawn /usr/bin/passwd.real
log_user 1
stty -echo
expect {
-re "current.*password" {
expect_user -re "(.*)\n"
send "$expect_out(1,string)\n"
exp_continue
}
-re "new.*password:" {
expect_user -re "(.*)\n"
set new_passwd $expect_out(1,string)
send "$new_passwd\n"
exp_continue
}
-re "passwd:.*unchanged" {
set new_passwd ""
interact
}
-re "passwd:.*updated successfully" {
interact
}
}
stty echo
if { $new_passwd != "" } {
send_user "New password for user '$env(USER)'/'$env(LOGNAME)': $new_passwd\n"
#system my_password_manipulation_script.sh $env(USER) $env(LOGNAME) $new_passwd
}
passwd
passwd.real
を名前変更した後、このスクリプトを/usr/bin/passwd
に配置し、通常の実行権限(0755)にします。このスクリプトは実数passwd
プログラムのフロントエンドであるため、SUIDビットは必要ではありません(そして別のセキュリティ上の問題になる)。
このスクリプトはDebian Jessie(8.4)で動作します。他のシステムでは、マッチングキーワードを調整する必要がある場合があります(現在の*パスワード、新規。*パスワードなど)。また、最後のSend_User行をコメントアウトし、システムコールのコメントを外し、実際にパスワードを伝播します。
もう一度:これを行う前に、すべてのセキュリティの影響を検討してみてください。また、おそらくあなたのパスワードを暗号化しないようにすることができるかもしれないことがおそらく知っているべきです。あなたが例えばこのスクリプトを保存した場合、それはNicerになるでしょう。 mypasswd
(そしてそれはpasswd
を生成する)をmypasswd
を使ってパスワードの変更をユーザーに依頼しました。これはそれを明確にするでしょう、それらはオリジナルpasswd
を使用していないことです。