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

これには2つの問題があります。

  • まず、ファイルは実行可能です(そうではありません)。 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には、他のオプションとの非互換性やその他の問題があることを読んでいます。

SambaがPOSIXの意味に従うようにする方法はありますか?

答え1

結局見つけた!

秘訣は次のとおりです。

nt acl support = no

グローバルセクションで。その後、Sambaは標準のPOSIXセマンティクスに戻ります(合理的なPOSIX ACLもWindows ACLにマップします)。

これで実行可能ファイルがなく、setgidが正しく処理されます。

関連情報