![如何使用 Samba 4 获取组写权限?](https://linux22.com/image/865278/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20Samba%204%20%E8%8E%B7%E5%8F%96%E7%BB%84%E5%86%99%E6%9D%83%E9%99%90%EF%BC%9F.png)
我有一个运行 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
。