
Wir haben eine Situation, in der ein Standortbüro über ein paar Rocky Linux 8-Server verfügt und regelmäßig große Datenmengen von Kunden empfängt. Die Daten kommen auf einer Vielzahl externer USB-Festplatten und gelegentlich auf einem USB-Speicherstick an. Diese Laufwerke können alle möglichen Dateisysteme haben, aber die gängigsten sind NTFS und exFAT.
NTFS wird auf RL8 nativ unterstützt, exFAT jedoch nicht. Wir haben das Paket fuse-exfat von rpmfusion verwendet. (https://github.com/relan/exfat).
Ich möchte, dass meine Benutzer, die keinen Root-Zugriff haben und auch nicht haben sollten, diese problemlos mounten können. Bisher haben wir pmount verwendet, aber pmount funktioniert nicht gut mit exFAT. Ich denke, das liegt daran, dass es FUSE ist, nicht daran, dass es exFAT ist.
Gibt es eine gute und sichere Möglichkeit, dies zu erreichen?
Bearbeiten: pmount scheint ein sehr dünner Wrapper um mount zu sein, und Berechtigungen werden über ein Setuid-Bit in der ausführbaren Datei erreicht. Im Grunde handelt es sich also um eine begrenzte Anzahl von Mount-Befehlen, und exfat ist keiner davon. Hier gibt es einige Diskussionen:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=755434und ein vorgeschlagener Patch hier: launchpadlibrarian.net/229524614/pmount.exfat.patch
Antwort1
Sie könnten verwenden udisks2
, wodurch Benutzer Speichergeräte ohne Root-Zugriff verwalten und mounten können.
Aufstellen
- Installieren Sie das Tool:
sudo dnf install udisks2 ntfs-3g fuse-exfat
- Benutzern die Verwaltung von Folgendem gestatten:
sudo usermod -a -G disk <username>
Nicht-Root-Benutzer in der disk
Gruppe können das udisksctl
Befehlszeilentool zum Verwalten und Mounten externer Laufwerke verwenden.
Ersetzen Sie es <username>
durch den Benutzer, dem Sie die Verwaltung der Laufwerke erlauben möchten.
Anwendungsbeispiele
- Mounten Sie ein Laufwerk:
udisksctl mount -b /dev/sdXY
- Ein Laufwerk aushängen:
udisksctl unmount -b /dev/sdXY
- Informationen bekommen:
udisksctl info -b /dev/sdXY
Antwort2
Ich glaube, ich habe es geschafft. Fügen Sie die folgende Polkit-Regel hinzu /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;
}
}
});
Zum Testen mounten Sie die Festplatte als normaler Benutzer mit:
udisksctl mount -b /dev/sdb
Und überprüfen Sie die Ausgabe mit journalctl
.
Antwort3
Sie können die Konfiguration so konfigurieren sudo
, dass Benutzer ein speziell gestaltetes Skript ausführen können, um USB-Laufwerke an einem festen Einhängepunkt einzuhängen, der nur das Gerät angibt. Sie könnten beispielsweise Folgendes ausführen:
sudo mount-usb /dev/sdb
Dabei versucht das Skript, /dev/usb zu mounten, z. B. in /mnt/usb, und informiert den Benutzer darüber. Ebenso können wir ein umount-usb
Skript haben, um das Laufwerk zu unmounten:
sudo umount-usb
Das Mount-USB-Skript könnte wie folgt aussehen:
#!/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
Wir verwenden SUDO*-Variablen, um die echte ID/GID des aufrufenden Benutzers zu erhalten und eine einfache Überprüfung der Gerätespezifikation mit einem regulären Ausdruck durchzuführen. Das entsprechende Ergebnis umount-usb
lautet dann:
#!/bin/bash
# umount-usb: unmounts the device in /mnt/usb
umount /mnt/usb
Die Konfiguration sudo
erfolgt durch Bearbeiten der /etc/sudoers
Datei mit dem visudo
Befehl (oder VISUAL=nano visudo
durch Verwenden eines anderen Editors anstelle von vi). Hier können wir einigen Benutzern oder Gruppen erlauben, bestimmte Befehle als Root auszuführen, ohne nach einem Passwort zu fragen. Beispiel für den Benutzer John und die Gruppe usb-mounters:
Defaults !lecture
Cmnd_Alias USBMNT = /root/mount-usb ^/dev/.*$, umount-usb ""
john ALL=NOPASSWD: USBMNT
%usb-mounters ALL=NOPASSWD: USBMNT
Beachten Sie den regulären Ausdruck, um nur /dev/xx-Argumente zu aktivieren, mount-usb
und den Null-String, um sie zu deaktivieren umount-usb
(wie im Abschnittsudoers-Handbuch). Wir können den Test für /dev/xx im Skript mit dieser Definition weglassen, aber ich ziehe es vor, ihn auf jeden Fall beizubehalten.