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/fstab
wymagają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/fstab
Wpis 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 noexec
zapobiegające wykonywaniu plików binarnych lub nosuid
przyczyniające się do bezpieczeństwa. W rzeczywistości te opcje są dodawane jako opcje domyślne, gdy są one używane user
lub users
są 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/fstab
wpisu 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/fstab
które zawierają opcję user
lub users
aby użytkownik mógł poprosić mount
o 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 user
jest zwykle lepsza niż, users
ponieważ ogranicza uprawnienia do umount
użytkownika, który zamontował system plików, a users
pozwoli na to wszystkim. Niestety opcja user
nie 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/fstab
wpisu, takiego jak:
/tmp/UFS/drive /tmp/UFS/mountpoint auto users,noauto, 0 0
i użyj /tmp/UFS/drive
jako 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/mountpoint
jako dowiązanie symboliczne do punktu montowania, którego chcesz użyć /mnt/iso
.
Następnie możesz zamontować john-image-file.iso
za 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 loop
jawnego 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/drive
do 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/fstab
wpisu, który pasuje zarówno do urządzenia pętli używanego /etc/mtab
tutaj /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/loop0
pytając system, tak jak to zrobiliśmy powyżej na kilka różnych sposobów. Następnie /etc/fstab
można wprowadzić nasz standardowy wpis, aby wskazywał na prawą pętlę za pomocą dowiązania symbolicznego /tmp/UFS/drive
i 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/fstab
wpis pozwala na zamontowanie dowolnej liczby plików i podłączenie ich w dowolnej kolejności, bez uprawnień roota.
Inne referencje:
mount
plik binarny nie wymaga uprawnień SUID, powinieneś być w stanie używać fakeroot bez problemów.