root権限なしでイメージファイルをマウントする方法は?

root権限なしでイメージファイルをマウントする方法は?

root権限なしでファイルシステムイメージをマウントできますか?通常私はこうする:

mount -o loop DISK_IMAGE FOLDER

sudoを使用したりsuidを設定したりせずにmountこれを行うための適切な方法はありますか?

fusermount私は利用可能なISOイメージがあることを知っていますが、これは非常に限られており、ISOイメージの場合でも私のイメージの一部はインストールされませんが、mount常に機能します。

答え1

管理者がインストール権限を付与していないものはインストールできません。ルートのみがmountシステムコールを呼び出すことができます。その理由は、システムの場所に何かをマウントしたり、ファイルを他のユーザーに属しているように見せたり、ファイルの所有権に依存するプログラムを悪用したり、setuidファイルを生成したり、バグを悪用したりするなど、マウントを介して権限を昇格させる方法が多いからです。ファイルシステムドライバで進行中です。

コマンドはmountsetuid ルートです。しかし、ルートではない場合はfstab

コマンドはfusermountsetuid ルートです。 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/fstabroot権限が必要です。ただし、単一のアイテムを非常に柔軟に使用して、追加の編集なしでさまざまなファイルをさまざまなマウントポイントにマウントできます/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セキュリティが向上します。実際、これらのオプションはuseroptionsまたはを使用するときのデフォルトオプションとして追加されます。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にすることです。私の経験上)。usersmount

また、正しい項目が必要ですumount(これは少し異なる問題です。以下を参照)。このオプションは、ファイルシステムをマウントするユーザーの権限をuser制限し、誰もがそれを使用できるようにするため、これが好まれます。users残念ながら、このオプションは常に機能するわけではなく、機能するにはいくつかの追加手順が必要な場合があります。これについては以下で議論する。umountusersuserオプション「user」は、アンマウントではなくマウントに適用されます。

/etc/fstabまず、次の項目を追加します。

/tmp/UFS/drive /tmp/UFS/mountpoint  auto users,noauto, 0 0

/tmp/UFS/driveISOファイルシステムイメージを含むファイルなど、マウントしたいデバイスまたはファイルへのシンボリックリンク(またはシンボリックリンク)として使用されます/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権限なしで必要な数のファイルをインストールし、順序に関係なく削除できます。

その他の参考資料:

関連情報