我创建了一个新的 Samba 实例并且它可以工作,但是当我将新文件复制到 Samba 共享时,它们会使用owner:group
as进行创建root:myuser
。我在 Linux 本身上创建的所有文件都具有myuser:myuser
. 为什么要设置Sambaroot
为所有者呢?我知道force user
和force 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
标题中问题的答案是:因为你已经告诉它这样做了。
来自
man smb.conf
(强调我的):如果你已经正确设置了目录权限,并且没有养成以root身份摆弄共享目录中的东西的习惯,那么你
admin users
根本不需要Samba配置中的这一行。如果您要设置共享访问的目录,无论是在 Samba 还是 Linux 中,最简单的方法是为其设置一个组,然后将顶级共享目录的所有者
root
、组设置为该组。为此共享设置,以及权限drwxrws---
,或者drwxrwsr-x
如果需要的话(chmod 2770
或chmod 2775
分别)。请注意,现在为目录设置了 setgid 位 (
chmod g+s
):这意味着组所有权将由在此目录中创建的任何新文件或子目录继承,并且 setgid 位本身将由任何新目录自动继承。然后根据需要与 Samba 共享该目录。重要的是您仅以 root 身份创建顶层-让用户完成其余的工作。
如果您需要自己维护共享目录的内容,请将您的常规用户帐户添加到授予该目录写入权限的组中,然后作为您的常规用户帐户“执行必要的操作” 。如果不是 - 除非您绝对必须做某事,否则请将您的 root 驱动的手远离该目录。您会发现这是非常罕见的例外。
在遵循常见“用户组”原则的现代 Linux 系统上(即所有用户都有一个仅为其分配 UID=GID 的个人组,并且 umask 不限制组写入访问权限),您无需执行任何其他操作:一切都正常,并且每个需要能够修改事物的人都可以利用组所有权授予的权力来做到这一点。
除非目录设置了粘滞位(
chmod +t
),否则任何对目录具有写权限的人都可以删除其中的任何内容,包括 root 拥有的子目录。