it-swarm-eu.dev

Jak připojit obrazový soubor bez oprávnění root?

Mohu připojit obraz systému souborů bez oprávnění root? Normálně bych udělal:

mount -o loop DISK_IMAGE FOLDER

Existuje nějaký vhodný způsob, jak to udělat bez použití sudo nebo nastavení suid na mount?

Vím, že mohu použít fusermount s některými obrázky ISO, ale to je docela omezené, dokonce i pro obrazy ISO nelze některé z mých obrázků připojit, ale mount vždy funguje.

45
daisy

Nemůžete připojit nic, co vám administrátor nějak nedovolil připojit. Systémové volání mount může volat pouze root. Důvodem je to, že existuje mnoho způsobů, jak eskalovat oprávnění prostřednictvím připojení, například připojením něčeho přes umístění systému, jak soubory vypadají, že patří jinému uživateli, a využíváním programu, který se spoléhá na vlastnictví souboru, vytváření souborů setuid nebo zneužívání chyb v ovladačích souborového systému.

Příkaz mount je kořen setuid. Ale pokud nejste root, umožňuje pouze připojit věci, které jsou uvedeny v fstab.

Příkaz fusermount je kořen setuid. Umožňuje pouze připojit věci pomocí ovladače pojistek a omezuje vaše schopnosti poskytovat soubory s libovolným vlastnictvím nebo oprávněními (ve většině nastavení patří vám všechny soubory na pojistce).

Nejlepším řešením je najít pojistkový souborový systém , který dokáže načíst bitovou kopii disku. U obrázků ISO 9660 zkuste jak fuseiso , tak podpora UMfuse ISO 966 (k dispozici pod Debianem jako fuseiso9660 balíček ).

