특정 사용자 (예 : 그룹의 구성원)가 Linux에서 수퍼 유저 권한없이 파일 시스템 을 마운트 할 수 있습니까?
또 다른 질문은 "파일 시스템을 마운트하여 사용자가 시스템을 손상시킬 수있는 방법은 무엇입니까?"
특정 사용자 (예 : 그룹의 구성원)가 Linux에서 수퍼 유저 권한없이 파일 시스템 을 마운트 할 수 있습니까?
또 다른 질문은 "파일 시스템을 마운트하여 사용자가 시스템을 손상시킬 수있는 방법은 무엇입니까?"
답변:
몇 가지 접근 방식이 있으며, 그중 일부는 대부분 안전하고 다른 방법은 전혀 없습니다.
mount
예를 들어 sudo를 통해 모든 사용을 실행하십시오 . 그들에게 뿌리를 줄 수도 있습니다. 그건 같은거야. 사용자는 suid 루트 복사본의 bash
실행 으로 파일 시스템을 마운트 할 수 있습니다. 실행은 루트를 즉시 제공합니다 ( mount
실행 된 사실을 넘어서는 로깅없이 ).
또한, 사용자의 상단에 자신의 파일 시스템을 마운트 할 수 /etc
의 그 / 그녀의 자신의 복사본을 포함 /etc/shadow
하거나 /etc/sudoers
, 다음 중 하나에 루트를 얻을 su
또는 sudo
. 또는이 mount --bind
두 파일 중 하나에 바인드 마운트 ( ) 될 수도 있습니다. 또는에 새 파일이 /etc/sudoers.d
있습니다.
유사한 공격이 /etc/pam.d
다른 곳에서 철수 될 수 있습니다 .
파일 시스템은 장치에 -o loop
있을 필요는 없으며 사용자가 소유 한 (따라서 수정할 수있는) 파일을 마운트합니다.
다양한 데스크탑 환경은 실제로 사용자가 이동식 미디어를 마운트 할 수 있도록 이에 대한 솔루션을 이미 구축했습니다. 서브 디렉토리 /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를 사용하겠습니다.
mount
루트와 같은 파일 시스템을 마운트 할 수 있게하는 것이 안전하다고 생각 하십니까? 연결 한 네임 스페이스 문서를 읽고 적어도 실습으로이 마운트 그룹을 구현하려고합니다.
mount
명령 을 실행할 수있는 권한을 부여하면 루트를 제공하는 것과 같습니다.
할 수는 있지만 /etc/fstab
마운트하려는 파일 시스템 에 해당하는 항목을 수정 user
하여이 항목에 플래그 를 추가해야합니다 . 권한이없는 사용자는이를 마운트 할 수 있습니다.
자세한 내용 man mount
은 참조하십시오.
vfs.usermount
) 를 설정하여 파일 시스템을 마운트 할 수 있음을 알았습니다 . 나는 sth를 원한다. 그것과 비슷합니다. 나는 각각에 많은 파티션을 가진 많은 이동식 드라이브를 사용하며 각각에 대해 12 ~ 2 개의 항목을 fstab에 추가하는 것이 번거로울 것입니다.
udev
새로운 장치가 나타나고 사라질 때 항목을 관리 하게 하는 것입니다.
여기에 구성하는 위키입니다 폴킷의 규칙 udisks / udisks2을 비 루트로 파티션 (예 : 사용자) 그룹을 탑재하기 위해이.
아래 코드를 /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
Xubuntu에서는 USB 대용량 저장 장치, 하드 디스크 파티션, CD / DVD 등을 마운트하고 꺼내기 위해 기본적으로 작동합니다.
policyKit을 사용하여 Ubuntu가 선택한 솔루션이 충분히 안전하다고 가정 해 봅시다.
데비안 8.3의 XFCE에서는 사용자가 암호없이 파일 시스템을 마운트하고 꺼내도록 허용해야했습니다. 나를 위해 일한 것은 우분투에서 허가 파일을 선택하는 것입니다.
아래의 줄을 루트로 이름 /var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla
이 지정된 파일에 추가하면 트릭을 수행해야합니다.
[Mounting, checking, etc. of internal drives]
Identity=unix-group:admin;unix-group:sudo
Action=org.freedesktop.udisks.filesystem-*;org.freedesktop.udisks.drive-ata-smart*;org.freedesktop.udisks2.filesystem-mount-system;org.freedesktop.udisks2.encrypted-unlock-system;org.freedesktop.udisks2.filesystem-fstab;
ResultActive=yes
(실제로 내가 한 것은 Ubuntu 16.04의 동일한 이름을 가진 파일에서 조금 더 선택했으며 나를 위해 일했습니다. 필요한 경우 https://gist.github.com/kafene/5b4aa4ebbd9229fa2e73 의 내용처럼 보입니다. )
sudo
일련의 사용자가 mount
명령 을 실행하도록 구성 할 수 있습니다 .
업데이트 : 마운트하여 시스템을 손상시키는 방법은 무엇입니까? 예를 들어 파일 시스템에 setuid 루트 셸을 만든 다음 루트 권한을 얻기 위해 마운트하고 실행할 수 있습니다.
mount
으로 sudo mount
사용하거나 래퍼 스크립트를 사용할 수 있습니다.
user
fstab에 추가하더라도 mount
setuid root 이므로 작동 합니다. 커널은 루트 또는 CAP_SYS_ADMIN
기능을 확인 하므로 실제로 루트와 관련된 문제를 해결할 수 없습니다.
파일 시스템은 파일의 자리 표시 자이므로 괄호 안에있는 질문에 답하기 위해 사용자는 파일 삭제와 같은 파일 시스템에서 유해한 작업을 수행 할 수 있습니다.
다른 두 가지 질문을 요약하면 다음과 같습니다.
fstab
부팅 시 영구 저장소 에 장착하기에 좋습니다 . USB 드라이브를 연결하거나 때로는 일부 네트워크 공유를 마운트하려는 경우 그리 좋지 않습니다.
sudo mount
우분투 시스템에 있다면 괜찮습니다. 그래도 비밀번호를 입력해야합니다.
udev
우분투 * 시스템에 USB 스틱, 카메라 및 플래시 카드와 같은 것을 마운트 할 것입니다 (그러나 데비안, 슬랙웨어 등과 같은 사용자 친화적 인 배포판은 아닙니다)
역사적으로 일부 사용자 (또는 그룹)에게 권한을 부여하는 유닉스 방법은 sudoers
파일을 통해 이루어 집니다.
그것을 사용하는 많은 가이드가 있으므로 특정 제안하지는 않습니다. Linux 문서 프로젝트 웹 사이트를 사용하여 그것에 대해 배웠다고 말할 것입니다.
sudoers
또한 암호를 제공하지 않아도 장치와 공유를 투명하게 마운트 할 수 있다는 점이 더 중요합니다 (특히주의해야합니다).
일반적으로 제어 환경에서하는 일은 sudoers
파일을 사용하여 특정 그룹의 사용자가 네트워크 공유를 투명하게 마운트 할 수 있도록하는 것입니다. 따라서 "사용자가 클라이언트 터미널에 로그온 할 때 네트워크 파일 서버에서 사용자의 홈 폴더 마운트"와 같은 작업을 허용 하는 명령 mount.nfs
과 mount.cifs
sudoers 파일에 명령을 추가합니다 .
autofs
로 마운트하는 데 자체적 으로 사용하는 방법을 알 수 없었습니다 . /home/$USER
/home/$USER/fromFS/
guestmount
libguestfs 속임수
sudo apt-get install libguestfs-tools
# Workarounds for Ubuntu 18.04 bugs.
# https://serverfault.com/questions/246835/convert-directory-to-qemu-kvm-virtual-disk-image/916697#916697
sudo rm -rf /var/cache/.guestfs-*
echo dash | sudo tee /usr/lib/x86_64-linux-gnu/guestfs/supermin.d/zz-dash-packages
sudo chmod +r /boot/vmlinuz-*
# Create a test image.
mkdir sysroot
dd if=/dev/urandom of=sysroot/myfile bs=1024 count=1024
virt-make-fs --format=raw --type=ext2 sysroot sysroot.ext2
# Mount it, have fun, unmount!
mkdir -p mnt
# /dev/sda becuase we have a raw filesystem.
guestmount -a sysroot.ext2.qcow2 -m /dev/sda mnt
cmp sysroot/myfile mnt/myfile
guestunmount mnt
에 의존:
문서 : http://libguestfs.org/guestmount.1.html
우분투 18.04, libguestfs-tools 1 : 1.36.13-1ubuntu3에서 테스트되었습니다.
gvfs-mount
-d /dev/sdX