컴퓨터 간에 이동할 가능성이 가장 높은 외부 USB 3 디스크 드라이브(2TB 용량)가 있습니다. 디스크에는 GUID 파티션 테이블과 ext4 파티션이 있습니다. 프로세스를 승격하지 않으면 디스크에 쓸 수 없습니다( sudo
).
현재로서는 다음 방법 중 하나 또는 둘 다를 시도해 볼 생각이며 각 방법의 단점이 궁금합니다.
chmod 777 /mnt/externalDrive
chown nobody:nogroup /mnt/externalDrive
777 권한을 부여하고 user1(UID:1005)이 여기에 쓴 다음 user7의 UID:1005를 사용하는 다른 컴퓨터로 디스크를 이동하면 어떻게 되나요? user7이 이 컴퓨터에 있는 파일의 소유자가 됩니까? chown -R nobody:nogroup /mnt/externalDrive
주기적으로 디스크를 실행 해야 할 것 같습니다 .
분명히 나쁜 습관이라고 생각하는 것이 있습니까? 디스크에는 비디오, 음악, 사진이 포함되어 있을 가능성이 크며 이들 중 일부는 금융 데이터처럼 보호할 필요가 없습니다.
답변1
이는 특히 다중 사용자 시스템이 있는 경우 다중 사용자 시스템의 문제입니다. ;) 아니요진짜원하는 것을 할 수 있는 좋은 방법입니다. 제가 생각한 방법은
- 외장 드라이브를 사용하는 모든 컴퓨터에서 계정에 대해 동일한 UID를 설정합니다. (모든 컴퓨터를 제어할 수는 없기 때문에 실용적이지 않습니다.)
- 소유자/그룹 연결을 모르는 파일 시스템을 사용하세요(FAT나 NTFS가 생각났는데...아, 안 돼요)
가장 효과적인 접근 방식은 일반적인 관행으로 돌아가는 것입니다. 대부분의 (적어도) Linux 시스템에는 다음 기능을 가진 그룹이 있습니다.대개일반 GID. 예를 들어 대부분의 Linux 배포판에는 GID가 있습니다 users
. 100
그룹에 개별 사용자 계정이 있는 경우 다음을 수행할 수 있습니다.
- 드라이브의 모든 파일과 디렉터리를 이 그룹이 소유하도록 만듭니다.
- 어떻게 든 이러한 파일 및 디렉토리에 대한 적절한 그룹 권한을 관리했습니다.
- 어떻게 든 적절한 그룹 소유권을 사용하여 개별적으로 새 파일을 만들었습니다. 권한.
첫 번째와 두 번째 사항은 구현하기 쉽습니다( chown
, chmod
). 세 번째 요점은 조금 까다롭습니다.
"그룹 소유권" 부분은 상대적으로 간단합니다. 드라이브의 모든 디렉터리에 SGID 비트를 설정합니다. 디렉토리에 적용된 SGID 비트는 커널이 BSDish 방식으로 작동하도록 지시합니다. BSD는 파일/디렉토리를 생성한 프로세스의 기본 그룹이 아닌 특정 디렉토리 그룹에 생성된 각 파일/디렉터리를 만듭니다(Linux에서와 같이). 그러나 상위 디렉토리의 소유자가 합니다.
권한 부분이 조금 어렵습니다. 새로 생성된 파일/디렉터리의 권한은 (다른 무엇보다도) 영향을 받습니다. umask
이는 어떤 비트를 알려주는 비트마스크입니다.아니요명시적으로 지정하지 않은 경우 로 설정됩니다. umask
예를 들어, 공통 값은 입니다 022
. 이는 "그룹" 및 "기타"에 대한 쓰기 비트가 일반적으로 설정되지 않아야 함을 의미합니다. 그룹의 쓰기 권한을 지우고 싶지 않음을 나타내기 위해 이를 umask
로 변경할 수 있지만 단점은 이 값을 디렉터리 기반으로 설정할 수 없으며 일반적으로 기본 그룹의 쓰기 권한을 설정하고 싶지 않다는 것입니다. 002
당신이 만드는 모든 파일에 대한 권한.
이는 ACL을 사용하여 해결할 수 있습니다. ACL에서는 이 ACL 세트를 사용하여 디렉토리 내에 생성된 모든 파일 및 디렉토리에 적용되는 권한 mask
세트를 설정할 수 있습니다. default
따라서 문제에 대한 가능한 해결책 중 하나는
- 외장 드라이브를 사용하려는 모든 시스템에서 유니버설 그룹의 구성원인지 확인하세요.
- 드라이브의 모든 파일과 디렉터리를 이 그룹이 소유하도록 만들고 모든 디렉터리에 SGID 비트를 설정합니다.
- 마스크와 기본 권한을 포함하도록 모든 디렉터리의 ACL을 변경하고, 커널에 각각의 새 파일/디렉터리를 생성하도록 지시하고, 그룹에 대한 쓰기 권한을 설정합니다.
자세한 내용은 setfacl(1)
및 를 참조하세요 .acl(5)
답변2
가지다또 다른 비슷한 질문그리고 바인드프(bindfs)를 사용하는 것이 좋습니다:
mkdir /home/$user/sda1
bindfs -u $user -g $group /mnt/sda1 /home/$user/sda1
OSX 사용자에게 권장되는 noowners
설치 옵션은 다음과 같습니다.
전체 볼륨에 대한 소유권 필드를 무시합니다. 이로 인해 모든 개체가 사용자 ID 99 및 그룹 ID 99의 소유로 표시됩니다. 사용자 ID 99는 현재 유효 사용자 ID로 해석되는 반면, 그룹 ID 99는 직접 사용되어 "알 수 없음"으로 변환됩니다.
답변3
파일의 소유자와 그룹은 디지털 방식으로 저장됩니다. 따라서 파일이 연결된 시스템의 사용자(또는 사용자가 전혀 없음)에 관계없이 uid=1005가 파일을 소유하게 됩니다.
사용자/그룹을 없음으로 변경해도 문제가 해결되지 않습니다. 그러면 아무도 없음 사용자(또는 아무도 그룹의 구성원)만 이 파일에 액세스할 수 있습니다.
불행하게도 ext4에 대한 권한 확인을 비활성화하는 방법은 없다고 생각합니다. 예를 들어ext3 또는 ext4 파일 시스템에서 파일 권한을 비활성화할 수 있습니까?
답변4
안드레아스 비제모든 호스트에 공통 그룹 ID가 있다고 가정하면 setgid
비트와 ACL을 사용하여 문제를 해결할 수 있습니다.
나는 질문한다Linux 배포판에 미리 정의된 그룹 ID가 있습니까?
직접 조사한 결과 Debian, Ubuntu, RedHat, Fedora, CentOS, Suse, FreeBSD, OpenBSD, NetBSD, MacOSX, sys
Solaris의 그룹 공유 ID 등 관련된 모든 배포판에 이러한 그룹이 존재한다는 사실을 발견했습니다.3
이것으로:
$ sudo chgrp -R sys /mnt/data/dir
$ sudo chmod -R g+s /mnt/data/dir
$ sudo setfacl -R -m g:sys:rwx /mnt/data/dir
$ sudo setfacl -R -d -m g:sys:rwx /mnt/data/dir
그리고 이 맛은 이렇습니다.
$ sudo adduser user sys
당신은 user
그것에 어떤 파일을 읽고 쓸 수 있습니다 /dir
.
대부분의 작업이 setgid
도움이 될 수 있지만 불행히도 일반적으로 제어할 수는 없습니다 umask
. 따라서 ACL을 사용하여 완전한 솔루션을 제공하십시오.
또한보십시오:
- https://askubuntu.com/questions/12009/solving-permission-problems-when-using-external-ext4-hard-disk-with-multiple-lin/
- https://askubuntu.com/questions/252361/how-could-i-mount-an-ext4-partition-and-have-write-permission/
- https://serverfault.com/questions/306344/sharing-an-ext3-ext4-partition-on-external-drive/