1

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は、(非常に) 最後の手段です。

4

3 に答える 3

9

ユーザーオプションを受け取り、RPM を呼び出してハードワークを実行するフロントエンドで RPM をラップする方がよい場合があります。これにより、依存関係を管理するためのインフラストラクチャも提供され、既存のパッケージ管理システムとうまく連携します。.deb ベースのシステム (Debian または Ubuntu) で実行する必要がある場合は、.deb を構築し、どのパッケージ管理システムがアクティブであるかを判断するメカニズムをフロントエンドに配置する必要がある場合もあります。

ランダムなユーザーに root 権限へのアクセスを許可することは、重大なセキュリティ リスクであるため、一般に Linux または Unix システム (またはマルチユーザー システム) では悪い形式と見なされます。~/binただし、システム領域への書き込みを許可する root アクセス権限または sudo 権限がない場合は、ユーザーがホーム ディレクトリ ( ) にインストールできるようにするオプションがあります。この場合、/usr/bin にインストールしたい場合は root としてインストールするように要求できますが、root 権限を持っていない場合は、自分で使用するためにホーム ディレクトリにインストールすることを許可できます。

于 2009-12-17T21:42:03.010 に答える
2

グラフィカルインストーラーの場合は、グラフィカル環境に固執します。使用可能な場合はgksudoまたはkdesudoを使用します。使用できない場合は、rootが必要であることを示すエラーダイアログで失敗します。人々(特に初心者)はインストーラーをダウンロードし、ダブルクリックしてデスクトップから起動します。グラフィカルな方法でパスワードを尋ねる必要があります。あなたはそれらの端末をポップオープンしたくありません。

そのため、ターミナルから実行している場合でも、sudoを実行しないでください。ルートと終了が必要であるというエラーを出力するだけです。ユーザーがすでにコマンドプロンプトを表示している場合(私がそうする可能性が最も高いように)、必要に応じて自分自身をrootにsudoまたはsuする方法をすでに知っています。経験豊富なユーザーが自分でできるときにルートを作成しようとすると、おそらくいくつかの羽が波打つことを約束します。

インストーラー内から自分でsudoを実行することを主張する場合は、神のために、前のタイムスタンプを削除する前に「sudo-K」を強制してください。これを行わず、最近sudoを実行した場合は、私の知らないうちにrootとしてインストーラーを実行します(これが発生するとは思わないため)。'sudo -K'はプロンプトを強制し、rootとして続行するかどうかを決定できます。

于 2009-12-17T22:52:02.030 に答える
-1

この場合の最良の方法はsu、プログラム内で使用することです。入力/出力をリダイレクトすれば、準備完了です。

于 2009-12-17T21:44:23.120 に答える