ときにカスタムコマンドを実行する方法はありますか passwd 実行されますか?
サーバーのGUIを作成しています。アプリのユーザーとシステムのユーザーを結び付けたいと思います。
そして、私は普通のPAM認証だけを使いたくはありません。
それで私はユーザーとパスワードを受け取るスクリプトを実行し、それをMysqlサーバーに送信したいと思います。
実際に私がそれを書いている今、それはいくらかセキュリティ問題のようです。
とにかく、これは可能ですか?
ときにカスタムコマンドを実行する方法はありますか passwd 実行されますか?
サーバーのGUIを作成しています。アプリのユーザーとシステムのユーザーを結び付けたいと思います。
そして、私は普通のPAM認証だけを使いたくはありません。
それで私はユーザーとパスワードを受け取るスクリプトを実行し、それをMysqlサーバーに送信したいと思います。
実際に私がそれを書いている今、それはいくらかセキュリティ問題のようです。
とにかく、これは可能ですか?
回答:
誰かが走ったかどうかを検出できます passwd 使う inotifywaitしかし、私の知る限りでは、このように振る舞いを制御することはできません。
あなた自身のサーバー上では、しかし、あなたは本物を置き換えることができます 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 プログラム。
このスクリプトはDebian Jessie(8.4)で動作しますが、他のシステムでは一致するキーワードを調整する必要があるかもしれません(現在の*パスワード、新しい*パスワードなど)。また、最後のsend_user行をコメントアウトして、実際にパスワードを伝達するシステムコールのコメントを外します。
もう一度言います。これを行う前に、すべてのセキュリティ上の影響を考慮してください。また、あなたのユーザはおそらくあなたが彼らのパスワードを暗号化されていないものにすることができるかもしれないことを知っているべきです。このスクリプトを例えば以下のように保存したとしたら、おそらくもっと良いでしょう。 mypasswd (そしてそれは生まれます passwd それから、ユーザーにパスワードの変更を依頼して mypasswd。これは、彼らがオリジナルを使用していないことを明らかにします passwd。