如何使用 Samba 4 获取组写权限?

如何使用 Samba 4 获取组写权限?

我有一个运行 Ubuntu 的 Samba 共享服务器。升级到 14.04 后,我将 Samba 从 3 升级到了 4。从那时起,我无法获得新创建的目录或文件的组写入权限。

Samba3 之前使用的设置如下:

security mask = 000
force security mode = 660
directory security mask = 000
force directory security mode = 770
force user = nobody
force group = Domain Users

这些设置在 Samba 4 中被删除(请参阅https://wiki.samba.org/index.php/Samba_4.0_Features_added/changed#smb.conf_changes)。

但是现在,我的目录创建了“drwxr-x--- 2 nobody Domain Users”和我的新文件“-rwxr-x--- 1 nobody Domain Users”。

那么,Samba 4 中如何允许我的用户创建并以写权限共享新的目录和文件?

这是我的完整 Samba 配置:

[global]
    workgroup = WORKGROUP
    server string = %h server (Samba, Ubuntu)
    interfaces = 127.0.0.0/8, eth0
    map to guest = Bad User
    obey pam restrictions = Yes
    passdb backend = ldapsam:ldap://ldap
    pam password change = Yes
    passwd program = /usr/bin/passwd %u
    passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
    syslog = 0
    log file = /var/log/samba/log.%m
    max log size = 1000
    load printers = No
    domain master = Yes
    dns proxy = No
    ldap admin dn = cn=root,dc=example,dc=com
    ldap group suffix = ou=Groups
    ldap idmap suffix = ou=Idmap
    ldap machine suffix = ou=Computers
    ldap passwd sync = yes
    ldap suffix = dc=example,dc=com
    ldap ssl = no
    ldap user suffix = ou=People
    usershare allow guests = Yes
    panic action = /usr/share/samba/panic-action %d
    idmap config * : backend = tdb

[CommonShare]
    comment = Common share
    path = /srv/samba/common
    valid users = @myusers
    read only = No
    create mask = 0660
    force create mode = 0770
    directory mask = 0770
    force directory mode = 0770
    inherit permissions = Yes
    inherit owner = Yes

答案1

在研究这个问题时,我偶然发现了这个 Samba 邮件列表消息:

https://www.spinics.net/lists/samba/msg169260.html

其中,开发人员暗示,当客户端请求文件权限时,Samba 会完全忽略传统的 Unix 文件权限。因此,如果您在 Windows 上右键单击文件并查看其权限,它将显示为没有组写入权限。虽然在大多数情况下这没问题(Windows 让 Samba 来强制执行权限),但如果文件是 Word 格式,它实际上会使文件不可组写入,因为 Word 会检查权限,如果它认为(在本例中是错误的)文件不可写,它会切换到特殊的只读模式。OpenOffice 也会做同样的事情。

要解决该问题,您必须使用某些 Windows 程序向要设置为可组写入的文件添加 ACL:

apt-get install acl # Not installed by default on Debian
setfacl -m 'group:<group-name> :rw' <filename>

如果您输入了错误的组名,setfacl则会将其报告为语法错误。前面的空格:rw是必需的。此命令成功后,组写入权限将显示给检查它的 Windows 程序。

答案2

要修复该问题,您可以添加force user 用户名valid users添加到共享列表中。

就你的情况而言:

[Myshare]
...
valid users = @bureau
...

应该:

[Myshare]
...
valid users = nobody @bureau
...

答案3

我也遇到了同样的问题。

我必须使用默认组权限更新所有目录的访问控制列表:

sudo setfacl -R -m d:g:family:rwx /mnt/backup

-R = recursive
-m = modify
d: = defaults
g: = group name ("family" in my case) or gid number
rwx = default permissions read write execute for all in group

/mnt/backup是需要修改的目录(和子目录)。

答案4

前四个参数已被删除,而不是最后两个(参见:https://www.samba.org/samba/docs/man/manpages/smb.conf.5.html#FORCEUSER)。

因此,只需将它们放回配置文件中,问题就解决了。如果您希望特定组中的用户具有写入权限,请添加该write list参数。它提供了向特定用户或组授予写入权限的能力。

下面是我用来允许属于特定组的所有用户(且仅限这些用户)创建/修改文件的配置示例:

[Myshare] writeable = yes path = /shares/office force directory mode = 770 force create mode = 770 force group = bureau valid users = @bureau write list = @bureau

相关内容