Kök izni olmadan bir görüntü dosyası nasıl kurulur?


41

Kök izni olmadan bir dosya sistemi görüntüsü ekleyebilir miyim? Normalde yapardım:

mount -o loop DISK_IMAGE FOLDER

Sudo kullanmadan veya intiharı açmadan mount, bunu yapmanın uygun bir yolu var mı?

fusermountBazı ISO görüntüleri ile kullanabileceğimi biliyorum , ancak bu oldukça sınırlı, ISO görüntüleri için bile, bazı görüntülerim eklenemiyor, ancak mounther zaman çalışıyor.


1
Senin Eğer mountikili SUID izin gerektirmiyor ardından kullanmak mümkün olmalıdır fakeroot sorunsuz.
sakisk

5
@faif fakerootburada yardım etmeyecek: dosya sahipliğinin farklı olduğunu iddia ediyor, mount(2)ancak size kök olmadığınızda aramak gibi, sahip olmadığınız izinleri veremez .
Gilles 'SO- kötü olmaktan vazgeç'

@faif Mount kesinlikle kök izinleri gerektirir. Aksi takdirde olası sonuçlar oldukça feci olurdu.
Shadur

Yanıtlar:


25

Yöneticinin bir şekilde size bağlama izni vermemiş olduğu hiçbir şeyi monte edemezsiniz. mountSistem çağrısını sadece root çağırır. Bunun nedeni, bir şeyi bir sistem konumuna monte etmek, dosyaların başka bir kullanıcıya ait görünmesini sağlamak ve dosya sahipliğine dayanan bir programdan yararlanmak, dosya dosyaları oluşturmak veya hataları kullanmak gibi ayrıcalıkları yükseltmek için birçok yol bulunmasıdır. dosya sistemi sürücülerinde.

mountKomut root olduğunu. Ancak bu, yalnızca belirtilen şeyleri monte etmenize izin verir fstab.

fusermountKomut root olduğunu. Yalnızca bir FUSE sürücüsü aracılığıyla bir şeyler bağlamanıza izin verir ve dosyalarınızı keyfi bir şekilde sahip olma veya izin vermeyi sağlama yeteneklerinizi kısıtlar (çoğu kurulumda, bir FUSE montajındaki tüm dosyalar size aittir).

En iyi şansınız, disk görüntünüzü okuyabilen bir FUSE dosya sistemi bulmak . ISO 9660 görüntüler için, hem deneyin fuseiso ve UMfuse ISO 9660 desteği (aynı Debian altında bulunan fuseiso9660pakette ).


sudo(SUID biti ayarlanmış olmasına rağmen) yalnızca birinin fstabgirişleri yerleştirmesine izin verdiğini açıklamak için +1 . Bundan, (a) SUID bitinin, normal bir kullanıcının fstabgirdileri bağlayabildiği için (ve sistemi mountçağırmasına izin verilir ) ve (b) girişimlerin mountyalnızca fstabolmayanlar tarafından monte edilmesine izin vermesinin kısıtlanması olduğu anlaşılır. kök kullanıcılar.
David,

Disket görüntüleri ile çalışıyorsanız, yalnızca görüntüye veri yazmak için mtools da kullanabilirsiniz. Bakınız: stackoverflow.com/questions/11202706/…
Giles Bathgate

@David, bu şimdi değişti mi? fstabİçimdeki tek girişler rootfs ve boot içindir. USB sürücülerini monte etmek için bakıyorum lsblkve mountbuna göre. Bunu yaparken sorun yaşamadım.
sherrellbc

16

Debian Wiki Bunu yapmanın çeşitli yolları gösterir. İşte bir yol. (Bu udisks2paket gerektirir .)

İlk

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

/dev/loop0 aşağıdakiler için kullanılacaktır.

Fakat eğer udisksctl loop-setupkomut geri dönseydi /dev/loop1, /dev/loop1aşağıdakiler için kullanılmış olurdu.

Geridönüş aygıtı (önceden oluşturulmuş) otomatik olarak monte edilmemişse çalıştırmanız gerekebilir:

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

Diskteki dosyalara bakabilirsiniz

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

İşiniz bittiğinde sökebilirsiniz

$ udisksctl unmount -b /dev/loop0
Unmounted /dev/loop0.

ve gerekirse:

$ udisksctl loop-delete -b /dev/loop0

1
udevil daha uygun bir seçimdi
Anwar

Ubuntu 16.04 üzerinde çalıştı, ama nasıl? Sadece olmasını beklediğim loop cihazları kullanıyor gibi görünüyor sudo. setsid veya ilgili shenanigan ?
Ciro Santilli,

1
@CiroSantilli 新疆 改造 中心 六四 事件 法轮功 Emin değilim. Aracın kaynak kodu burada . Bir daemon ile konuşmak için DBus kullanıyor gibi görünüyor, ancak DBus veya Glib'i o kadar iyi tanımıyorum.
Nick ODell

1
Not olduğu -riçin opsiyon udisksctl loop-setuparaçlarının salt okunur, OP yazılabilir monte almak böylece bırakın için sormadım ki.
Pelle Nilsson

15

