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


16

컴퓨터간에 이동할 가능성이 가장 높은 외부 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디스크에서 주기적으로 실행해야 할 것 같습니다 .

내가 고려하고있는 것 중 명백한 나쁜 습관이 있습니까? 디스크에는 대부분의 재무 데이터처럼 보호 할 필요가없는 비디오, 음악 및 사진이 포함되어있을 것입니다.


내가 당신을 따르는 지 확실하지 않습니다. 외장 드라이브에서 권한을 설정하려고 했습니까?
Ramesh

1
예. 그게 좋은가요?
주님로.

답변:


19

다중 사용자 시스템의 경우, 특히 둘 이상의 시스템이있는 경우 문제입니다. )에는 없습니다 정말 당신이 원하는 것을 할 수있는 좋은 방법. 다가오는 접근법은

  • 외장 드라이브를 사용하는 모든 컴퓨터에서 계정에 대해 동일한 UID를 가짐
  • 소유자 / 그룹 비밀을 모르는 파일 시스템 사용 (FAT 또는 NTFS가 떠오를 수 있지만…

가장 효과적인 방법은 일반적인 관행으로 돌아 오는 것입니다. 대부분의 (적어도) Linux 시스템에는 일반적으로 공통 GID 를 갖는 일부 그룹이 있습니다 . 예를 들어 users, 100대부분의 Linux 배포판에 GID 가 있습니다 . 이 그룹에 해당 사용자 계정을 보유 할 수 있다면

  1. 드라이브의 모든 파일과 디렉토리를이 그룹이 소유하게하십시오
  2. 어떻게 든 그 파일과 디렉토리에 적절한 그룹 권한을 가질 수 있습니다.
  3. 어떻게 든 적절한 그룹 소유권 resp로 새 파일을 만들 수 있습니다. 권한.

첫 번째와 두 번째 포인트는 달성하기 쉽습니다 ( chown, chmod). 세 번째 요점은 조금 까다 롭습니다.

"그룹 소유권"부분은 비교적 쉽습니다. 드라이브의 모든 디렉토리에 SGID 비트를 설정할 수 있습니다. 디렉토리에 적용된 SGID 비트는 커널에게 BSD 방식으로 동작하도록 알려줍니다. BSD는 특정 디렉토리 아래에 생성 된 모든 파일 / 디렉토리를 그룹의 소유가 아닌 파일 / 디렉토리를 작성합니다 (Linux처럼). 부모 디렉토리의 소유자에 의해.

권한 비트는 조금 어렵습니다. 새로 작성된 파일 / 디렉토리의 권한은 (다른 것들 중에서도) 명시 적으로 언급되지 않은 경우 umask어떤 비트 를 설정 하지 않는지 를 나타내는 비트 마스크에 의해 영향을받습니다 . umask예를 들어 일반적인 값은이며 022,»group«및»others«의 쓰기 비트는 일반적으로 설정해서는 안됩니다. 당신은 당신을 바꿀 수 umask002사용자가 쓰기 권한이 그룹에 대한 삭제하지 않으려는하지만, 단점은이 값은 디렉토리 기반 설정할 수 없다는 것입니다 당신이 보통에 대한 쓰기 권한을 가지고 싶지 않아 말하고, 생성하는 모든 파일에 대해 기본 그룹 세트.

ACL을 사용하여이 문제를 해결할 수 있습니다. ACL에서 a maskdefault권한 세트를 설정할 수 있으며이 ACL 세트를 사용하여 디렉토리 내에 작성된 모든 파일 및 디렉토리에 적용됩니다. 따라서 문제의 가능한 해결책은

  • 외장 드라이브를 사용하려는 모든 시스템에서 공통 그룹의 구성원인지 확인
  • 드라이브의 모든 파일과 디렉토리를이 그룹이 소유하고 모든 디렉토리에서 SGID 비트를 설정하십시오.
  • 모든 디렉토리의 ACL을 변경하여 그룹에 대해 쓰기 권한이 설정된 모든 새 파일 / 디렉토리를 커널에 작성하도록하는 마스크 및 기본 권한을 포함하십시오.

참조 setfacl(1)acl(5)자세한 내용은.


1
이 ext4에있는 그의 및 GID 매핑 주위에 떠있는 패치했다 spinics.net/lists/linux-fsdevel/msg57240.html는 ...,하지만 난 그것을 통해왔다 생각하지 않는다
Rmano

11

거기에 다른 유사한 질문 과 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는 직접 사용되며``알 수 없음 ''으로 변환됩니다.


bindfs는 꽤 느립니다. 아마도 FUSE 파일 시스템이기 때문일 것입니다.
Navin

4

파일의 소유자와 그룹은 숫자로 저장됩니다. 따라서 파일은 시스템에 연결된 사용자 (또는 전혀 없음)에 관계없이 uid = 1005가 소유합니다.

사용자 / 그룹을 nobody로 변경해도 문제가 해결되지 않습니다. 그런 다음 nobody 사용자 또는 nobody 그룹의 구성원 만 파일에 액세스 할 수 있습니다.

불행히도, ext4에서 권한 검사를 비활성화하는 방법이 없다고 생각합니다. 예를 들어, ext3 또는 ext4 파일 시스템에서 파일 권한을 비활성화 할 수 있습니까? 를 참조하십시오 .


2

Andreas Wiese 는 모든 호스트에 공통 그룹 ID가 있으면 setgid비트 및 ACL로 문제를 해결할 수 있다고 말합니다.

Linux 배포판에서 사전 정의 된 그룹 ID를 질문 합니까?

: 자신의 연구는 그와 같은 모든 감동 배포판에서 그룹의 존재 발견 후 sys그룹 주 ID를 3데비안, 우분투, 레드햇, 페도라, CentOS는, 수세, FreeBSD의, 오픈 BSD, NetBSD의,에서라도, Solaris에서.

이것으로 :

$ 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이 사용됩니다.

또한보십시오:

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.