web-dev-qa-db-ja.com

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

私は読んでいます thismountをrootとして実行する必要がある理由(いくつかの例外を除く)についての質問ですが、ドライブのマウントにrootが必要な場合(一般的に)、どうすればよいですか?グラフィカルファイルマネージャー(Nautilus、Thunarなど)はそれを行いますか? ヒューズ と関係がありますか?

6
Joe D

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

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

現在展開されているように、再起動に必要なPAM構成ファイルには、ユーザーがコンソールにログインするか、現在ルート環境で実行してパスワード要求を禁止するかのチェックが含まれています。

6
mdpc

Udiskを使用します。 (ただし、ネットワークファイルシステムの場合はヒューズが使用されます)。実験には、udiskへのコマンドラインインターフェイスを利用できます。最近のバージョンでは、コマンドラインインターフェイスudisksctlが付属しています。

udisksdはrootとして実行され、ユーザーの要求を D-Bus を使用して受け入れます。

udisksd使用 PolicyKit 許可するリクエストを決定するPolKit。一部には追加の特権が必要な場合があります。内蔵ドライブのフォーマット。これには、追加の認証手順が含まれる場合があります。これは、Windows UACプロンプト、またはコマンドラインのSudoと同様です。追加の認証がどのように調整されるのか正確にはわかりません。

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

決定に使用される要素の1つは、ユーザーがローカルにログインしているか、ネットワーク経由でログインしているか(sshなど)です。この情報はsystemd-logindによって提供されていると思います(pam-systemdと共謀して)。

4
sourcejedi

別の解決策は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];
  }
});

その後、再起動してください!

1
Sefer