
あるサイト オフィスには Rocky Linux 8 サーバーが 2 台あり、クライアントから定期的に大量のデータを受け取っています。データはさまざまな外付け USB ハード ドライブや、場合によっては USB メモリ スティックで届きます。これらのドライブにはさまざまなファイル システムがありますが、最も一般的なのは NTFS と exFAT です。
RL8 では NTFS がネイティブでサポートされていますが、exFAT はサポートされていません。rpmfusion の fuse-exfat パッケージを使用しました。(出典: relan)。
ルート アクセスを持たない、または持つべきではないユーザーが、これらをスムーズにマウントできるようにしたいと思います。以前は 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
ユーザーが特別に作成されたスクリプトを実行して、デバイスのみを示す固定マウント ポイントに USB ドライブをマウントできるように設定できますsudo
。たとえば、次のように実行できます。
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 の代わりに別のエディターを使用します)。これにより、一部のユーザーまたはグループがパスワードを要求せずに特定のコマンドを root として実行できるようになります。ユーザー 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
、では無効にするヌル文字列に注意してくださいumount-usb
(sudoers マニュアル)。この定義を使用すると、スクリプト内の /dev/xx のテストを省略できますが、いずれにしてもこれを保持することを好みます。