Çeşitli disk görüntüleri bağlamak için FUSE modülü guestmount'u kullanabilirsiniz. Konuk ekosisteminin bir parçası ve kök izinleri gerektirmez.

Bir göz atın adam sayfası daha detaylı bilgi için.

Örnekler

1. İlk dosyada ana dosya sistemine sahip tipik bir Windows konuk için:

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

2. İlk bölümde / boot dosya sistemine sahip tipik bir Linux konuk ve mantıksal birimde kök dosya sistemi için:

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

1
Can sıkıcı bir şekilde, Ubuntu'da guestmount çalıştırmak artık çekirdeği okumak için biraz root erişimi gerektiriyor: bugs.launchpad.net/ubuntu/+source/linux/+bug/759725
Clément

@ Clément Libguestfs’in işinin çekirdeği görüntüsüne neden ihtiyaç duyduğunu anlamak istiyorum ...
Ciro Santilli 事件 改造 中心 法轮功 六四 事件 10:18

1
@CiroSantilli lib 改造 六四 事件 法轮功 starting çünkü libguestfs, qemu sanal makinesinde minimal bir Linux sistemi kurarak root ihtiyacını ortadan kaldırıyor (herkes root olmadan bir qemu sanal makinesini başlatabilir). O makineyi önyüklemek için biraz çekirdeğe ve initrd'ye ihtiyacı var.
josch

3

Mümkün /etc/fstabolan, ISO için 'user' parametresiyle bir giriş eklemek , örneğin

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

Ancak bu dosyayı düzenlemek için genellikle yine de root erişimine ihtiyacınız vardır, bu yüzden çok yardımcı olmuyor.


2

Doğru giriş oluşturuldukça, kök ayrıcalıklara sahip olmayan normal bir kullanıcı olarak ne istersen ya da daha az monte etmek aslında çok kolaydır /etc/fstab.

Tabii ki, /etc/fstabkök ayrıcalıklarını gerektiren değişiklikler . Ancak, tek bir giriş daha fazla düzenleme yapmadan (u) birçok farklı dosyayı farklı bağlama noktalarına monte etmek için çok esnek bir şekilde kullanılabilir /etc/fstab.

İşte iki çok kısa (5 satır + yorum) İşi yapacak Bash komut dosyaları:

montaj için

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

ve sökmek için

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

Dizin /tmp/UFS/, bağlantıları yalıtmak ve çakışmaları önlemek için oluşturulur. Ancak sembolik bağlantılar, aynı yerde kaldıkları sürece (aynı yol), kullanıcı alanında herhangi bir yerde olabilirler. /etc/fstabGiriş ya hiç değişmez.

VİTAL UYARI: İyi güvenlik nedenleriyle montaj sınırlandırılmıştır. Daha esnek hale getirmek, kötü amaçlı yazılımlar için kapılar açabilir. Ben bir güvenlik uzmanı değilim ve bu yüzden monte edilebilecek dosya sistemleri ile yapılabilecekleri kısıtlamak için seçenekleri kullanarak, kesinlikle gerekmeyenlerden fazlasını açmanızı öneririm. Bilgili bir katılımcı güvenlik konularında daha fazla yorum yapabilirse, faydalı olabilir.

Takılan dosya sistemlerinin kullanımını kısıtlamak için, örneğin noexecikili dosyaların yürütülmesini önleyen veya nosuiddolayısıyla güvenliğe katkıda bulunan çeşitli seçenekler mevcuttur . Aslında, bu seçenekler, seçenekler kullanıldığında userveya userskullanıldığında varsayılan seçenekler olarak eklenir, bu mutlaka aşağıda yaptığımız işte geçerlidir. Bu varsayılanları geçersiz kılmadan önce iki kez düşünün. http://en.wikipedia.org/wiki/Fstab

Daha fazla koruma için başka seçenekler de eklenebilir. Örneğin owner , /etc/fstab girişteki seçenek , kullanıcıların yalnızca sahip oldukları dosya veya aygıtlarla uğraşmasına izin verir. man mount Seçeneklerin bir listesini görmek için bkz : http://linux.die.net/man/8/mount .

Bu /etc/fstabgirişin kullanımı , sembolik bağlantıları içeren dizinin (veya dizinlerin) user.group sahipliği ile de sınırlandırılabilir.

açıklama

Bu açıklama, yukarıdaki iki senaryoda işleri basitleştirebileceğimi fark etmeden önce yazılmıştı. Onları hemen düşünmedim, çünkü elimde biraz fazla makine olmadan çözemedikleri biraz daha karmaşık bir sorun var. Bu yüzden açıklamam olması gerekenden biraz daha karmaşık olabilir, ama hepsini sıfırdan yeniden yazma cesaretine sahip değilim.

Temel fikir, /etc/fstabseçeneği içeren girişler oluşturmaktır userya usersda bir kullanıcı, mounteklenecek dosyayı veya kullanılacak montaj noktasını argüman olarak vererek bu girişte belirtilen montajı yapmak isteyebilir (ancak ikisinde de değil) .

