为什么 Samba 创建所有新文件/目录时都以“root”为所有者?

为什么 Samba 创建所有新文件/目录时都以“root”为所有者?

我创建了一个新的 Samba 实例并且它可以工作,但是当我将新文件复制到 Samba 共享时,它们会使用owner:groupas进行创建root:myuser。我在 Linux 本身上创建的所有文件都具有myuser:myuser.为什么要设置Sambaroot为所有者呢?我知道force userforce group选项,但我不想使用它们,因为它们似乎全局适用于所有配置的 Samba 共享;如果我为 2 个不同的用户设置了 2 个共享,我希望以这些各自的用户作为所有者和组来创建文件,并且root不应该是任何内容的所有者或组。

相关的smb.conf是:

[global]
# Make Samba follow symlinks
follow symlinks = yes
wide links = yes
unix extensions = no

# Custom shares
[myuserhome]
path=/home/myuser
browseable=yes
writeable=yes
create mask = 0664
directory mask = 0755
valid users = myuser
admin users = myuser

答案1

标题中问题的答案是:因为你已经告诉它这样做了。

来自man smb.conf(强调我的):

管理员用户 (S)

这是将被授予共享管理权限的用户列表。这意味着他们将以超级用户(root)身份执行所有文件操作。

您应该非常小心地使用此选项,因为此列表中的任何用户都可以在共享上执行任何他们喜欢的操作,而不管文件权限如何。

如果你已经正确设置了目录权限,并且没有养成以root身份摆弄共享目录中的东西的习惯,那么你admin users根本不需要Samba配置中的这一行。

如果您要设置共享访问的目录,无论是在 Samba 还是 Linux 中,最简单的方法是为其设置一个组,然后将顶级共享目录的所有者root、组设置为该组。为此共享设置,以及权限drwxrws---,或者drwxrwsr-x如果需要的话(chmod 2770chmod 2775分别)。

请注意,现在为目录设置了 setgid 位 ( chmod g+s):这意味着组所有权将由在此目录中创建的任何新文件或子目录继承,并且 setgid 位本身将由任何新目录自动继承。然后根据需要与 Samba 共享该目录。

重要的是你要创造仅顶层作为根 -让用户做剩下的事

如果您需要自己维护共享目录的内容,请将您的常规用户帐户添加到授予该目录写入权限的组中,然后“执行必要的操作”作为您的常规用户帐户。如果不是 - 除非您绝对必须做某事,否则请将您的 root 驱动的手远离该目录。您会发现这是非常罕见的例外。

在遵循常见“用户组”原则的现代 Linux 系统上(即所有用户都有一个仅为其分配 UID=GID 的个人组,并且 umask 不限制组写入访问权限),您无需执行任何其他操作:一切都正常,并且每个需要能够修改事物的人都可以利用组所有权授予的权力来做到这一点。

除非目录中有粘性位( chmod +t) 设置,任何对目录有写权限的人都可以删除其中的一切,包括 root 拥有的子目录。

相关内容