이런 일이 꽤 자주 일어나는 것 같습니다(예:여기그리고여기) 그러나 아직 효과적이고 만족스러운 해결책을 찾지 못했습니다.
질문은 다음과 같습니다.
Linux와 Windows의 혼합 환경, Linux 사용자는 NFS를 통해 액세스하고 Windows 사용자는 SMB를 통해 액세스하며 Kerberos는 잘 작동합니다.
아이디어는 setgid 디렉토리가 있는 일반 POSIX와 마찬가지로 그룹이 하위 트리를 소유하도록 하는 것입니다. 파일 시스템은 EA 및 POSIX ACL을 지원합니다. 예를 들어 다음 디렉토리가 있습니다.
drwxrws---+ 1 vntmsm tecnico-acl 2868 giu 16 12:07 Foto
# file: Foto
# owner: vntmsm
# group: tecnico-acl
# flags: -s-
user::rwx
group::rwx
other::---
default:user::rwx
default:group::rwx
default:other::---
"tecnico-acl" 그룹의 모든 사용자가 해당 하위 트리에서 작업할 수 있기를 바랍니다. 예를 들어, 파일을 생성하면 다음이 수행됩니다.
-rw-rw---- 1 vntmsm tecnico-acl 911922 apr 13 2021 Foto/Valigia.jpg
# file: Foto/Valigia.jpg
# owner: vntmsm
# group: tecnico-acl
user::rw-
group::rw-
other::---
참고로 해당 디렉토리와 파일에 대해 smbcacls가 말하는 내용은 다음과 같습니다.
# This is the directory
REVISION:1
CONTROL:SR|DP
OWNER:PROXIND\vntmsm
GROUP:PROXIND\tecnico-acl
ACL:PROXIND\vntmsm:ALLOWED/0x0/FULL
ACL:PROXIND\tecnico-acl:ALLOWED/0x0/FULL
ACL:Everyone:ALLOWED/0x0/
ACL:Creator Owner:ALLOWED/OI|CI|IO/FULL
ACL:Creator Group:ALLOWED/OI|CI|IO/FULL
ACL:Everyone:ALLOWED/OI|CI|IO/
# This is the file
REVISION:1
CONTROL:SR|DP
OWNER:PROXIND\vntmsm
GROUP:PROXIND\tecnico-acl
ACL:PROXIND\vntmsm:ALLOWED/0x0/RWDPO
ACL:PROXIND\tecnico-acl:ALLOWED/0x0/RWDPO
ACL:Everyone:ALLOWED/0x0/
따라서 화려한 ACL은 없으며 일반적인 setgid 동작만 수행됩니다. 저는 Windows ACL 전문가는 아니지만 적어도 합리적인 것 같습니다.
하지만(이것이 문제입니다.) Samba를 통해(예: Windows 또는 smbclient에서) 파일을 생성하면 다음과 같은 결과가 나타납니다.
-rwxrwx---+ 1 vntmsm Domain Users 377406 giu 16 09:00 Foto/1470307.jpg
# file: Foto/1470307.jpg
# owner: vntmsm
# group: Domain\040Users
user::rwx
user:vntmsm:rwx
group::rwx
group:Domain\040Users:rwx
mask::rwx
other::---
smbcacls에서:
REVISION:1
CONTROL:SR|SI|DI|DP
OWNER:PROXIND\vntmsm
GROUP:PROXIND\Domain Users
ACL:PROXIND\vntmsm:ALLOWED/I/FULL
ACL:PROXIND\Domain Users:ALLOWED/I/FULL
여기에는 두 가지 문제가 있습니다.
우선, 파일은 실행 가능합니다(그래서는 안 됩니다). Windows가 실행 파일을 생성하는 이유를 이해할 수 없습니다(내가 아는 한 ACL을 적용하는 개념이 없습니다).
기본 그룹은 도메인 사용자이므로 Samba는 분명히 setgid 비트를 무시하고 해당 작업을 수행합니다.
나불필요한Windows ACL은 지원되지만(POSIX ACL은 현재 지원되지 않으며 일반 기존 파일 권한만 지원됨) Samba가 setgid 비트를 존중하도록 하는 방법을 찾을 수 없습니다(또한 실행 파일을 생성하는 이유는 무엇입니까?)
대부분의 솔루션은 공유에서 강제 그룹을 사용하지만 여기서는 허용되지 않습니다(그룹마다 다른 하위 트리를 사용합니다).
현재 내 smb.conf의 전역 섹션에는 다음이 있습니다(멤버 서버임).
idmap config * : backend = tdb
idmap config * : range = 3000-3999
idmap config DOMAIN : backend = ad
idmap config DOMAIN : range = 0-2999
idmap config DOMAIN : schema_mode = rfc2307
idmap config DOMAIN : unix_nss_info = yes
idmap config DOMAIN : unix_primary_group = yes
inherit acls = yes
inherit permissions = yes
kerberos method = system keytab
load printers = yes
log file = /var/log/samba/log.%m
map acl inherit = yes
max log size = 100000
min print space = 100000
pid directory = /var/lock/samba
printing = lprng
private dir = /etc/samba/private
realm = AD.DOMAIN
rpc_server:spoolss = external
rpc_daemon:spoolssd = fork
security = ADS
show add printer wizard = yes
spoolss:architecture = Windows x64
store dos attributes = yes
unix charset = UTF8
username map script = /bin/echo
utmp = Yes
vfs objects = acl_xattr
winbind enum groups = yes
winbind enum users = yes
winbind nss info = rfc2307
winbind use default domain = yes
workgroup = DOMAIN
나눔에는 이런게 있어요
[share]
path = /data/share
create mask = 0660
directory mask = 02770
force directory mode = 02000
read only = No
acl_xattr에는 다른 옵션과의 비호환성 또는 기타 문제가 있다는 것을 읽었습니다.
삼바가 POSIX 의미를 준수하도록 하는 방법이 있습니까?
답변1
결국 찾았다!
비결은 다음과 같습니다.
nt acl support = no
글로벌 섹션에서. 그런 다음 Samba는 표준 POSIX 의미 체계로 되돌아갑니다(또한 합리적인 POSIX ACL을 Windows ACL에 매핑합니다).
이제 실행 파일이 없으며 setgid가 올바르게 처리됩니다.