파일 관리자는 루트 없이 드라이브를 어떻게 마운트합니까?

파일 관리자는 루트 없이 드라이브를 어떻게 마운트합니까?

나는 읽고 있었다이것루트로 실행해야 하는 이유(일부 예외 포함)에 대한 질문 과 관련하여 mount드라이브를 마운트하는 데 루트 권한이 필요한 경우(일반적으로) 그래픽 파일 관리자(Nautilus, Thunar 등)가 이를 어떻게 수행하는지 궁금합니다. 그게 그렇게 중요한 건가?퓨즈?

답변1

그래픽 워크스테이션 콘솔에서 작업하는 사용자는 루트 인증이나 재부팅과 같은 비밀번호가 필요 없이 여러 프로그램을 실행할 수 있다는 사실을 알고 있습니다. 이 프로세스에는 /usr/sbin/userhelper원래 설계된 것보다 더 넓은 맥락에서 SUID 프로그램을 영리하게 사용하는 것이 포함됩니다.

그래픽 사용자는 /usr/bin/consolehelper특정 PAM(Programmable Authentication Module)을 기반으로 인증 작업을 구성하는 중간 별칭 프로그램을 실행한 다음 SUID 프로그램에 명령을 보내 권한 있는 사용자 프로그램을 실행합니다. 사용자에게 적절한 권한이 없으면 요청한 프로그램이 사용자의 Linux 환경에서 실행됩니다.

현재 배포된 대로 재부팅에 필요한 PAM 구성 파일에는 사용자가 콘솔에 로그인했는지 또는 현재 루트에서 실행되어 암호 요청을 비활성화하는지 확인하는 내용이 포함되어 있습니다.

답변2

USB 스틱을 사용합니다. (단, FUSE는 네트워크 파일 시스템에 사용됩니다.) udisk의 명령줄 인터페이스를 실험해 볼 수 있습니다. 최신 버전에서는 명령줄 인터페이스가 함께 제공됩니다 udisksctl.

udisksd다음 명령을 사용하여 루트로 실행하고 사용자 요청을 수락합니다.D 버스.

udisksd사용정책 툴킷PolKit은 허용할 요청을 결정합니다. 일부는 내부 드라이브 포맷과 같은 추가 권한이 필요할 수 있습니다. 여기에는 Windows UAC 프롬프트 또는 명령줄의 sudo와 유사한 추가 인증 단계가 포함될 수 있습니다. 추가 인증이 어떻게 조정되는지 모르겠습니다.

현재 D-Bus를 통한 요청은 요청하는 프로세스를 식별하는 SCM_CREDENTIALS를 사용하여 Unix 소켓을 통해 이루어집니다.

결정에 사용되는 요소 중 하나는 사용자가 로컬로 로그인했는지 아니면 네트워크(예: 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];
  }
});

그런 다음 다시 시작하세요!

관련 정보