올바른 항목이에서 생성 된 경우 루트 권한이없는 일반 사용자로 원하는대로 마운트하는 것이 매우 쉽습니다 /etc/fstab
.
물론 /etc/fstab
루트 권한 이 필요하도록 수정했습니다 . 그러나 단일 항목을 사용하면 더 이상의 편집없이 다른 마운트 지점에 여러 파일을 마운트 할 수있는 유연성이 /etc/fstab
있습니다.
다음은 작업을 수행 할 매우 짧은 (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
보안에 기여하는 등 마운트 된 파일 시스템의 사용을 제한하기 위해 다양한 옵션을 사용할 수 있습니다 . 실제로 이러한 옵션은 옵션 user
또는 사용시 기본 옵션으로 추가되며 users
, 반드시 아래에서 수행해야합니다. 이 기본값을 무시하기 전에 두 번 생각하십시오. http://en.wikipedia.org/wiki/Fstab
추가 보호를 위해 다른 옵션을 추가 할 수 있습니다. 예를 들어, 항목 의 옵션 owner
을 /etc/fstab
통해 사용자는 자신이 소유 한 파일 또는 장치 만 처리 할 수 있습니다. 참조 man mount
: 옵션 목록 http://linux.die.net/man/8/mount .
이 /etc/fstab
항목 의 사용은 심볼릭 링크가 포함 된 디렉토리의 user.group 소유권을 통해 제한 될 수도 있습니다.
설명
이 설명은 위의 두 스크립트로 단순화 할 수 있다는 것을 깨닫기 전에 작성되었습니다. 나는 그들이 여분의 기계없이 해결할 수없는 약간 더 복잡한 문제를 가지고 있기 때문에 그것들을 즉시 생각하지 않았습니다. 따라서 내 설명은 생각보다 조금 더 복잡 할 수 있지만 처음부터 다시 작성해야 할 용기는 없습니다.
기본 아이디어는 /etc/fstab
옵션이 포함 된 항목을 작성 user
하거나 users
사용자 mount
가 마운트 할 파일이나 사용할 마운트 포인트를 인수로 지정하여 해당 항목에 지정된 마운트를 수행 하도록 요청할 수 있습니다 (그러나 두 가지 모두는 아닙니다) .
또한 적절한 항목이 필요합니다 umount
(약간의 다른 문제입니다-아래 참조). 이 옵션 user
은 일반적으로 파일 시스템을 마운트 한 사용자에 users
대한 권한을 제한 하는 것이 아니라 모든 것을 허용 하므로 옵션 보다 낫습니다 . 불행히도이 옵션 이 항상 작동하는 것은 아니며 작동하기 위해 수행해야 할 다른 단계가 필요할 수 있습니다. 이것은 umount가 아니라 mount에 대한 "user"옵션 작업 에서 설명 합니다.umount
users
user
먼저 다음 /etc/fstab
과 같은 항목에 추가하십시오 .
/tmp/UFS/drive /tmp/UFS/mountpoint auto users,noauto, 0 0
사용 /tmp/UFS/drive
어떤 장치 또는 마운트하고자하는 파일에 대한 심볼릭 링크 (또는 심볼릭 링크) 등은 ISO 파일 시스템의 이미지를 포함하는 파일을 말한다 /home/johndoe/john-image-file.iso
.
또한 사용 /tmp/UFS/mountpoint
하려는 마운트 지점에 대한 심볼릭 링크를 정의 하십시오 (예 :) /mnt/iso
.
그런 다음 다음 john-image-file.iso
명령으로 마운트 할 수 있습니다 .
$ mount /tmp/UFS/drive
루프 장치 사용이 이제 암시 적으로 만들어 졌으므로 더 이상 -o loop
명시 적으로 사용할 필요가 없기 때문에 Mageia Linux에서 충분합니다 . 나는 그것이 오늘날 얼마나 일반적인지 모른다. 장착시 루프 장치를 언제 사용해야합니까?를 참조하십시오
.
이 장착은 테이블과 명령에 나타납니다.
$ 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
여기 /dev/loop0
에 마운트 포인트가 모두 일치하는 항목 이 필요 합니다
/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
두 개의 심볼릭 링크는 명령이 실행될 때만 필요하므로 동적으로 변경할 수 있습니다. 따라서 단일 /etc/fstab
항목으로 루트 권한없이 파일을 원하는 수만큼 마운트하고 순서에 상관없이 마운트 해제 할 수 있습니다.
다른 참고 문헌 :
mount
바이너리 SUID 권한이 필요하지 않습니다 당신은 사용할 수 있어야 fakeroot 사용을 문제없이.