W rzeczywistości bardzo łatwo jest zamontować mniej więcej tyle, ile chcesz jako zwykły użytkownik bez uprawnień roota, pod warunkiem, że utworzono odpowiedni wpis /etc/fstab.
Oczywiście modyfikacje /etc/fstabwymagające uprawnień roota. Ale jednego wpisu można używać z dużą elastycznością do (u) montowania wielu różnych plików w różnych punktach montowania, bez dalszej edycji /etc/fstab.
Oto dwa bardzo krótkie (5 wierszy + komentarze) skrypty Bash, które wykonają zadanie:
do montażu
#!/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.
i do zsiadania
#!/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 :-)
Katalog /tmp/UFS/jest tworzony w celu odizolowania łączy i uniknięcia kolizji. Ale dowiązania symboliczne mogą znajdować się w dowolnym miejscu w przestrzeni użytkownika, o ile pozostają w tym samym miejscu (tej samej ścieżce). /etc/fstabWpis nigdy się nie zmienia albo.
VITAL OSTRZEŻENIE:
Montaż jest ograniczony ze względów bezpieczeństwa. Uelastycznienie może otworzyć drzwi przed złośliwym oprogramowaniem. Nie jestem ekspertem od bezpieczeństwa i zaleciłbym, aby otwierać drzwi nie więcej niż absolutnie wymagane ... używając opcji, aby ograniczyć możliwości, jakie można wykonać w systemach plików, które można w ten sposób zamontować. Jeśli kompetentny współpracownik mógłby komentować dalej kwestie bezpieczeństwa, może to być przydatne.
Dostępne są różne opcje ograniczające użycie zamontowanych systemów plików, takie jak noexeczapobiegające wykonywaniu plików binarnych lub nosuidprzyczyniające się do bezpieczeństwa. W rzeczywistości te opcje są dodawane jako opcje domyślne, gdy są one używane userlub userssą używane, co koniecznie ma miejsce w przypadku tego, co robimy poniżej. Pomyśl dwa razy, zanim zastąpisz te wartości domyślne. http://en.wikipedia.org/wiki/Fstab
W celu dalszej ochrony można dodać inne opcje. Na przykład opcja owner we /etc/fstab wpisie pozwoli użytkownikom zajmować się tylko plikami lub urządzeniami, których są właścicielami. Zobacz man mount listę opcji: http://linux.die.net/man/8/mount .
Użycie tego /etc/fstabwpisu może być również ograniczone przez własność grupy .group użytkownika katalogu (lub katalogów) zawierających dowiązania symboliczne.
Wyjaśnienie
To wyjaśnienie zostało napisane, zanim zdałem sobie sprawę, że mogę uprościć dwa powyższe skrypty. Nie pomyślałem o nich od razu, częściowo dlatego, że mam pod ręką nieco bardziej złożony problem, którego nie rozwiążą bez dodatkowej maszyny. Dlatego moje wyjaśnienie może być nieco bardziej skomplikowane niż powinno, ale nie mam odwagi, aby przepisać wszystko od nowa.
Podstawową ideą jest utworzenie wpisów, /etc/fstabktóre zawierają opcję userlub usersaby użytkownik mógł poprosić mounto wykonanie montażu określonego w tym wpisie, podając jako argument plik do zamontowania lub punkt podłączenia do użycia (ale nie jedno i drugie z mojego doświadczenia) .
Potrzebujesz również odpowiedniego wpisu umount(co jest nieco innym problemem - patrz poniżej). Ta opcja userjest zwykle lepsza niż, usersponieważ ogranicza uprawnienia do umountużytkownika, który zamontował system plików, a userspozwoli na to wszystkim. Niestety opcja usernie zawsze działa i może wymagać kilku innych kroków, które należy podjąć. Jest to omówione w Opcji „user” praca dla montowania, a nie dla umount .
Najpierw dodajesz do /etc/fstabwpisu, takiego jak:
/tmp/UFS/drive /tmp/UFS/mountpoint auto users,noauto, 0 0
i użyj /tmp/UFS/drivejako dowiązania symbolicznego (lub dowiązania symbolicznego) do dowolnego urządzenia lub pliku, który chcesz zamontować, powiedzmy plik zawierający obraz systemu plików ISO /home/johndoe/john-image-file.iso.
Na przykład definiujesz /tmp/UFS/mountpointjako dowiązanie symboliczne do punktu montowania, którego chcesz użyć /mnt/iso.
Następnie możesz zamontować john-image-file.isoza pomocą polecenia:
$ mount /tmp/UFS/drive
Jest to wystarczające w moim systemie Mageia Linux, ponieważ korzystanie z urządzeń pętlowych zostało teraz dorozumiane i nie wymaga już -o loopjawnego używania . Nie wiem, jak to jest dzisiaj ogólne. Zobacz
Kiedy należy montować, kiedy powinienem używać urządzenia z pętlą?
To mocowanie pojawia się w tabelach i poleceniach:
$ 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
Operacja montowania może działać dla dowolnego pliku lub dysku i wymaga jedynie utworzenia dowiązania symbolicznego /tmp/UFS/drivedo tego pliku lub urządzenia dla dysku. Oczywiście dla dowiązania symbolicznego można wybrać inną nazwę i lokalizację, o ile nigdy się nie zmieni.
Demontaż pliku zależy w ten sam sposób od właściwego użycia dowiązań symbolicznych. W przypadku normalnego urządzenia odpowiadającego niektórym napędom harware wystarczy użyć tych samych łączy.
Jednak pliki zawierające obraz systemu plików są montowane za pomocą specjalnego rodzaju urządzenia zwanego urządzeniem pętli, przydzielanego automatycznie podczas montowania pliku.
Aby zdemontować plik, musisz odwołać się do urządzenia pętli, a nie do pliku. Dlatego potrzebujesz /etc/fstabwpisu, który pasuje zarówno do urządzenia pętli używanego /etc/mtabtutaj /dev/loop0, jak i do punktu montowania tutaj
/mnt/iso.
Nie można wcześniej utworzyć takiego wpisu, ponieważ urządzenie pętli może się różnić, ponieważ są one przydzielane dynamicznie. Należy pamiętać, że można również użyć urządzenia o stałej pętli, ale jest to niewygodne na inne sposoby. Zobacz
http://igurublog.wordpress.com/2011/01/22/how-to-allow-mounting-of-iso-files-by-a-regular-user/ ( ten blog faktycznie zainspirował odpowiedź tutaj ).
Możesz jednak tutaj znaleźć nazwę urządzenia pętli, /dev/loop0pytając system, tak jak to zrobiliśmy powyżej na kilka różnych sposobów. Następnie /etc/fstabmożna wprowadzić nasz standardowy wpis, aby wskazywał na prawą pętlę za pomocą dowiązania symbolicznego /tmp/UFS/drivei na punkt montowania, jak to wcześniej zrobiono /tmp/UFS/mountpoint. W tym celu plik można odinstalować za pomocą dowolnego z następujących poleceń (pod warunkiem, że nie ma dwuznaczności /etc/mtab, co stanowi inny problem):
$ umount /tmp/UFS/drive
$ umount /dev/loop0
$ umount /mnt/iso
$ umount /tmp/UFS/mountpoint
Ponieważ dwa dowiązania symboliczne są potrzebne tylko po wydaniu poleceń, można je zmieniać dynamicznie. Dlatego nasz pojedynczy /etc/fstabwpis pozwala na zamontowanie dowolnej liczby plików i podłączenie ich w dowolnej kolejności, bez uprawnień roota.
Inne referencje:
mountplik binarny nie wymaga uprawnień SUID, powinieneś być w stanie używać fakeroot bez problemów.