直接或通过 fstab 挂载 CIFS 文件系统

use*_*001 5 authentication mount fstab

我遇到了一个问题,即在没有 fstab 条目的情况下挂载远程 CIFS 服务器有效,但通过 fstab 挂载不行。

以下命令有效:

$ sudo mount -t cifs //w.x.y.z/Home$ /mnt/dir -o domain=A,username=B,password='C',sec=ntlmssp,file_mode=0700,dir_mode=0700
Run Code Online (Sandbox Code Playgroud)

但是,如果我改为将以下行添加到 /etc/fstab 并尝试通过mount命令(例如mount -amount /mnt/dir)进行挂载,则会收到下面列出的错误:

$ tail -n 1 /etc/fstab
//w.x.y.z/Home$ /mnt/dir cifs domain=A,username=B,password='C',sec=ntlmssp,file_mode=0700,dir_mode=0700
Run Code Online (Sandbox Code Playgroud)

错误:

$ sudo mount /mnt/csif
mount error(13): Permission denied
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
Run Code Online (Sandbox Code Playgroud)

将 dump 和 fsck pass order 显式设置为 0 没有帮助。两个命令似乎都在做同样的事情

Tob*_*ght 9

避免将密码直接放入/etc/fstab(通常是世界可读的)是一种很好的做法。相反,将它们放入一个文件中,并像这样引用该文件:

//w.x.y.z/Home$ /mnt/dir cifs credentials=/home/username/cifs.creds,sec=ntlmssp,file_mode=0700,dir_mode=0700
Run Code Online (Sandbox Code Playgroud)

/home/username/cifs.creds由合适的用户(root 或与拥有 SMB 共享的 SMB 用户对应的用户)拥有,并且chmod og-rwx. 它包含格式的凭据

domain=A
username=B
password=C
Run Code Online (Sandbox Code Playgroud)

ABC上面必须是文字-没有壳状报价或反斜杠的解析。


meu*_*euh 7

当您键入 mount 命令时,该部分password='C'首先由 shell 处理,并password=C在它到达 mount 命令之前变为。这不是使用 fstab 条目完成的,因此您必须删除单引号。如果您的密码包含特殊字符,您可以用它们的八进制代码替换它们,尤其\040是空格。