Ayrıca umount(biraz farklı bir sorundur - aşağıya bakınız) için uygun bir giriş yapmanız gerekir . Bu seçenek usergenellikle dosya sistemini kuran kullanıcının usersiznini kısıtladığından daha iyidir . Ne yazık ki seçenek her zaman işe yaramaz ve çalışmak için atılması gereken başka adımlar da içerebilir. Bu seçenek "user" seçeneğinde tartışılır, mount için çalışır, umount için değil .umountusersuser

İlk önce aşağıdaki /etc/fstabgibi bir girişe ekleyin :

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

ve /tmp/UFS/drivemonte etmek istediğiniz cihaz veya dosyaya sembolik bir bağlantı (veya sembolik bağlantı) olarak kullanın, bir ISO dosya sisteminin görüntüsünü içeren bir dosya söyleyin /home/johndoe/john-image-file.iso.

Ayrıca /tmp/UFS/mountpointkullanmak istediğiniz bağlama noktasına bir bağlantı olarak da tanımlayabilirsiniz /mnt/iso.

Daha sonra john-image-file.isoaşağıdaki komutu kullanabilirsiniz:

$ mount /tmp/UFS/drive

Bu, Mageia Linux'um için yeterli, çünkü döngü cihazlarının kullanımı artık örtük hale getirildi ve artık -o loopaçıkça kullanılmasını gerektirmiyor . Bugünün ne kadar genel olduğunu bilmiyorum. Bkz . Monte ederken, ne zaman bir döngü cihazı kullanmalıyım?

Bu montaj tablo ve komutlarda görünür:

$ 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

Montaj işlemi herhangi bir dosya veya sürücü için işe yarayabilir ve yalnızca /tmp/UFS/driveo dosyaya veya sürücü için aygıta sembolik bir bağlantı yapılmasını gerektirir . Elbette, sembolik bağlantı için, hiç değişmediği sürece, başka bir ad ve konum seçilebilir.

Dosyanın sökülmesi, aynı şekilde sembolik bağların uygun kullanımına dayanır. Bazı sabit disk sürücüsüne karşılık gelen normal bir aygıt durumunda, yalnızca aynı bağlantıları kullanın.

Bununla birlikte, bir dosya sisteminin görüntüsünü içeren dosyalar, dosyayı bağladığınızda otomatik olarak atanan, döngü cihazı adı verilen özel bir tür cihaz aracılığıyla monte edilir.

Dosyayı kaldırmak için, dosyaya değil döngü aygıtına başvurmanız gerekir. Bu nedenle , burada /etc/fstabkullanılan döngü aygıtıyla ve /etc/mtabburada /dev/loop0bağlantı noktasıyla eşleşen bir girdiye ihtiyacınız var /mnt/iso.

Bu tür bir girişi önceden oluşturamazsınız, çünkü döngü cihazı dinamik olarak tahsis edildiğinden değişkendir. Sabit bir döngü cihazı kullanmanın da mümkün olduğunu, ancak başka şekillerde uygunsuz olduğunu unutmayın. Bkz http://igurublog.wordpress.com/2011/01/22/how-to-allow-mounting-of-iso-files-by-a-regular-user/ ( bu blog aslında burada cevap ilham ).

Ancak, döngü aygıtının adını burada /dev/loop0, sisteme sorarak, yukarıda birkaç farklı şekilde yaptığımız gibi bulabilirsiniz. Ardından standart /etc/fstabgirişimiz sembolik bağlantı üzerinden sağ döngü cihazına /tmp/UFS/driveve daha önce yapıldığı gibi bağlantı noktasına yönlendirilebilir /tmp/UFS/mountpoint. Bu yapılırsa, dosya aşağıdaki komutlardan herhangi biriyle çıkarılabilir ( /etc/mtabfarklı bir sorun olmadığı için belirsizlik olmaması kaydıyla ):

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

İki sembolik komutlar yalnızca komutlar verildiğinde gerekli olduğundan, dinamik olarak değiştirilebilirler. Böylece, tek /etc/fstabgirişimiz herhangi bir sayıda dosyayı birleştirme ve kök ayrıcalıklarına gerek kalmadan herhangi bir sırayla dosyalamaya izin verir.

Diğer referanslar:


Fstab girişleri sembolik bağları işaret ettiğinde, sadece sembolik bağlantılar oluşturarak, köksüz bir şey kurmak için kullanılamazlar mı? Dolaylı olarak, mounther normal kullanıcı için sadece yükseltici bir komut değil midir? Ve bununla ilişkili güvenlik sorunları? Yanlışsam düzelt.
Bharat G,

Ve GNU / Linux dağıtımlarının son sürümleri (debian jessie) fstab'ta geçersiz bir giriş tespit ettiğinde gui giriş yapmaz. Eğer deviceya da mountpointfstab bölümü geçerli bir girişi göstermiyorsa , konsol giriş oturumuna geri döner . Kullanıcının konsol oturumu ile giriş startxyapması ve açıkça bir ekran yöneticisi başlatmak için girmesi gerekir.
Bharat G,

0

Libguestfs-tools-c paketinde guestmount komutu var

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

df image.iso mount gösterecektir

df

biz var miktar:

guestunmount dvd
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.