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


41

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

mount -o loop DISK_IMAGE FOLDER

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

fusermount一部のISOイメージで使用できることは知っていますが、それはかなり制限されています。ISOイメージであっても、一部のイメージはマウントできませんが、mount常に機能します。


1
mountバイナリがSUID許可を必要としない場合、fakerootを問題なく使用できるはずです。
サキスク

5
@faif fakerootはここでは役に立ちません。ファイルの所有権は異なるふりをしますが、mount(2)root以外のときに呼び出すなど、所有していない権限を与えることはできません。
ジル「SO-悪であるのをやめる」

@faifマウントには絶対にルート権限が必要です。そうでなければ、潜在的な結果はかなり悲惨なものになります。
シャドゥール

回答:


25

管理者が何らかの方法でマウントの許可を与えていないものはマウントできません。rootのみがmountシステムコールを呼び出すことができます。これは、システムの場所に何かをマウントしたり、ファイルを別のユーザーに属しているように見せたり、ファイルの所有権に依存するプログラムを悪用したり、setuidファイルを作成したり、バグを悪用したりするなど、マウントによって特権をエスカレートする方法が多数あるためですファイルシステムドライバーで。

mountコマンドは、rootにsetuidです。ただし、で言及されているもののみをマウントできますfstab

fusermountコマンドは、rootにsetuidです。FUSEドライバーを介してのみマウントでき、その方法で任意の所有権またはアクセス許可を持つファイルを提供する能力を制限します(ほとんどのセットアップでは、FUSEマウント上のすべてのファイルはユーザーのものです)。

最善の策は、ディスクイメージを読み取ることができるFUSEファイルシステムを見つけることです。ISO 9660イメージの場合、fuseisoUMfuseのISO 9660サポートの両方を試してください(Debianでfuseiso9660パッケージとして利用可能)。


sudo(SUIDビットが設定されているにもかかわらず)fstabエントリのマウントのみを許可することを説明するための+1 。このことから、その正規のユーザがマウントできるように()SUIDビットは、理にかなって、以下fstabのエントリを(そして実行させるmountことがあることをシステムコールを)および(b)mountのみにユーティリティの制限を可能にするfstabエントリが非によって装着されますルートユーザー。
デビッド

フロッピーディスクイメージを使用している場合、mtoolsを使用してイメージにデータを書き込むこともできます。参照:stackoverflow.com/questions/11202706/...
ジャイルズバスゲイト

@David、これは今変更されましたか?私が持っている唯一のエントリfstabは、rootfsとbootです。USBドライブをマウントするにはlsblkmountそれに応じて調べます。これを行うのに問題はありません。
sherrellbc

16

Debianのウィキは、これにはいくつかの方法を示しています。これが一つの方法です。(これにはudisks2パッケージが必要です。)

最初

$ udisksctl loop-setup -f $PATH_TO_IMAGE
Mapped file $PATH_TO_IMAGE as /dev/loop0.

/dev/loop0 以下に使用されます。

しかし、もしudisksctl loop-setupコマンドが戻っていた/dev/loop1、その後、 /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
Unmounted /dev/loop0.

必要に応じて:

$ udisksctl loop-delete -b /dev/loop0

1
udevilはより便利なオプションでした
Anwar

Ubuntu 16.04で動作しましたが、どうですか?私が期待しているループデバイスを使用しているようsudoです。setsidまたは関連するshenanigans
チロSantilliは新疆改造中心法轮功六四事件

1
@CiroSantilli新疆改造中心六四事件法轮功 ツールのソースコードはこちらです。デーモンとの通信にDBusを使用しているようですが、DBusやGlibについてはよく知りません。
ニックODell

1
OPが要求しなかった読み取り専用-rudisksctl loop-setup意味するオプションは、書き込み可能なマウントを取得するためにドロップすることに注意してください。
ペレニルソン

15

FUSEモジュールのguestmountを使用して、いくつかのタイプのディスクイメージをマウントできます。これはguestfsエコシステムの一部であり、root権限は必要ありません。

詳細については、manページをご覧ください。

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

1
うるさく、Ubuntuの上guestmountを実行すると、今のカーネルイメージを読み取るために、いくつかのルートアクセスが必要です:bugs.launchpad.net/ubuntu/+source/linux/+bug/759725
クレマン

@Clémentlibguestfsがその仕事にカーネルイメージを必要とする理由を理解したいと思います...
Ciro Santilli新疆改造中心法轮功六四事件

1
@CiroSantilli新疆改造中心六四事件法轮功 そのマシンをブートするには、カーネルとinitrdが必要です。
ジョシュ

3

可能な方法/etc/fstabは、「user」パラメータを使用してISOのエントリを追加することです。

/test.iso /mnt/iso auto defaults,user 0 1

ただし、通常、このファイルを編集するにはルートアクセスが必要なので、あまり役に立ちません。


2

正しいエントリがで作成されていれば、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、セキュリティに貢献します。実際、これらのオプションは、オプションが使用されるときにデフォルトのオプションとして追加されるuserusers、使用されます。これは、以下で行う場合に必ず当てはまります。これらのデフォルトをオーバーライドする前によく考えてください。 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オプション含まれていることuserusers、ユーザーが尋ねることができるようにmount取り付け引数としてマウントされたり(私の経験では、両方ではなく)を使用するようにマウントポイントするファイルを与えることによって、そのエントリで指定を行うことを。

また、適切なエントリが必要ですumount(これはわずかに異なる問題です-以下を参照)。このオプションuserは、ファイルシステムをマウントしたユーザーにusers許可を制限するumount一方usersで、すべてに許可するため、通常はより優れています。残念ながら、このオプションuserは常に機能するとは限らず、他の手順を実行する必要がある場合があります。これについては、umountではなく、マウントのオプション「ユーザー」で説明します

まず、次の/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

私の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エントリにより、ルート権限なしで、任意の数のファイルをマウントし、任意の順序でアンマウントできます。

その他の参照:


fstabエントリがシンボリックリンクを指している場合、シンボリックリンクを作成するだけで、それらを悪用してルートなしで何かをマウントすることはできませんか?間接的に、mountすべての通常のユーザーのコマンドを昇格させているだけではありませんか?私が間違っている場合は修正してください。
バーラトG

また、GNU / Linuxディストリビューションの最新バージョン(debian jessieなど)は、fstabで無効なエントリを検出した場合、guiログインを提供しません。fstabのdeviceまたはmountpointセクションが有効なエントリを指していない場合、コンソールログインセッションにフォールバックします。ユーザーは、コンソールセッションを介してログインしstartx、ディスプレイマネージャーを明示的に起動するために入力する必要があります。
バーラトG

0

パッケージlibguestfs-tools-cにはguestmountコマンドがあるため、

mkdir dvd    
guestmount -a image.iso -r -i dvd 

dfはimage.isoがマウントされていることを示します

df

マウント解除するために:

guestunmount dvd
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.