ext4 외장 하드 드라이브에 대한 사용자 권한을 컴퓨터 간에 포팅할 수 있나요?

ext4 외장 하드 드라이브에 대한 사용자 권한을 컴퓨터 간에 포팅할 수 있나요?

컴퓨터 간에 이동할 가능성이 가장 높은 외부 USB 3 디스크 드라이브(2TB 용량)가 있습니다. 디스크에는 GUID 파티션 테이블과 ext4 파티션이 있습니다. 프로세스를 승격하지 않으면 디스크에 쓸 수 없습니다( sudo).

현재로서는 다음 방법 중 하나 또는 둘 다를 시도해 볼 생각이며 각 방법의 단점이 궁금합니다.

  1. chmod 777 /mnt/externalDrive
  2. 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그룹에 개별 사용자 계정이 있는 경우 다음을 수행할 수 있습니다.

  1. 드라이브의 모든 파일과 디렉터리를 이 그룹이 소유하도록 만듭니다.
  2. 어떻게 든 이러한 파일 및 디렉토리에 대한 적절한 그룹 권한을 관리했습니다.
  3. 어떻게 든 적절한 그룹 소유권을 사용하여 개별적으로 새 파일을 만들었습니다. 권한.

첫 번째와 두 번째 사항은 구현하기 쉽습니다( 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, sysSolaris의 그룹 공유 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을 사용하여 완전한 솔루션을 제공하십시오.

또한보십시오:

관련 정보