Debian Wiki ukazuje několik způsobů, jak toho dosáhnout. Tady je jedna cesta. (Vyžaduje to udisks2 balíček k instalaci.

Nejprve vytvořte „smyčkové zařízení“. To nám umožní připojit soubor obrázku.

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

Všimněte si, že namapoval obrázek na /dev/loop0. Pokud se však předchozí příkaz vrátil, /dev/loop1, pak byste nahradili /dev/loop0 s /dev/loop1 ve všech následujících příkazech.

Možná budete muset spustit tento příkaz, pokud blokované zařízení, které jsme vytvořili, není automaticky připojeno k předchozímu příkazu:

$ udisksctl mount -b /dev/loop0
Mounted /dev/loop0 at /media/$USER/$IMAGE_NAME

Můžete se podívat na soubory na disku:

$ ls -l /media/$USER/$IMAGE_NAME/

Až budete hotovi, můžete je odpojit:

$ udisksctl unmount -b /dev/loop0
$ udisksctl loop-delete -b /dev/loop0
20
Nick ODell

K připojení několika typů bitových kopií můžete použít guestmount modulu pojistek. Je součástí ekosystému guestfs a nebude vyžadovat oprávnění root.

Pro více informací se podívejte na manuálovou stránk .

Příklady

1. Pro typického hosta Windows, který má hlavní souborový systém v prvním oddílu:

guestmount -a windows.img -m /dev/sda1 --ro /mnt

2. Pro typického hosta Linuxu, který má v prvním oddílu souborový systém/boot a kořenový souborový systém v logickém svazku:

guestmount -a linux.img -m /dev/VG/LV -m /dev/sda1:/boot --ro /mnt
16
Matthew

Možným způsobem by bylo přidat /etc/fstab položka pro ISO s parametrem 'user', jako

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

K úpravě tohoto souboru však obvykle potřebujete přístup rootovi, takže to není příliš užitečné.

2
Renan

Ve skutečnosti je velmi snadné připojit víceméně cokoli, co chcete jako normální uživatel bez oprávnění root, za předpokladu, že byl v /etc/fstab Vytvořen správný záznam.

Úpravy /etc/fstab Samozřejmě vyžadují oprávnění root. Jediný záznam však lze použít s velkou flexibilitou k (u) připojování mnoha různých souborů na různých bodech připojení, aniž by bylo třeba dále upravovat /etc/fstab.

Zde jsou dva velmi krátké (5 řádků + komentáře) Bash skripty, které tuto práci vykonají:

pro montáž

#!/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.

a pro demontáž

#!/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 :-)

Je vytvořen adresář /tmp/UFS/, Který izoluje odkazy a zabraňuje střetům. Symbolické odkazy však mohou být kdekoli v uživatelském prostoru, pokud zůstanou na stejném místě (stejná cesta). Položka /etc/fstab Se nikdy nezmění.

VITAL VAROVÁNÍ: Montáž je z dobrých bezpečnostních důvodů omezená. Jeho flexibilita může otevřít dveře škodlivému softwaru. Nejsem odborník na bezpečnost a doporučil bych, abyste dveře neotevírali více, než je absolutně nutné ... pomocí možností omezte, co lze udělat se souborovými systémy, které lze takto připojit. Pokud by informovaný přispěvatel mohl dále komentovat bezpečnostní otázky, mohlo by to být užitečné.

K dispozici jsou různé možnosti, jak omezit použití připojených souborových systémů, jako je například noexec, která zabraňuje provádění binárních souborů, nebo nosuid, a přispívá tak k zabezpečení. Ve skutečnosti jsou tyto možnosti přidány jako výchozí možnosti, když jsou použity možnosti user nebo users, což je nezbytně případ níže uvedeného. Než tyto výchozí hodnoty potlačíte, zamyslete se dvakrát. http://en.wikipedia.org/wiki/Fstab

Pro další ochranu lze přidat další možnosti. Například možnost owner v položce /etc/fstab umožní uživatelům jednat pouze s soubory nebo zařízení, která vlastní. Seznam možností viz man mount: http://linux.die.net/man/8/mount .

Použití této položky /etc/fstab Může být také omezeno prostřednictvím vlastnictví user.group adresáře (nebo adresářů) obsahujícího odkazy.

Vysvětlení

Toto vysvětlení bylo napsáno dříve, než jsem si uvědomil, že výše uvedené dva skripty mohu zjednodušit. Okamžitě jsem o nich nepřemýšlel, protože mám po ruce poněkud složitější problém, který bez nějakých dalších strojů nevyřeší. Takže moje vysvětlení může být trochu složitější, než by mělo, ale nemám odvahu vše přepsat od nuly.

Základní myšlenkou je vytvořit položky v /etc/fstab, Které obsahují možnost user nebo users, takže uživatel může požádat mount o provedení montáže uvedené v tomto položka zadáním jako argumentu soubor, který má být připojen, nebo připojovací bod, který se má použít (ale ne oba v mém expérienci).

Potřebujete také řádný záznam do umount (což je mírně odlišný problém - viz níže). Možnost user je obvykle lepší než users, protože omezuje oprávnění na umount na uživatele, který připojil systém souborů, zatímco users to umožní všem . Bohužel možnost user nefunguje vždy a může vyžadovat další kroky, které je třeba provést. To je popsáno v Možnost „uživatel“ pracuje pro připojení, nikoli pro umount .

Nejprve přidáte do /etc/fstab Položku jako:

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

a použít /tmp/UFS/drive jako symbolický odkaz (nebo symbolický odkaz) na jakékoli zařízení nebo soubor, který chcete připojit, řekněme soubor obsahující obrázek systému souborů ISO /home/johndoe/john-image-file.iso.

Můžete také definovat /tmp/UFS/mountpoint Jako symbolický odkaz k bodu připojení, který chcete použít, řekněme /mnt/iso.

Pak můžete připojit john-image-file.iso Příkazem:

$ mount /tmp/UFS/drive

To je v mém systému Mageia Linux dostačující, protože použití smyčkových zařízení je nyní implicitní a již nevyžaduje výslovné použití -o loop. Nevím, jak je to dnes všeobecné. Viz Při montáži, kdy mám použít smyčkové zařízení?

Toto připojení se objeví v tabulkách a příkazech:

$ 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

Operace připojení by mohla fungovat pro jakýkoli soubor nebo jednotku a vyžaduje pouze vytvoření symbolického odkazu z /tmp/UFS/drive Na tento soubor nebo na zařízení pro jednotku. Pro symbolický odkaz lze samozřejmě zvolit jiné jméno a umístění, pokud se to nikdy nezmění.

Demontáž souboru se stejným způsobem spoléhá na vhodné použití symbolických odkazů. V případě normálního zařízení, které odpovídá nějaké harwarové jednotce, stačí použít stejné odkazy.

Soubory obsahující obraz souborového systému jsou však připojeny pomocí zvláštního zařízení nazývaného smyčkové zařízení, které se při připojení souboru automaticky přidělí.

Chcete-li soubor odpojit, musíte se podívat na smyčkové zařízení, nikoli na soubor. Proto potřebujete v /etc/fstab Položku, která odpovídá oběma smyčkovým zařízením použitým v /etc/mtab, Zde /dev/loop0 A bodu připojení, zde /mnt/iso.

Takový záznam nemůžete vytvořit předem, protože smyčkové zařízení se může lišit, protože jsou přidělovány dynamicky. Upozorňujeme, že je také možné použít zařízení s pevnou smyčkou, ale je to nevhodné jinými způsoby. Viz http://igurublog.wordpress.com/2011/01/22/how-to-allow-mounting-of-iso-files-by-a-regular-user/ ( tento blog skutečně inspiroval odpověď zde ).

Název smyčkového zařízení však můžete najít zde /dev/loop0 A požádat systém, stejně jako výše, několika různými způsoby. Poté lze provést standardní položku /etc/fstab Tak, aby ukazovala na pravé smyčkové zařízení přes symbolický odkaz /tmp/UFS/drive A na místo připojení, jak bylo provedeno dříve s /tmp/UFS/mountpoint. Tímto způsobem může být soubor demontován pomocí některého z následujících příkazů (za předpokladu, že neexistuje žádná dvojznačnost s /etc/mtab, Což je jiný problém):

$ umount /tmp/UFS/drive
$ umount /dev/loop0
$ umount /mnt/iso
$ umount /tmp/UFS/mountpoint

Vzhledem k tomu, že tyto dva odkazy jsou potřebné pouze při vydávání příkazů, lze je dynamicky měnit. Naše jediná položka /etc/fstab Tedy umožňuje připojit libovolný počet souborů a umíslovat je v libovolném pořadí bez oprávnění root.

Další reference:

2
babou

Balíček libguestfs-tools-c mají příkaz guestmount tak

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

df zobrazí image.iso připojeno

df

do výšky máme:

guestunmount dvd

AKTUALIZACE 2020.03.25:

Archiv balíčku se zdá být skvělým nástrojem

https://pkgs.org/download/archivemount

příklad:

archivemount zentyal-6.0-development-AMD64.iso tmp3/
0
Sérgio