파일에서 가상 드라이브를 설정하려고 합니다. 그러면 파일이 플래시 장치에 기록됩니다(관련 없음). 가상 드라이브를 생성하고 조작하는 것은 스크립트 내에서 이루어지기 때문에 루트가 아닌 사용자 공간에서 이 작업을 수행해야 합니다. 이 스크립트는 플래시 장치를 구축하고 이미지화하는 데 사용됩니다. 따라서 루트로 실행하면 문제가 발생합니다.
이 파일을 가상 드라이브로 마운트하기 위해 /etc/fstab에 다음 줄을 추가했습니다.
/home/user/drive.img /home/user/mnt ext4 loop,rw,user,noauto,noexec 0 0
문제는 가상 드라이브를 마운트할 때 루트가 ~/mnt의 소유권을 가져가므로 일반 사용자로 마운트하려는 목적이 무산된다는 것입니다.
다른 파일 시스템에서는 uid/gid를 지정할 때 마운트할 수 있다는 것을 알고 있지만 기존 프로세스와 호환되려면 가상 드라이브가 ext4여야 합니다. udisksctl을 시도했지만 루프백하려면 루트 인증이 필요합니다.
마운트한 다음 소유권을 변경하려고 시도하지만(루트로) 마운트 해제하지는 않습니다. "동기화"를 수행한 다음 가상 드라이브의 스냅샷을 찍겠습니다. 깨끗하지 않아서 마음에 들지 않지만 지금은 괜찮을 것 같습니다.
답변1
언급하지 않은 단계는 문제의 원인인 ext4 파일 시스템을 만드는 방법입니다. 을 사용하면 mkfs.ext4 /home/user/drive.img
루트가 소유한 루트 inode가 생성되므로 이를 마운트해도 여전히 루트에 속합니다.
해결책은 해당 사용자를 실제 사용자 또는 일부 명시적인 숫자 사용자 및 그룹 ID -E root_owner
에 속하도록 하는 옵션을 추가하는 것입니다 . (또 다른 해결책은 (Fedora의 패키지 )를 사용하여 inode를 편집하는 것입니다.) 이 예는 저에게 효과적이었습니다.mkfs.ext4
-E root_owner=$uid:$gid
debugfs
e2fsprogs
uid=$(id -u)
gid=$(id -g)
rm -f /tmp/ext4fs
truncate -s 50M /tmp/ext4fs
if true
then mkfs.ext4 -E root_owner=$uid:$gid /tmp/ext4fs
else mkfs.ext4 /tmp/ext4fs
debugfs -w -R "set_inode_field . uid $uid" /tmp/ext4fs
debugfs -w -R "set_inode_field . gid $gid" /tmp/ext4fs
fi
# echo '/tmp/ext4fs /tmp/mymnt ext4 loop,rw,user,noauto,noexec' >>/etc/fstab
mkdir -p /tmp/mymnt
mount /tmp/ext4fs
ls -lRa /tmp/mymnt
touch /tmp/mymnt/afile
ls -l /tmp/mymnt
umount /tmp/ext4fs
설치 시 ls
마운트 지점을 다음과 같이 표시합니다.
drwxr-xr-x 3 meuh users 1024 May 15 21:04 .
거기에 파일을 만들 수 있습니다.