수퍼유저가 아닌 사용자가 파일 시스템을 마운트하도록 허용하는 방법은 무엇입니까?

수퍼유저가 아닌 사용자가 파일 시스템을 마운트하도록 허용하는 방법은 무엇입니까?

특정 사용자(예: 그룹 구성원)의 마운트를 허용할 수 있습니까?어느슈퍼유저 권한이 없는 Linux의 파일 시스템이 있습니까?

또 다른 질문은 "사용자가 파일 시스템을 마운트하여 어떤 방식으로 시스템을 손상시킬 수 있습니까?"일 수 있습니다.

답변1

여러 가지 방법이 있는데 그 중 일부는 대부분 안전하고 일부는 전혀 안전하지 않습니다.

안전하지 않은 방법

mount예를 들어 sudo를 통해 누구나 run 을 사용할 수 있습니다 . 당신은 그들에게 뿌리를 내릴 수도 있습니다. 그것은 같은 것입니다. 사용자는 bash루트 권한을 즉시 제공하는 --running의 suid 루트 복사본을 사용하여 파일 시스템을 마운트할 수 있습니다(실행 중이라는 사실을 제외하면 로깅이 없을 수 있음 mount).

/etc또는 사용자는 자신의 파일 시스템이나 복사본을 포함하는 자신의 파일 시스템을 그 위에 마운트한 /etc/shadow다음 /etc/sudoers루트 권한을 사용하거나 얻을 수 있습니다. 아니면 이 두 파일 중 하나를 바인드 설치( )할 수도 있습니다. 아니면 새 파일을 .susudomount --bind/etc/sudoers.d

/etc/pam.d유사한 공격은 다른 많은 곳에서도 수행될 수 있습니다.

파일 시스템이 장치에 있을 필요도 없으며 -o loop사용자가 소유한(따라서 수정 가능한) 파일이 마운트된다는 점을 기억하십시오.

가장 안전한 방법: udisk 또는 이와 유사한 방법

실제로 다양한 데스크탑 환경에서는 사용자가 이동식 미디어를 마운트할 수 있도록 하는 솔루션을 구축했습니다. 작동 방식은 only 하위 디렉토리에 설치되고 /media커널 옵션을 통해 set-user/group-id 지원이 꺼지는 것입니다. 여기에 있는 옵션에는 udisks, udisks2, pmount, usbmount,

필요한 경우 비슷한 작업을 수행하고 sudo를 통해 호출하는 스크립트를 직접 작성할 수 있지만 루트 취약점을 남기지 않도록 이 스크립트를 매우 주의 깊게 작성해야 합니다. 사용자가 sudo를 기억하지 못하도록 하려면 스크립트에서 다음을 수행할 수 있습니다.

#!/bin/bash
if [ $UID -ne 0 ]; then       # or `id -u`
    exec sudo -- "$0" "$@"
fi

# rest of script goes here 

하루에 안전한 방법: 사용자 네임스페이스

Linux 네임스페이스는 매우 가벼운 형태의 가상화입니다(구체적으로는 컨테이너). 특히 사용자 네임스페이스의 경우어느시스템의 사용자는 자신의 환경을 만들고 그 안에서 루트로 실행할 수 있습니다. 이를 통해 파일 시스템을 마운트할 수 있지만 일부 가상 파일 시스템을 제외하고 파일 시스템은 명시적으로 차단됩니다. 결국 FUSE 파일 시스템이 허용될 수도 있지만내가 찾을 수 있는 최신 패치블록 장치는 포함되지 않으며 sshfs와 같은 것만 포함됩니다.

추가적으로, 많은 배포 커널은 (보안상의 이유로) 권한이 없는 사용자가 기본적으로 사용자 네임스페이스를 사용하는 것을 허용하지 않습니다.더반기본값 kernel.unprivileged_userns_clone은 0입니다. 다른 배포판도 비슷한 설정을 갖고 있으며 이름이 약간 다른 경우가 많습니다.

사용자 네임스페이스에 관해 내가 아는 최고의 문서는 LWN 기사입니다. 실제 네임스페이스, 5부: 사용자 네임스페이스.

지금은 udisks2를 선택하겠습니다.

답변2

이렇게 할 수 있지만 마운트하려는 파일 시스템에 해당하는 항목을 수정하고 /etc/fstab해당 항목에 플래그를 추가해야 합니다. user그러면 권한이 없는 사용자가 설치할 수 있습니다.

바라보다man mount자세한 내용은.

답변3

여기구성된 위키입니까?폴킷규칙우데카/우데카2루트가 아닌(예: 사용자) 그룹을 통해 파티션을 마운트하려는 경우.

아래 코드를 다음 위치에 저장하세요./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];
  }
});

"users" 그룹에 있다고 가정하고 다음 명령을 사용하여 파티션을 마운트합니다(sudo가 필요하지 않음).

# udisks2
udisksctl mount --block-device /dev/sda1

# udisks
udisks --mount /dev/sda1

답변4

sudo사용자 그룹이 명령을 실행할 수 있도록 구성할 수 있습니다 mount.

고쳐 쓰다: 설치로 인해 시스템이 손상되는 방법은 무엇입니까? 예를 들어 파일 시스템에 setuid 루트 셸을 만든 다음 셸을 마운트하고 실행하여 루트 권한을 얻을 수 있습니다.

관련 정보