Samba 4.1 process_usershare_file:/var/lib/samba/usershares/share 统计失败。即使用户可以列出该文件夹和统计文件

Samba 4.1 process_usershare_file:/var/lib/samba/usershares/share 统计失败。即使用户可以列出该文件夹和统计文件

我有两个相同的用户,一个可以访问共享,而另一个则不能。共享的名称是storage_photos,它位于文件夹 中/storage/photos/

$ getfacl /storage/photos
getfacl: Removing leading '/' from absolute path names
# file: storage/photos
# owner: root
# group: photos
user::rwx
group::rwx
group:photos:rwx
mask::rwx
other::r--
default:user::rwx
default:group::rwx
default:group:photos:rwx
default:mask::rwx
default:other::r--

这两个用户都是该组的成员photos

$ groups john
john : john sambashare photos

$ groups lisa
lisa : lisa sambashare photos

作为 sambashare 文件夹的成员,他们可以列出/var/lib/samba/usershares/

sudo -u lisa ls -ltha /var/lib/samba/usershares/
total 24K
drwxrwx--T 2 root sambashare 4.0K Oct 25 17:06 .
-rw-r--r-- 1 root root        125 Oct 25 17:06 storage_photos

考虑到这一点,奇怪的是发现一个用户无法访问共享而另一个用户成功:

smbclient //Server/storage_photos -U lisa%pass
Domain=[ONE] OS=[Unix] Server=[Samba 4.1.6-Ubuntu]
tree connect failed: NT_STATUS_ACCESS_DENIED

smbclient //Server/storage_photos -U john%pass
Domain=[ONE] OS=[Unix] Server=[Samba 4.1.6-Ubuntu]
smb: \>

在服务器端,日志记录级别 2 的故障如下所示:

[2015/10/25 23:12:20.646681,  0] ../source3/param/loadparm.c:4365(process_usershare_file)
  process_usershare_file: stat of /var/lib/samba/usershares/storage_photos failed. Permission denied
[2015/10/25 23:12:20.649381,  2] ../source3/smbd/service.c:407(create_connection_session_info)
  guest user (from session setup) not permitted to access this share (storage_photos)
[2015/10/25 23:12:20.649437,  1] ../source3/smbd/service.c:550(make_connection_snum)
  create_connection_session_info failed: NT_STATUS_ACCESS_DENIED

与此同时,成功是无聊的:

[2015/10/25 23:14:30.321507,  2] ../source3/smbd/service.c:856(make_connection_snum)
  device (ipv4:192.168.1.5:46134) connect to service storage_photos initially as user john (uid=1000, gid=1000) (pid 5297)
[2015/10/25 23:16:10.409218,  1] ../source3/smbd/service.c:1130(close_cnum)
  device (ipv4:192.168.1.5:46134) closed connection to service storage_photos

现在,失败中最有趣的部分如下:process_usershare_file: stat of /var/lib/samba/usershares/storage_photos failed. Permission denied为什么即使用户可以访问文件,访问也会失败:

sudo -u lisa stat /var/lib/samba/usershares/storage_photos
  File: ‘/var/lib/samba/usershares/storage_photos’
  Size: 125             Blocks: 8          IO Block: 4096   regular file
Device: 900h/2304d      Inode: 137795      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-10-25 17:06:46.704318935 +0100
Modify: 2015-10-25 17:06:46.700318935 +0100
Change: 2015-10-25 17:06:46.700318935 +0100
 Birth: -

由此可以得出结论,由于某种原因,当 lisa 尝试登录时,samba 没有使用正确的 unix 用户来统计文件,但当 john 尝试登录时却使用了。

john 和 lisa 都可以 ssh 到该机器。该机器确实已libpam-smbpass按照这个堆栈溢出问题。但重新启动服务器后问题仍然存在。

所有这些都使用以下非常默认的 Ubuntu 14.04 smb.conf。共享由启用 sharesmb 参数的 ZFS 文件系统定义。

[global]  
        workgroup = ONE  
        server string = %h server (Samba, Ubuntu)  
        server role = standalone server  
        map to guest = Bad User  
        obey pam restrictions = Yes  
        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* .  
        unix password sync = Yes  
        syslog = 0  
        log file = /var/log/samba/log.%m  
        max log size = 1000  
        dns proxy = No  
        usershare allow guests = Yes  
        panic action = /usr/share/samba/panic-action %d  
        idmap config * : backend = tdb

答案1

“process_usershare_file” 发出的错误消息非常具有误导性,它与 user_shares 有关,后者旨在允许登录到 GUI 的本地用户以 Windows 风格与其他工作站共享文件夹。此设置在专用的 samba 服务器上完全无关(没有人在本地控制台上工作),但不幸的是,在大多数发行版中,默认情况下都启用了此设置,并且经常导致类似这样的虚假错误。更糟糕的是,错误流有时甚至会减慢服务器的速度(在快速的 10GigE 连接服务器上,这一点非常明显)。

要删除该消息,请将其添加到文件[global]的部分smb.conf

usershare max shares = 0

并重新启动 smbd 以启用它。它至少可以防止 Samba 客户端尝试访问不存在的用户共享并向你的日志发送垃圾邮件。

答案2

由于某种原因,winbind在服务器上重新安装解决了这个问题,但不是立即解决的。好像身份验证过程中有一些缓存。因此,解决方案是运行以​​下命令,然后休息一会儿。

sudo apt-get remove winbind && sudo apt-get install winbind

我非常抱歉,但我想不出为什么这可以解决重新启动 winbind 却不能解决问题的原因,因为只要您不清除软件包,apt 就应该保留配置文件。

相关内容