ファイルマネージャは、ルートなしでドライブをどのようにマウントしますか?

ファイルマネージャは、ルートなしでドライブをどのようにマウントしますか?

私は読んでいたこれrootとして実行する理由(いくつかの例外を含む)に関する質問に関して、mountドライブをマウントするためにroot権限が必要な場合(通常は)グラフィカルファイルマネージャ(Nautilus、Thunarなど)がこれをどのように実行するのか疑問に思います。それはそんなに重要なのか?ヒューズ

答え1

グラフィカルワークステーションコンソールで作業しているユーザーは、ルート認証や再起動などのパスワードを必要とせずに複数のプログラムを実行できることを知っています。このプロセスには、/usr/sbin/userhelper元々設計されたものよりも広い文脈でSUIDプログラムを賢く使用することが含まれます。

グラフィカルユーザーは、/usr/bin/consolehelper特定のプログラム可能認証モジュール(PAM)に基づいて認証ジョブを構成する中間エイリアスプログラムを実行し、SUIDプログラムにコマンドを送信して特権ユーザープログラムを実行します。ユーザーに適切な権限がない場合、要求されたプログラムはユーザーのLinux環境で実行されます。

現在展開されているように再起動に必要なPAM設定ファイルには、ユーザーがコンソールにログインしているか、現在のルートで実行されてパスワード要求を無効にするかどうかを確認するためのものが含まれています。

答え2

USBスティックを使用してください。 (ただし、FUSEはネットワークファイルシステムに使用されます。)udiskのコマンドラインインタフェースを試すことができます。最新バージョンでは、コマンドラインインターフェイスが付属していますudisksctl

udisksd次のコマンドを使用してrootとして実行し、ユーザー要求を受け入れます。Dバス

udisksd使用ポリシーツールキットPolKitは許可する要求を決定します。一部の場合は、内部ドライブのフォーマットなどの追加権限が必要な場合があります。これには、Windows UACプロンプトまたはコマンドラインのsudoに似た追加の認証手順が含まれる場合があります。追加認証がどのように調整されるかわかりません。

現在、D-Busを介した要求は、要求するプロセスを識別するSCM_CREDENTIALSを使用してUnixソケットを介して行われます。

決定に使用される要素の1つは、ユーザーがローカルにログインしたのか、ネットワーク(たとえばssh)を介してログインしたのかです。私はこの情報がsystemd-logind(公募として)によってpam-systemd提供されたと信じています。

答え3

別の解決策は、Polkitを使用することです。 /usr/share/polkit-1/actions/org.freedesktop.UDisks2.policyを編集します。

どこでも変更:

<defaults>
  <allow_any>auth_admin</allow_any>
  <allow_inactive>auth_admin</allow_inactive>
  <allow_active>auth_admin_keep</allow_active>
</defaults>

...そして:

<defaults>
      <allow_any>yes</allow_any>
      <allow_inactive>yes</allow_inactive>
      <allow_active>yes</allow_active>
</defaults>

またはルールを生成します。編集または作成: /etc/polkit-1/rules.d/50-udisks.rules

polkit.addRule(function(action, subject) {
  var YES = polkit.Result.YES;
  var permission = {
    // only required for udisks1:
    "org.freedesktop.udisks.filesystem-mount": YES,
    "org.freedesktop.udisks.filesystem-mount-system-internal": YES,
    "org.freedesktop.udisks.luks-unlock": YES,
    "org.freedesktop.udisks.drive-eject": YES,
    "org.freedesktop.udisks.drive-detach": YES,
    // only required for udisks2:
    "org.freedesktop.udisks2.filesystem-mount": YES,
    "org.freedesktop.udisks2.filesystem-mount-system": YES,
    "org.freedesktop.udisks2.encrypted-unlock": YES,
    "org.freedesktop.udisks2.eject-media": YES,
    "org.freedesktop.udisks2.power-off-drive": YES,
    // required for udisks2 if using udiskie from another seat (e.g. systemd):
    "org.freedesktop.udisks2.filesystem-mount-other-seat": YES,
    "org.freedesktop.udisks2.encrypted-unlock-other-seat": YES,
    "org.freedesktop.udisks2.eject-media-other-seat": YES,
    "org.freedesktop.udisks2.power-off-drive-other-seat": YES
  };
  if (subject.isInGroup("users")) {
    return permission[action.id];
  }
});

それから再起動してください!

関連情報