Samba不重新加载用户组成员

我正在运行一个简单的samba服务器设置,用户连接到包含特定用户组的文件夹的共享。 这些文件夹是chmod 2770 ,所以只有在正确组中的用户才能读/写它们。

问题是,如果我更改组成员身份(即从组中删除用户/将用户添加到组;更改在客户端和服务器之间同步!)samba不会自动重新加载用户的组成员身份,所以他们仍然可以写入组他们不再是等的成员我要么重新连接到共享或重新启动桑巴应用更改。

有什么方法可以防止组caching和/或启用组成员重新加载桑巴舞?

我的smb.conf:

 [global] interfaces = ethlan bind interfaces only = yes smb ports = 445 workgroup = WORKGROUP security = user passdb backend = tdbsam:/var/lib/mysamba/samba.tdb disable netbios = yes nt acl support = no invalid users = root read only = no case sensitive = yes load printers = no unix extensions = yes log file = /var/log/samba.log log level = 1 syslog = 0 use sendfile = yes [groups] path = /home/groups browseable = yes force create mode = 0770 force directory mode = 2770 hide unreadable = yes 

而不是重新启动整个Samba服务,你应该能够发送信号SIGHUP ,强制它重新加载它的configuration文件。

smbd(8)手册页 :

configuration文件及其包含的所有文件如果发生更改,则会每分钟自动重新加载一次。 您可以通过向服务器发送SIGHUP来强制重新加载。 重新加载configuration文件不会影响已经build立的任何服务的连接。 要么用户将不得不断开服务,或smbd杀害,并重新启动。

最后两句话很重要:当前连接不受此影响。

您如何处理用户的连接可能会有很大的不同,并取决于具体情况。

  • 如果他们正在积极使用他们的连接,可能会更容易告诉他们重新启动计算机以使更改生效; 这样,如果他们处于某种事情的中间,他们可以在闲暇时间做。

  • 对于个人用户,你可以杀死他们的连接过程( SIGHUP可能工作,但目前我不确定); 但您可能希望让他们保存和/或closures他们可能在共享上打开的任何内容,因为他们的连接将被切断。 当他们再次访问共享时,他们将与新的访问生成一个新的连接。 您可以使用smbstatus查找有关当前连接的信息。

  • 重新启动Samba。 这是一个非常激烈的方法,但在某些情况下可能需要。 这将杀死所有当前的连接,迫使他们build立新的连接。

  • 等一下 如果在特定时间不需要更改,则可以让客户自行重新build立连接。

我觉得我有同样的问题。 在我的情况下,组成员身份被caching为每个桑巴会话进程smbstatus -p

我使用这个脚本杀死进程并刷新成员信息:

 #/bin/sh VICTIM="$1" [ -z "$VICTIM" ] && exit 1 if [ "$VICTIM" = "!" ]; then L="$(smbstatus -p 2>/dev/null)" else L="$(smbstatus -p -u "${VICTIM}" 2>/dev/null)" fi echo "$L" | while read PID USER GROUP CLIENT IP; do getent passwd "$USER" >/dev/null || continue kill "$PID" 2>/dev/null echo -n . done echo " done!" 

Windows没有问题,因为它自动重新连接到samba。 用户在下一次呼叫之前只有最小的延迟。 但是:所有活动的文件传输将被取消,并向用户抛出I / O错误。

我用一个batch file和一个cronjob来自动化这个。 这样,用户可以通过双击来杀死自己的会话(并阅读有关I / O错误的问题)。