正しいエントリがで作成されていれば、root権限のない通常のユーザーとして必要なものを多かれ少なかれマウントすることは実際には非常に簡単/etc/fstab
です。
もちろん、/etc/fstab
ルート権限を必要とする変更。ただし、単一のエントリを非常に柔軟に使用して、さまざまなファイルをさまざまなマウントポイントに(u)マウントできます/etc/fstab
。
以下に、ジョブを実行する2つの非常に短い(5行+コメント)Bashスクリプトを示します。
取り付け用
#!/bin/sh
# usage: usmount device dir
# author: babou 2013/05/17 on https://unix.stackexchange.com/questions/32008/mount-an-loop-file-without-root-permission/76002#76002
# Allows normal user to mount device $1 on mount point $2
# Use /etc/fstab entry :
# /tmp/UFS/drive /tmp/UFS/mountpoint auto users,noauto 0 0
# and directory /tmp/UFS/
# Both have to be created (as superuser for the /etc/fstab entry)
rm -f /tmp/UFS/drive /tmp/UFS/mountpoint
ln -s `realpath -s $1` /tmp/UFS/drive
ln -s `realpath -s $2` /tmp/UFS/mountpoint
mount /tmp/UFS/drive || mount /tmp/UFS/mountpoint
# The last statement should be a bit more subtle
# Trying both is generally not useful.
降車用
#!/bin/sh
# usage: usumount device dir
# author: babou 2013/05/17 on https://unix.stackexchange.com/questions/32008/mount-an-loop-file-without-root-permission/76002#76002
# Allows normal user to umount device $1 from mount point $2
# Use /etc/fstab entry :
# /tmp/UFS/drive /tmp/UFS/mountpoint auto users,noauto 0 0
# and directory /tmp/UFS/
# Both have to be created (as superuser for the /etc/fstab entry)
rm -f /tmp/UFS/drive /tmp/UFS/mountpoint
ln -s `realpath -s $1` /tmp/UFS/drive
ln -s `realpath -s $2` /tmp/UFS/mountpoint
umount /tmp/UFS/drive || umount /tmp/UFS/mountpoint
# One of the two umounts may fail because it is ambiguous
# Actually both could fail, with careless mounting organization :-)
ディレクトリ/tmp/UFS/
は、リンクを分離し、衝突を避けるために作成されます。ただし、シンボリックリンクは、同じ場所(同じパス)にある限り、ユーザー空間のどこにでも配置できます。/etc/fstab
エントリはどちらか変わることはありません。
重要な警告:セキュリティ上の理由から、取り付けは制限されています。柔軟性を高めると、悪意のあるソフトウェアへの扉が開かれる可能性があります。私はセキュリティの専門家ではないので、絶対に必要な範囲を超えてドアを開くことをお勧めします...オプションを使用して、マウントできるファイルシステムでできることを制限します。知識のある貢献者がセキュリティの問題についてさらにコメントできる場合、役に立つかもしれません。
マウントされているファイルシステムの使用を制限するためのさまざまなオプションを使用できます。たとえばnoexec
、バイナリやの実行を防ぎnosuid
、セキュリティに貢献します。実際、これらのオプションは、オプションが使用されるときにデフォルトのオプションとして追加されるuser
かusers
、使用されます。これは、以下で行う場合に必ず当てはまります。これらのデフォルトをオーバーライドする前によく考えてください。 http://en.wikipedia.org/wiki/Fstab
さらに保護するために、他のオプションを追加できます。たとえば owner
、 /etc/fstab
エントリ のオプションにより、ユーザーは自分が所有するファイルまたはデバイスのみを処理できます。man mount
オプションのリスト については、http ://linux.die.net/man/8/mount を参照してください。
この/etc/fstab
エントリの使用は、シンボリックリンクを含むディレクトリのuser.group所有権によって制限することもできます。
説明
この説明は、上記の2つのスクリプトを単純化できることに気付く前に書かれました。いくつかの余分な機械がなければ解決できないわずかに複雑な問題が手元にあるため、すぐにはそれらのことを考えませんでした。したがって、私の説明は本来より少し複雑かもしれませんが、すべてを一から書き直す勇気はありません。
基本的な考え方は、内のエントリを作成することです/etc/fstab
オプション含まれていることuser
やusers
、ユーザーが尋ねることができるようにmount
取り付け引数としてマウントされたり(私の経験では、両方ではなく)を使用するようにマウントポイントするファイルを与えることによって、そのエントリで指定を行うことを。
また、適切なエントリが必要ですumount
(これはわずかに異なる問題です-以下を参照)。このオプションuser
は、ファイルシステムをマウントしたユーザーにusers
許可を制限するumount
一方users
で、すべてに許可するため、通常はより優れています。残念ながら、このオプションuser
は常に機能するとは限らず、他の手順を実行する必要がある場合があります。これについては、umountではなく、マウントのオプション「ユーザー」で説明します。
まず、次の/etc/fstab
ようなエントリに追加します。
/tmp/UFS/drive /tmp/UFS/mountpoint auto users,noauto, 0 0
/tmp/UFS/drive
ISOファイルシステムのイメージを含むファイルなど、マウントするデバイスまたはファイルへのシンボリックリンク(またはシンボリックリンク)として使用します/home/johndoe/john-image-file.iso
。
また、使用する/tmp/UFS/mountpoint
マウントポイントへのシンボリックリンクとして定義します/mnt/iso
。
john-image-file.iso
次のコマンドでマウントできます:
$ mount /tmp/UFS/drive
私のMageia Linuxではこれで十分です。ループデバイスの使用が暗黙的になり、-o loop
明示的に使用する必要がなくなったためです。それが今日どのくらい一般的かはわかりません。取り付けの際、いつループデバイスを使用すべきかを参照してください
。
このマウントは、テーブルとコマンドに表示されます。
$ df | tail -1
/dev/loop0 5,1G 5,1G 0 100% /mnt/iso
$ tail -1 /etc/mtab
/dev/loop0 /mnt/iso udf ro,nosuid,nodev,noexec,relatime,utf8 0 0
$ mount | tail -1
/home/johndoe/john-image-file.iso on /mnt/iso type udf (ro,nosuid,nodev,noexec,relatime,utf8)
$ tail -1 /proc/mounts
/dev/loop0 /mnt/iso udf ro,nosuid,nodev,noexec,relatime,utf8 0 0
$ tail -1 /proc/self/mountinfo
46 22 7:0 / /mnt/iso rw,nosuid,nodev,noexec,relatime - udf /dev/loop0 ro,utf8
$ tail -1 /proc/self/mountstats
device /dev/loop0 mounted on /mnt/iso with fstype udf
マウント操作は任意のファイルまたはドライブで機能し、そのファイルまたはドライブ/tmp/UFS/drive
のデバイスへのシンボリックリンクを作成するだけで済みます。もちろん、シンボリックリンクが変更されない限り、別の名前と場所をシンボリックリンクに選択できます。
ファイルのマウント解除は、シンボリックリンクの適切な使用に同じ方法で依存します。ハーウェアドライブに対応する通常のデバイスの場合、同じリンクを使用するだけです。
ただし、ファイルシステムのイメージを含むファイルは、ループデバイスと呼ばれる特別な種類のデバイスを介してマウントされ、ファイルをマウントすると自動的に割り当てられます。
ファイルのマウントを解除するには、ファイルではなくループデバイスを参照する必要があります。したがって、で/etc/fstab
使用されるループデバイス/etc/mtab
、here /dev/loop0
、およびマウントポイントhereの両方に一致するエントリが必要です
/mnt/iso
。
ループデバイスは動的に割り当てられるため、ループデバイスが異なる場合があるため、このようなエントリを事前に作成することはできません。固定ループデバイスを使用することも可能ですが、他の方法では不便です。http://igurublog.wordpress.com/2011/01/22/how-to-allow-mounting-of-iso-files-by-a-regular-user/を参照してください
(このブログは実際にここに返信を促しました)。
ただし、ループデバイスの名前は、/dev/loop0
上記でいくつかの異なる方法で行ったように、システムに問い合わせることで確認できます。次に、標準の/etc/fstab
エントリを作成して、シンボリックリンクを介して正しいループデバイスを/tmp/UFS/drive
指し、以前にで行ったようにマウントポイントを指し/tmp/UFS/mountpoint
ます。これが完了すると、次のコマンドのいずれかを使用してファイルをマウント解除できます(ただし、あいまいさがない限り/etc/mtab
、これは別の問題です)。
$ umount /tmp/UFS/drive
$ umount /dev/loop0
$ umount /mnt/iso
$ umount /tmp/UFS/mountpoint
2つのシンボリックリンクはコマンドが発行されたときにのみ必要なので、動的に変更できます。したがって、単一の/etc/fstab
エントリにより、ルート権限なしで、任意の数のファイルをマウントし、任意の順序でアンマウントできます。
その他の参照:
mount
バイナリがSUID許可を必要としない場合、fakerootを問題なく使用できるはずです。