root権限なしでファイルシステムイメージをマウントできますか?通常私はこうする:
mount -o loop DISK_IMAGE FOLDER
sudoを使用したりsuidを設定したりせずにmount
これを行うための適切な方法はありますか?
fusermount
私は利用可能なISOイメージがあることを知っていますが、これは非常に限られており、ISOイメージの場合でも私のイメージの一部はインストールされませんが、mount
常に機能します。
答え1
管理者がインストール権限を付与していないものはインストールできません。ルートのみがmount
システムコールを呼び出すことができます。その理由は、システムの場所に何かをマウントしたり、ファイルを他のユーザーに属しているように見せたり、ファイルの所有権に依存するプログラムを悪用したり、setuidファイルを生成したり、バグを悪用したりするなど、マウントを介して権限を昇格させる方法が多いからです。ファイルシステムドライバで進行中です。
コマンドはmount
setuid ルートです。しかし、ルートではない場合はfstab
。
コマンドはfusermount
setuid ルートです。 FUSEドライバを介してのみ物事をマウントすることができ、このようにして任意の所有権または権限を持つファイルを提供する機能が制限されます(ほとんどの設定では、FUSEマウント内のすべてのファイルはユーザーのものです)。
最良の方法は1つを見つけることですFUSEファイルシステムディスクイメージを読み取ることができます。 ISO 9660イメージの場合は、以下も試してください。フセソそしてUMfuseのISO 9660サポート(Debianで利用可能fuseiso9660
パック)。
答え2
これDebian Wikiこれを行ういくつかの方法が表示されます。これは一つの方法です。これを行うには、udisks2
パッケージをインストールする必要があります。
まず、「ループデバイス」を作成します。これにより、イメージファイルをマウントできます。
$ udisksctl loop-setup -f $PATH_TO_IMAGE
Mapped file $PATH_TO_IMAGE as /dev/loop0.
画像をにマッピングします/dev/loop0
。ただし、前のコマンドが/dev/loop1
それを返した場合は、次のコマンドをすべて置き換えます/dev/loop0
。/dev/loop1
作成したブロックデバイスが以前のコマンドを使用して自動的にマウントされていない場合は、次のコマンドを実行する必要があります。
$ udisksctl mount -b /dev/loop0
Mounted /dev/loop0 at /media/$USER/$IMAGE_NAME
ディスク上のファイルを表示できます。
$ ls -l /media/$USER/$IMAGE_NAME/
完了したら削除できます。
$ udisksctl unmount -b /dev/loop0
$ udisksctl loop-delete -b /dev/loop0
答え3
FUSEモジュールguestmountを使用して、さまざまな種類のディスクイメージをマウントできます。これはguestfsエコシステムの一部であり、root権限は必要ありません。
見てマニュアルページもっと学ぶ。
はい
1.最初のパーティションにプライマリファイルシステムがある一般的なWindowsクライアントの場合:
guestmount -a windows.img -m /dev/sda1 --ro /mnt
2.最初のパーティションに/bootファイルシステムがあり、論理ボリュームにルートファイルシステムがある一般的なLinuxクライアントの場合:
guestmount -a linux.img -m /dev/VG/LV -m /dev/sda1:/boot --ro /mnt
答え4
実際にroot権限を持たない一般ユーザーとして/etc/fstab
。
もちろん、修正には/etc/fstab
root権限が必要です。ただし、単一のアイテムを非常に柔軟に使用して、追加の編集なしでさまざまなファイルをさまざまなマウントポイントにマウントできます/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
optionsまたはを使用するときのデフォルトオプションとして追加されます。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
オプション「user」は、アンマウントではなくマウントに適用されます。。
/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
ループデバイスの使用は暗黙的であり、もはや-o loop
明示的な使用を必要としないので、私のMageia Linuxではこれで十分です。今日、このようなことがどれほど一般的であるか疑問に思います。バラより
設置時に循環装置をいつ使用する必要がありますか?
このインストールは、次の形式とコマンドで表示されます。
$ 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
/dev/loop0
/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
エントリを使用すると、root権限なしで必要な数のファイルをインストールし、順序に関係なく削除できます。
その他の参考資料: