我有两个相同的用户,一个可以访问共享,而另一个则不能。共享的名称是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 就应该保留配置文件。