主机:Kubuntu 16.04.3 LTS
本地主机:Kubuntu 17.10
我无法再在终端上安装 cifs 共享:
mount -t cifs -o user=USER,domain=DOMAIN //HOST/share /mnt/tmp
Password for USER@//HOST/share: *************
mount error(5): Input/output error
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
在系统日志中我发现尝试时的错误消息:
Status code returned 0xc000005e STATUS_NO_LOGON_SERVERS
CIFS VFS: Send error in SessSetup = -5
CIFS VFS: cifs_mount failed w/return code = -5
我确信这是一个有效的共享,并且对该用户具有足够的权限。我可以开始海豚并打开smb://主机/共享没有任何问题!
我的系统处于活动目录环境 (领域,ssd 的)并且我还尝试使用 Kerberos 票证进行挂载,但是失败了:
mount -t cifs -o user=USER,domain=DOMAIN,cruid=USER,sec=krb5 //HOST/Share /mnt/tmp
mount error(2): No such file or directory
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
在系统日志中,我尝试执行下列操作时发现以下错误消息:
CIFS VFS: Send error in SessSetup = -2
CIFS VFS: cifs_mount failed w/return code = -2
通过 Kerberos 进行的 SSO 正在运行!使用smb://主机/共享在海豚我可以不使用密码来打开共享。
我也可以使用以下方式登录共享
smbclient -U USER //HOST/share
我可以使用‘ls’列出那里的文件。
我在网上找到了一个有同样错误的人,但他可以通过卸载 winbind 来解决这个问题。不幸的是,我在两台机器上都没有安装 winbind,所以这对我来说不是一个解决办法。其他人需要添加工作组名称,但这对我来说也不起作用。我还发现使用不同的 smb 版本进行安装。不幸的是,它总是失败,并显示“cifs_mount 失败,返回代码 = -5”(版本=1.0,版本=2.0,版本=2.1,版本=3.0,版本=3.1.1)。
我可以在两个使用 LTS 或最新版本的客户端之间重现此错误16.04<->16.04和17.10<->17.10。
有趣的: 如果我安装的是 Windows 共享而不是 Linux Samba 共享,则安装有效!
原因何在cifs_mount 错误 -5?
谢谢!
答案1
我建议您使用fstab
它来安装。
尝试检查日志来排除问题的原因,尝试此命令来显示可以显示挂载日志的文件列表:
grep -e mount -e ext4 -lR /var/log 2> /dev/null
对我来说,其中的安装日志/var/log/syslog
可能与您有所不同。
现在需要打开两个终端选项卡,在一个选项卡上输入命令:sudo tail -f /var/log/syslog
在第二个选项卡上,尝试使用以下命令挂载系统:
mount -t cifs -o user=USER,domain=DOMAIN,cruid=USER,sec=krb5 //HOST/Share /mnt/tmp
如果您返回第一个选项卡,您应该能够看到一些日志错误。对我来说,错误是(对您来说可能有所不同):
kernel: No dialect specified on mount. Default has changed to a more secure dialect, SMB2.1 or later (e.g. SMB3), from CIFS (SMB1). To use the less secure SMB1 dialect to access old servers which do not support SMB3 (or SMB2.1) specify vers=1.0 on mount.
kernel: CIFS VFS: protocol revalidation - security settings mismatch
kernel: CIFS VFS: session ffff90a6a2959000 has no tcon available for a dfs referral request
kernel: CIFS VFS: cifs_mount failed w/return code = -5
根据您的错误日志,您可能能够通过添加vers=1.0
到 mount 命令来解决问题,这可能会起作用,但它是不太安全的 smb 版本。否则,您可以根据收到的错误找出解决方案。
您还可以尝试在 /etc/samba/smb.conf 中配置 Samba 服务器,类似于此(对我而言有效):
[username]
comment = Username's developer directory
read only = no
locking = no
path = /var/www/username
guest ok = no
writeable = yes
然后在客户端上,添加以下行/etc/fstab
//server/username /mountpoint cifs vers=1.0,username=username,iocharset=utf8,uid=your_profile_uid_on_the_server 0 0
使用sudo mount /mountpint
看看这是如何进行的,希望这些信息对你有用。
答案2
我想回答我自己的问题(解决了):
我按领域将客户端放入 AD,使用 SSSD 而不使用 winbind。SSSD 不支持 NTLM 身份验证,这就是为什么用户/密码身份验证在 Linux Samba 共享上不起作用,但在 Windows 共享上起作用。使用 Samba 4.8 需要 winbind,因此我结合使用 SSSD + winbind。现在 Samba 共享上的用户/密码身份验证正在运行!
您需要使用以下方式将客户端加入 AD
realm join --user=$USER --user-principal=host/$(hostname -s)@DOMAIN --automatic-id-mapping=no --client-software=sssd --membership-software=samba --computer-name=$(hostname -s) --os-name="$(grep NAME /etc/os-release | head -1 | sed 's/NAME="\(.*\)"/\1/g')" --os-version=$(grep VERSION_ID /etc/os-release | sed 's/VERSION_ID="\(.*\)"/\1/g') DOMAIN
您的 smb.conf 需要 [global] 选项,以便 winbind 使用 sss 作为后端
idmap config DOMAIN : backend = sss
idmap config DOMAIN : range = <min>-<max>