
사이트 사무실에 두 대의 Rocky Linux 8 서버가 있고 클라이언트로부터 정기적으로 많은 양의 데이터를 받는 상황이 있습니다. 데이터는 다양한 외부 USB 하드 드라이브와 가끔 USB 메모리 스틱에 도착합니다. 이러한 드라이브에는 모든 종류의 파일 시스템이 있을 수 있지만 가장 일반적인 것은 NTFS 및 exFAT입니다.
NTFS는 기본적으로 RL8에서 지원되지만 exFAT는 지원되지 않습니다. 우리는 rpmfusion의 퓨즈-exfat 패키지를 사용했습니다. (https://github.com/relan/exfat).
루트 액세스 권한이 없거나 없어도 되는 사용자가 이러한 기능을 원활하게 마운트할 수 있기를 바랍니다. 이전에는 pmount를 사용했지만 pmount는 exFAT와 잘 작동하지 않습니다. exFAT이 아니라 FUSE이기 때문인 것 같습니다.
이를 달성할 수 있는 훌륭하고 안전한 방법이 있습니까?
편집: pmount는 마운트 주변의 매우 얇은 래퍼로 보이며 실행 파일의 setuid 비트를 통해 권한이 부여됩니다. 따라서 기본적으로 이는 한정된 마운트 명령 세트이며 exfat는 그중 하나가 아닙니다. 여기에 몇 가지 토론이 있습니다.https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=755434제안된 패치는 여기에 있습니다: launchpadlibrarian.net/229524614/pmount.exfat.patch
답변1
를 사용하면 udisks2
사용자가 루트 액세스 없이 저장 장치를 관리하고 마운트할 수 있습니다.
설정
- 도구를 설치합니다.
sudo dnf install udisks2 ntfs-3g fuse-exfat
- 사용자가 다음을 관리하도록 허용합니다.
sudo usermod -a -G disk <username>
그룹 의 루트가 아닌 사용자는 명령줄 도구를 disk
사용하여 udisksctl
외부 드라이브를 관리하고 마운트할 수 있습니다.
<username>
드라이브 관리를 허용하려는 사용자로 바꾸십시오 .
사용 예
- 드라이브 마운트:
udisksctl mount -b /dev/sdXY
- 드라이브 마운트 해제:
udisksctl unmount -b /dev/sdXY
- 정보를 얻다:
udisksctl info -b /dev/sdXY
답변2
나는 그것을 못 박았다고 생각한다. 다음 polkit 규칙을 추가하십시오 /etc/polkit-1/rules.d/10-allow-usb-mounts.rules
.
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.udisks2.filesystem-mount-other-seat" && subject.isInGroup("groupforthosewhocanmountusbdisks")) {
var bus = action.lookup("drive.removable.bus");
if (bus == "usb" || bus == "firewire") {
polkit.log("polkit rule for mounting USB drives with udisks2")
polkit.log("Device: " + action.lookup("device"))
polkit.log("Drive: " + action.lookup("drive"))
polkit.log("Bus: " + bus)
polkit.log("Serial: " + action.lookup("drive.serial"))
polkit.log("Vendor: " + action.lookup("drive.vendor"))
polkit.log("Model: " + action.lookup("drive.model"))
return polkit.Result.YES;
}
}
});
테스트하려면 다음을 사용하여 일반 사용자로 디스크를 마운트합니다.
udisksctl mount -b /dev/sdb
그리고 출력을 확인하십시오 journalctl
.
답변3
sudo
사용자가 장치만 나타내는 고정 마운트 지점에 USB 드라이브를 마운트하기 위해 특별히 제작된 일부 스크립트를 실행할 수 있도록 구성할 수 있습니다 . 예를 들어 다음을 실행할 수 있습니다.
sudo mount-usb /dev/sdb
여기서 스크립트는 /dev/usb를 마운트하고 이를 예를 들어 /mnt/usb에 마운트하려고 시도하고 이를 사용자에게 알립니다. 마찬가지로 umount-usb
다음을 사용하여 드라이브를 마운트 해제하는 스크립트를 가질 수 있습니다 .
sudo umount-usb
mount-usb 스크립트는 다음과 같습니다.
#!/bin/bash
# mount-usb: mount drives in /mnt/usb
[ -z "$1" ] && echo "Use: $0 device" && exit
if ! [[ $1 =~ ^/dev/.*$ ]] ; then
echo "Use /dev/xxx as device"
exit
fi
mount -t auto -o uid=$SUDO_UID,gid=$SUDO_UID,ro "$1" /mnt/usb
mount | grep /mnt/usb #-- show result
우리는 SUDO* 변수를 사용하여 호출 사용자의 실제 ID/gid를 얻고 정규식을 사용하여 장치 사양을 간단하게 확인합니다. 그러면 해당 내용은 umount-usb
다음과 같습니다.
#!/bin/bash
# umount-usb: unmounts the device in /mnt/usb
umount /mnt/usb
구성은 명령 을 사용하여 파일 sudo
편집을 완료합니다 (또는 vi 대신 다른 편집기를 사용). 여기서 일부 사용자나 그룹은 암호를 묻지 않고 루트로 특정 명령을 실행할 수 있습니다. 사용자 john 및 그룹 usb-mounters의 예:/etc/sudoers
visudo
VISUAL=nano visudo
Defaults !lecture
Cmnd_Alias USBMNT = /root/mount-usb ^/dev/.*$, umount-usb ""
john ALL=NOPASSWD: USBMNT
%usb-mounters ALL=NOPASSWD: USBMNT
/dev/xx 인수만 활성화하는 정규식 mount-usb
과 이를 비활성화하는 null 문자열에 유의하세요 umount-usb
(sudoers 매뉴얼). 이 정의를 사용하면 스크립트에서 /dev/xx에 대한 테스트를 생략할 수 있지만 어떤 경우에도 이를 유지하는 것을 선호합니다.