0

Linux システムで特定のユーザーがログインするとすぐに実行される単純な python スクリプトを作成しました。パスワードを要求されます...しかし、問題は、端末を終了するか、最小化してコンピューターを使い続けることです。つまり、基本的にはパスワード認証スクリプトです。だから私が興味を持っているのは、正しいパスワードを入力するまで、Pythonスクリプトを停止させたり、他のことをさせたりしないようにする方法です。インポートする必要があるモジュールや、Python スクリプトが完了するまでシステム機能を一時停止できるコマンドはありますか?

ありがとう

私は興味本位でやっていますし、うまくいかないこともたくさんありますが、楽しいことだと思います。1 つの特定のシステム プロセスを保護することもできます。システムを一時停止し、ユーザーに何よりも先に python スクリプトを実行させる方法に興味があります。

4

3 に答える 3

3

ユーザーがスクリプトを通過する方法は常にあります。

プログラムへの入力をブロックせずに (ユーザーが引き続きパスワードを入力できるように)、X サーバーを実際にブロックできたとしましょう。ユーザーは、X サーバーからコンソールに alt-f1 を押して、「おかしなアプリ」を強制終了することができます。それもブロックできれば、彼はボックスに ssh してアプリを強制終了できます。

このようなことを行う一般的な方法はほとんどありません。これが、コンソールのログイン コマンドと、グラフィカル ディスプレイのセッション マネージャー (gdm など) の目的です。これらのコマンドでは、対話型セッションを開始する前に、ユーザーがパスワードを入力する必要があります。その後、なぜ同じことをするためにさらに別のパスワードが必要なのですか? このシステムは、ユーザーがパスワード (または別の形式の認証) なしで使用できないように設計されていますが、必要に応じていつでもプログラムがシステムをブロックできるようにする API はありません。

于 2012-08-26T21:20:16.843 に答える
2

「モーダル」ウィンドウに相当するものが必要ですが、これはマルチユーザー、マルチタスク環境では (直接) 可能ではありません。

次善の策は、ユーザーがシステムにアクセスできないようにすることです。たとえば、ディスプレイと同じ大きさの非表示ウィンドウを作成すると、マウス イベントがインターセプトされ、「背後」にあるものにはアクセスできなくなります。

その時点で、ユーザーがキーボードを使用してアプリケーションを終了したり、別のアプリケーションや別の仮想コンソールに切り替えたりできないという問題があります (これがおそらく最も難しいでしょう)。したがって、「標準」キーボードだけでなく、低レベルのキーにもアクセスしてロックする必要があります。

これを行うには、アプリケーションに管理者権限が必要であり、ユーザー環境で実行する必要があります。自分が何をしているのか本当にわかっていない限り、これは災害のレシピのように見え始めます.

やりたいことは、ディスプレイ マネージャーと統合する Pluggable Authentication Module (PAM) を介して行う必要があります。おそらく、外部プログラム、つまり Python スクリプトを「アウトソーシング」または「コールバック」する PAM モジュールを見つけることができます。

于 2012-08-26T21:25:54.230 に答える
0

これはただの楽しみのためなので、次のような作業があります: ユーザーがプロンプトをしばらく無視したり、ターミナルを閉じたり、プロセスを強制終了したりした場合は、スクリプトでユーザーをログアウトさせます。gnome の場合は次のようになります。

import os

def set_exit_handler(func):
    import signal
    signal.signal(signal.SIGHUP, func) # on closing the terminal
    signal.signal(signal.SIGTERM, func) # on killing the process

    import atexit
    atexit.register(func) # on Ctrl-C, Ctrl-D and other proper exits

if __name__ == "__main__":
    def on_exit(a=None, b=None):
        print "exit handler triggered"
        os.system("gnome-session-quit --logout --no-prompt")
    set_exit_handler(on_exit)

    print "Enter password:"
    raw_input()
    # ... some verification/timeout code ...

ユーザーが端末を閉じるか、プロセスを強制終了すると、ユーザーは即座にログアウトされます:)

于 2012-08-26T22:52:40.707 に答える