삼바 클라이언트에 보고된 UID(및 GID)를 다시 매핑할 수 있습니까? 옵션 이 있는 것처럼 보이지만 idmap
제가 수행하려는 간단한 재매핑에 비해 지나치게 복잡해 보이고 이것이 올바른 접근 방식인지 혼란스럽습니다.
두 기계 A와 B를 생각해 보세요. 머신 A에는 smbuser
UID를 가진 사용자 가 있습니다 701
. 머신 B에는 root
UID를 가진 사용자 가 한 명뿐입니다 0
.
smb.conf
기계 A에서 발췌:
[share1]
path = /tmp/share1
valid users = smbuser
머신 B에서:
mount -t cifs -o username=smbuser,pass=**** //10.1.1.11/share1 /mnt
ls -l /mnt
이해합니다:
drwx------ 701 701 0 Jan 1 00:00 .
drwx------ root root 0 Jan 1 00:00 ..
-rw------- 701 701 42 Jan 1 00:00 testfile
제 생각에는:
drwx------ root root 0 Jan 1 00:00 .
drwx------ root root 0 Jan 1 00:00 ..
-rw------- root root 42 Jan 1 00:00 testfile
701 -> 0
핵심요약: 클라이언트에게 디렉토리 목록을 제공할 때 UID를 다시 매핑하려면 삼바가 필요합니다.
답변1
uid
forceuid
및 gid
마운트 옵션 의 조합이 필요합니다 forcegid
. 이렇게 하면 특정 UID 및 GID를 할당하여 SMB 클라이언트가 항상 이러한 파일을 소유하도록 지시할 수 있습니다. 또한 이를 위해 SMB 서버 구성을 변경할 필요가 없습니다.
cifs.mount
맨페이지를 참조하세요.https://linux.die.net/man/8/mount.cifs:
uid=arg
서버가 소유권 정보를 제공하지 않으면 설치 프로그램은 마운트된 파일 시스템에 있는 모든 파일 또는 디렉터리의 uid를 소유하게 됩니다. 사용자 이름이나 숫자 uid로 지정할 수 있습니다. 지정하지 않으면 기본값은 uid 0입니다. 숫자가 아닌 형식으로 uid 지정을 지원하려면 mount.cifs 도우미가 버전 1.10 이상이어야 합니다. 자세한 내용은 아래의 파일 및 디렉터리 소유권과 권한에 대한 섹션을 참조하세요.
forceuid
파일 및 디렉터리에 대해 서버에서 제공한 모든 uid를 무시하고 항상 uid= 옵션의 값으로 소유자를 지정하도록 클라이언트에 지시합니다. 자세한 내용은 아래의 파일 및 디렉터리 소유권과 권한에 대한 섹션을 참조하세요.
gid=arg
서버가 소유권 정보를 제공하지 않으면 설치 프로그램은 마운트된 파일 시스템에 있는 모든 파일 또는 디렉터리의 gid를 소유하게 됩니다. 그룹 이름이나 숫자 gid로 지정할 수 있습니다. 지정하지 않으면 기본값은 gid 0입니다. 숫자가 아닌 gid 사양을 지원하려면 mount.cifs 도우미가 버전 1.10 이상이어야 합니다. 자세한 내용은 아래의 파일 및 디렉터리 소유권과 권한에 대한 섹션을 참조하세요.
forcegid
파일 및 디렉터리에 대해 서버에서 제공한 모든 gid를 무시하고 항상 소유자를 gid= 옵션의 값으로 지정하도록 클라이언트에 지시합니다. 자세한 내용은 아래의 파일 및 디렉터리 소유권과 권한에 대한 섹션을 참조하세요.
경우에 따라 다음을 사용할 수 있습니다(UID/GID를 지정하지 않으면 기본값 0이 사용됩니다).
mount -t cifs -o username=smbuser,pass=****,uid,forceuid,gid,forcegid //10.1.1.11/share1 /mnt
dynperm
또한 귀하에게 유용할 수 있는 옵션 도 확인해 보세요 .
참고로 "파일 및 디렉터리 소유권 및 사용 권한" 섹션은 다음과 같습니다.
파일 및 디렉터리 소유권과 권한
핵심 CIFS 프로토콜은 파일 및 디렉터리에 대한 UNIX 소유권 정보나 모드를 제공하지 않습니다. 따라서 파일과 디렉터리는 일반적으로 uid= 또는 gid= 옵션에 의해 설정된 값이 소유한 것으로 나타나며 설치의 기본 file_mode 및 dir_mode로 설정된 권한을 갖게 됩니다. chmod/chown을 통해 이러한 값을 변경하려고 시도하면 성공을 반환하지만 효과는 없습니다.
클라이언트와 서버가 Unix 확장자를 협상할 때 파일과 디렉터리에는 서버에서 제공하는 uid, gid 및 모드가 할당됩니다. CIFS 마운트는 일반적으로 단일 사용자이고 어떤 사용자가 마운트에 액세스하는지에 관계없이 동일한 자격 증명이 사용되기 때문에 새로 생성된 파일과 디렉터리에는 일반적으로 공유를 마운트하는 데 사용된 자격 증명에 해당하는 소유권이 부여됩니다.
클라이언트와 서버에서 사용되는 uid와 gid가 일치하지 않는 경우 forceuid 및 forcegid 옵션이 도움이 될 수 있습니다. 그러나 이 모드를 재정의하는 해당 옵션이 없다는 점에 유의하십시오. forceuid 또는 forcegid가 적용될 때 파일에 할당된 권한은 실제 권한을 반영하지 않을 수 있습니다.
Unix 확장이 협상되지 않으면 "dynperm" 설치 옵션을 사용하여 서버에서 로컬로 에뮬레이션할 수도 있습니다. 이 설치 옵션이 적용되면 새로 생성된 파일과 디렉터리에 겉보기에 적절한 권한이 부여됩니다. 그러나 이러한 권한은 서버에 저장되지 않으며 향후 언제든지 사라질 수 있습니다(커널이 inode 캐시를 플러시하는 경우). 일반적으로 이 설치 옵션은 사용하지 않는 것이 좋습니다.
noperm 옵션을 통해 클라이언트의 권한 확인을 완전히 무시할 수도 있습니다. 서버측 권한 확인은 재정의될 수 없습니다. 서버에서 수행하는 권한 확인은 항상 공유를 마운트하는 데 사용된 자격 증명과 일치하며 반드시 공유에 액세스하는 사용자와 일치하지는 않습니다.