web-dev-qa-db-ja.com

root以外のユーザーが特定のNTFS外付けハードドライブをマウントできるようにする

Linuxサーバーに接続された4TBの外付けハードドライブがあります。

このドライブのfstab権限は、特定の非rootユーザーのみがアクセスできるように設定されています。

/dev/disk/by-uuid/CEE0476DE0388DA9/ /mnt/USBexternal ntfs-3g defaults,auto,uid=51343,gid=50432,umask=077 0 0

このユーザーは、離れた場所から、この外付けハードドライブへのrsyncバックアップを正常に実行できました。

ただし、外付けドライブは、内蔵ハードドライブほど確実にマウントされたままにはなりません。数日おきにrootとしてログインする必要があります。次のコマンドを実行してください。

mount -a

このユーザーにこのドライブをマウントする権限を与えたいのですが、非rootユーザーがmount -aを実行すると、これを行う権限がないことを通知します。

nonrootuser@server:~$ mount -a
mount: only root can do that

非rootユーザーがこのドライブを具体的にマウントしようとすると、既にマウントされていない場合でも(すでにマウントされていなくても)、次のように通知されます。

nonrootuser@server:~$ mount /mnt/USBexternal/
mount: according to mtab, /dev/sdb1 is already mounted on /mnt/USBexternal

前述のように、ドライブは実際にはマウントされていませんが、(上記の出力のために)root以外のユーザーがドライブをアンマウントしようとすると、要求がfstabに同意しないと表示されます。

nonrootuser@server:~$ umount /mnt/USBexternal/
umount: /mnt/USBexternal/ mount disagrees with the fstab

他の管理権限を与えずに、このユーザーにこのドライブをマウントする機能を許可するにはどうすればよいですか?

3
Lonniebiz

このユーザーがmountコマンドを使用できるように、/etc/sudoersファイルにエントリを設定できます。 /etc/sudoersファイルの最後に次のようなものを追加します。

username ALL=NOPASSWD: /usr/bin/mount, /sbin/mount.ntfs-3g, /usr/bin/umount

各実行可能ファイルへの正確なパスがシステムにとって正しいことを確認してください。たとえば、mountコマンドが/binではなく/usr/binにある場合があります。

mount.ntfs-3gパーツを追加することは、ユーザーにそのアクセスを提供するために重要です。 ntfs-3gファイルシステムタイプを使用していることがマウントコマンドでわかります。

代わりに、マウント/アンマウントを処理するシェルスクリプトを作成し、それをsudoersファイルに配置できます。例えば:

/usr/local/bin/mount-ntfs-driveスクリプトを作成します。

#!/bin/bash
device_path="/dev/disk/by-uuid/CEE0476DE0388DA9/"
mount_point="/mnt/USBexternal"
if [ "$1" = "-u" ] ; then
  # do unmount
  /bin/umount $mount_point
else
  # do mount
  /bin/mount $device_path $mount_point
fi

/etc/sudoersファイルを編集します:

username ALL=NOPASSWD: /usr/local/bin/mount-ntfs-drive

必ずchmod +x /usr/local/bin/mount-ntfs-driveを実行してください。また、ユーザーがファイルを実行するときは、ファイルを機能させるために完全修飾パスを使用する必要があります。それは彼らの道からうまくいくかもしれませんが、確かではありません。

Sudo /usr/local/bin/mount-ntfs-drive

3
cmevoli

接続が切断されているかどうかを確認し、その場合に必要なクリーンアップを実行するスクリプトを作成できます。このスクリプトは、rootによってcronとして30分ごとに実行できます。

カーネルがデバイスがなくなったことを検出すると、/proc/mountsから消えてしまう可能性があります。そうでない場合、スクリプトはマウントされたボリュームにファイルを作成しようとするだけです。

それはあなたが説明した問題の状況を回避するでしょう。

別のアプローチは、userfstab機能を使用せずに、代わりにSudoを使用して、ユーザーがクリーンアップの両方を実行するスーパーユーザー権限でスクリプトを実行できるようにすることです(必要に応じて)とマウント。

3
Hauke Laging