mount.cifs 不能使用 smbclient 使用的相同凭证文件

mount.cifs 不能使用 smbclient 使用的相同凭证文件

我正在尝试将 NetApp CIFS 共享安装到我们的一台服务器,但我不断收到“权限被拒绝”打印到 stderr 并NT_STATUS_WRONG_PASSWORD打印到正在运行的dmesg.

root@xxxehpvld05 ~ $ mount.cifs -vv //zhp-nas.xxx.com/perspectives /mnt/secure/cifs -o credentials=/etc/cifs.creds
mount error(13): Permission denied
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
root@xxxehpvld05 ~ $ dmesg | tail
CIFS VFS: cifs_mount failed w/return code = -13
Status code returned 0xc000006a NT_STATUS_WRONG_PASSWORD
CIFS VFS: Send error in SessSetup = -13
CIFS VFS: cifs_mount failed w/return code = -13
Status code returned 0xc000006a NT_STATUS_WRONG_PASSWORD
CIFS VFS: Send error in SessSetup = -13
CIFS VFS: cifs_mount failed w/return code = -13
Status code returned 0xc000006a NT_STATUS_WRONG_PASSWORD
CIFS VFS: Send error in SessSetup = -13
CIFS VFS: cifs_mount failed w/return code = -13

但是,使用相同的凭据文件,该smbclient命令可以正常工作:

root@xxxehpvld05 ~ $ smbclient -L //zhp-nas.xxx.com/perspectives -A /etc/cifs.creds
Domain=[XXX] OS=[Windows 5.0] Server=[Windows 2000 LAN Manager]

        Sharename       Type      Comment
        ---------       ----      -------
        IPC$            IPC       Remote IPC
        ZHPSubmit-dev   Disk
    [...snip...]

似乎如果一个有效,另一个也应该有效,特别是因为凭据文件还指定了域名。

答案1

没有更多信息,我不能肯定地说,但我在连接到运行旧协议版本的旧 Windows 服务器时看到了这个问题。请记住,CIFS 被视为 SMB 的“方言”(类型)。还有其他类型,并且较旧的设置不使用 CIFS。

基本上就像是说两个人在说话。一种西班牙语和一种英语,你试图强迫说英语的人听懂西班牙语,但他显然听不懂。

SMBclient 使用不同的方言进行安全协商。 (或者至少检测到不同)。

尝试

mount -t cifs //路径/事物/ /mount/point -o 用户名=用户,密码=pass,秒=ntlm

看看会发生什么。 (sec=ntlm是重要部分)

答案2

通过使用命令,我发现了一个可能的原因:

从 smbclient 的手册页:

   -A|--authentication-file=filename
       This option allows you to specify a file from which to read the
       username and password used in the connection. The format of the file is

           username = <value>
           password = <value>
           domain   = <value>

       Make certain that the permissions on the file restrict access from
       unwanted users.

从 mount.cifs 的手册页:

   credentials=filename
       specifies a file that contains a username and/or password and
       optionally the name of the workgroup. The format of the file is:

          username=value
          password=value
          domain=value

然后,我创建了两个凭证文件,一个带有空格,如第一个片段所示,另一个没有空格,并将它们命名为credscreds.spacy

大对决:

creds文件:

mount.cifs -vvv //host/path /local/path -o credentials=/path/creds

良好的沉默,没有错误。

creds.spacy文件:

# mount.cifs -vvv //host/path /local/path -o credentials=/path/creds.spacy
mount error(13): Permission denied
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

显然,您的凭据文件包含空格,mount.cifs 无法理解这些空格。

此外,smbclient如果有空格也没关系。credscreds.spacy没有引起任何抱怨。

答案3

我今天在尝试挂载共享时发现的另一种可能性是支持smbmountusername=DOMAIN\\user域中的用户提供为凭据的语法。

为了使mount.cifs( 和mount -t cifs) 工作,必须单独提供这两个:-o username=user,password=pass,dom=DOMAIN

答案4

正如 user55518 所解释的,即使您没有看到它们,您的凭据文件中也可能有空格。如果您在 Windows 上编辑了凭据文件,则可能会\r在行尾编辑并引发错误 13。

相关内容