Linux で実行するグラフィカル インストーラーを作成しています。インストールは、ファイルを のいくつかの場所にコピーすることで構成する必要があります/usr。現在、インストーラーは Python で書かれています。
ファイルをコピーする必要がある場合、インストーラーの権限をエスカレートするにはどうすればよいですか? 私はPolicyKitを見ましたが、
- a) PolicyKit の一般的な「ファイルのインストール」アクション ID がないようです。
- b)私が使用できるアクションIDのうち、それらがディストリビューション全体で標準であるとは思わない
PAM も調べましたが、libpam を使用するコードがありますが、何もできないようです。(ユーザー名とパスワードを入力して) ユーザーを認証した後、への書き込みアクセス権がありません/usr。after authenticationでユーザーを変更しようとしos.setuid(0)ましたが、OS からエラーが発生します。
また、奇妙なことに、私がどのサービスを提供するかは問題ではないようですpam_start。ユーザー名とパスワードが正しい限り、必要なものは何でも渡すことができます。私が持っていることがわかり/etc/pam.d/sudoました。以下のコードは簡略化されており、パスワードはオブジェクトに正しく保存されておりpam_conversation、ハンドル オブジェクトを渡しています。
pam_start("my_user", "my_pass", "sudo_garbage_12345");
同様に動作します
pam_start("my_user", "my_pass", "sudo");
つまり、両方とも成功します。
最後の手段として、おそらくgksudoorを実行できkdesudoますが、それらのプログラムに縛られたくありません。ユーザーに私のインストーラーを呼び出すように要求することsudoは、(非常に) 最後の手段です。