Samba는 setgid 비트를 무시하고 실행 파일을 생성하지 말아야 할 때 실행 파일을 생성하는 것 같습니다.

Samba는 setgid 비트를 무시하고 실행 파일을 생성하지 말아야 할 때 실행 파일을 생성하는 것 같습니다.

이런 일이 꽤 자주 일어나는 것 같습니다(예:여기그리고여기) 그러나 아직 효과적이고 만족스러운 해결책을 찾지 못했습니다.

질문은 다음과 같습니다.

  • 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가 올바르게 처리됩니다.

관련 정보