我在 RHEL7 上运行 Samba 4.9.1,并加入了 Win AD 域。在一次共享中,我设置
force user = foo
,希望迫使当地的用户 foo。但是,AD 中也存在相同的用户名,并且 Samba 实际上在文件创建等时使用 AD 用户。
getent passwd foo
正如预期的那样,返回本地用户,因为 /etc/nsswitch.conf 读取
passwd: files winbind
group: files winbind
显然,我设置了选项
winbind use default domain = yes
在 smb.conf 中,我宁愿不改变它,因为我不确定那时我需要在其他地方改变多少东西……
有什么提示可以强制 Samba 首先寻找本地用户吗?
问候,埃里克
答案1
好吧,正如 Worthweile 所要求的那样,我将发布我的解决方法作为答案。
- 从共享定义中删除“强制用户”指令。这将使新创建的文件归当前经过身份验证的共享用户及其主要组所有。
- 如果需要,例如在 ext2/3 文件系统上,通过挂载选项启用 ACL。在我的例子中 (xfs),默认情况下 ACL 始终可用。
setfactl -R -m u:foo:rwX <share_dir> setfactl -R -d -m u:foo:rwX <share_dir>
第一个命令将授予用户foo
对共享内所有文件和目录的读取、写入和执行权限。X
只有当它是一个目录或其他人已经具有执行权限时,大写才会设置执行权限,如中所述man setfactl
。
第二个将为共享内的新文件添加与默认相同的权限。
在大多数情况下,Samba 的force user
选项可能实际上是解决权限管理不足的一种解决方法,因此这应该是最干净的方法(可能是 Linux 中“pythonic”的等价物?)。但是,可能仍然会存在 ACL 不适用的情况,因此关于force user
的行为的问题仍然存在。