mount.cifs

来源:互联网 发布:激光笔软件 编辑:程序博客网 时间:2024/06/05 18:54
mount.cifs
描述
这个工具是 cifs-utils软件包的一部分。

mount.cifs 用于挂载 CIFS 文件系统。它通常由使用"-t cifs"选项的 mount(8) 命令间接调用。
这个命令只能在支持 CIFS 文件系统的Linux内核上使用。CIFS 协议是 SMB 协议的替代版本,
它被包括 Windows 在内的几乎所有操作系统所以及 NAS(Network Attached Storage)应用和Samba服务器所支持。


mount.cifs 可以将 service 表示的 UNC 名称挂载到本地的 mount-point 挂载点上。
service 使用 //server/share 语法,其中的"server"是主机名或者 IP 地址,而 "share" 是共享名。
mount.cifs 的选项是用逗号分隔的 key=value 列表。
除了下面列出的选项外,还可以使用其他选项,只要 cifs 文件系统内核模块(cifs.ko)支持即可。
不能被 cifs 文件系统内核模块(cifs.ko)识别的选项将会被记录到内核日志中。
mount.cifs 将会引起cifs vfs启动一个名为 cifsd 的进程,并保持运行直到该资源被卸载(通常是通过 umount 工具)。
mount.cifs -V 会显示该程序的版本信息。
modinfo cifs 会显示 cifs 模块的版本信息。
 


选项

username=arg 用户名
指定连接时使用的用户名。如果没有在这里指定,那么将使用环境变量 USER 的值。


password=arg   密码
指定连接时使用的口令。如果没有在这里指定,那么将使用环境变量 PASSWD 的值。
如果没有在命令行参数中给出口令,mount.cifs 将会在挂载时提示用户输入口令。
需要注意的是,如果口令中含有逗号(,),那么将不能在命令行参数中指定,因为会发生解析错误。
不过在环境变量 PASSWD 和 cred 文件(见下文)中可以安全的使用逗号,或者在提示输入口令时也可以安全的输入。


domain=arg
指定user所属的域(工作组)。


credentials=filename   凭据文件
指定一个包含用户名,或密码,或域(工作组)的文件。该文件的格式如下:
username=value
password=value
domain=value
这样做比直接在诸如 /etc/fstab 这样的共享文件中以明文方式写出密码要安全的多。请确保该cred文件的安全。
guest
不提示输入密码,而以来宾身份登录。
uid=arg
设置uid会拥有所有文件与目录,在mount文件系统时对没有提供拥有信息的服务器。uid的佱可以是用户名或数值。
没有指定时,默认为0。mount.cifs helper 必需在1.10以上版本才提供对非数值uid格式的支持。 
具体参考:FILE AND DIRECTORY OWNERSHIP AND PERMISSIONS
forceuid
忽略服务器提供的文件和目录的UID信息,强制使用 uid= 选项设置的值。
更多信息参见下面的“文件和目录的属主及权限”小节。

cruid=arg
设置credentials 凭据缓存的拥有者uid. 主要用于sec=krb5.
默认为执行mount的真实进程uid。设置此参数指示回调寻找此用户拥有的凭据缓存。

gid=arg
如果被挂载的文件系统服务器没有提供文件和目录的GID信息,那么就使用这里的设置。
arg 可以是字符串形式的组名或着是数字形式的gid值。默认值是数字'0'。
更多信息参见下面的“文件和目录的属主及权限”小节。

forcegid
忽略服务器提供的文件和目录的GID信息,强制使用 gid= 选项设置的值。
更多信息参见下面的“文件和目录的属主及权限”小节。


port=num
设置将要连接的 CIFS 服务器端口。
如果 CIFS 服务器并未在该端口监听或者未指定此选项,那么将首先尝试默认的 445 端口,如果没有应答就再尝试 139 端口。


servernetbiosname=arg
指定要连接服务器的netbios name(RFC1001名称)。虽然对于挂载新的服务器很少需要,但是对于挂载一些老的(OS/2, Windows 98  Windows ME)
服务器,当通过139端口连接,不像新的服务器,不需要服务器名。一个服务器名最多15个字符并且 大小字敏感。
servern=name
与servernetbiosname 一样。
netbiosname=name
当挂载服务通过139端口时,指定RFC1001 源名称来代替客户端netbios机器名 在RFC1001 netbios会话初始化阶段。只在连接 Windows 98/ME 服务器(139端口)时才需要这个参数。

file_mode=arg
如果服务器端不支持 CIFS Unix扩展,那么就使用这里设置的值替代默认的文件权限模式。
这里的 nnn 是八进制的权限模式,且前导零不能省略。
dir_mode=arg //0nnn
如果服务器端不支持 CIFS Unix扩展,那么就使用这里设置的值替代默认的目录权限模式。
这里的 nnn 是八进制的权限模式,且前导零不能省略。

ip=arg
指定目标服务器的IP地址。
如果 UNC 名称中已经包含了这个信息(包括从DNS中解析得到),就没必要在这里设置了,所以这个选项很少使用。

domain=arg
设置使用的domain域(工作组)

guest
不用提示输入密码

iocharset
指定默认以什么字符集显示路径名。如果服务器端支持Unicode字符,网络路径名将默认使用Unicode字符。。
例如在"en_US.UTF-8"的情况下应该使用"utf8"。
如果没有指定该选项,将使用客户端内核中的 CONFIG_NLS_DEFAULT 值。
如果服务器端不支持Unicode字符,那么该选项就没有任何意义。
ro
只读挂载
rw
读写挂载


setuids
如果服务器端支持 CIFS Unix扩展,那么客户端将会在新建的文件/目录/设备上为本地进程设置有效UID/GID(effective uid/gid)。
如果服务器端不支持 CIFS Unix扩展,那么客户端对于新建的文件/目录/设备并不使用命令行上指定的默认UID/GID,
而是将新建文件的UID/GID缓存在本地,这就意味着文件的UID/GID在重新加载inode或者重新挂载该文件系统之后可能会发生变化。


nosetuids
不管服务器端是否支持 CIFS Unix扩展,客户端都不会在新建的文件/目录/设备(create, mkdir, mknod)上设置UID/GID。
这将导致服务器端按照默认规则设置文件/目录/设备的UID/GID(通常是连接用户的UID/GID)。
让服务器端(而不是客户端)设置UID/GID是默认行为。
如果服务器端不支持 CIFS Unix扩展,那么新建文件/目录/设备的UID/GID将显示为连接用户的UID/GID或命令行上指定的UID/GID值。


perm
客户端执行权限检查(用 vfs_permission 函数根据 mode 和相应的操作检查 uid/gid )。这个选项是默认开启的。
注意,这是在服务器端根据连接的用户对客户端操作执行一般的 ACL 检查之外,客户端对自身操作进行的权限检查。

noperm
客户端不对自身操作进行任何权限检查。这可能会导致被挂载的服务器端文件系统被本地系统上的其他用户访问。
这个选项仅在服务器端支持 CIFS Unix扩展,但是客户端和服务器端的UID/GID并不匹配,
并且无法通过执行挂载操作的用户身份进行访问控制时才需要。
注意,这个选项并不影响在服务器端根据连接的用户对客户端操作执行一般的 ACL 检查。


dynperm
要求服务器端仅在内存中维护 UID/GID 和权限,而不将它们记录到实际的文件系统上。
这些信息可能会随时丢失(比如从缓存中重新加载inode),
所以虽然这个选项可以让某些程序正常工作,但是其实际行为是不可预测的。
更多信息参见下面的“文件和目录的属主及权限”小节。


cache=
缓存模式。可能的值有:   详细见:CACHE COHERENCY.  
none: 从不缓存文件数据
strict:   严格按照 CIFS/SMB2 协议
loose:  允许缓存丢失 

directio
不对文件的 inode 数据做缓存。这样就不会对文件作内存映射(mmap)。
在某些具有快速网络连接的情况下,客户端可以从此选项中受益,
例如,需要进行超长序列读取的应用程序就不需要再次读取相同的数据,
从而可以比对读写都进行缓冲的默认行为(预读取/后台延迟写入)提供更好的性能。
该选项允许向服务器发送大于页面尺寸的写操作,
而且要求内核的 cifs.ko 模块在编译时开启了 CIFS_EXPERIMENTAL 选项。

该选项在3.7版本后不再推荐使用,可用 cache=none代替。

strictcache
用于在strict 缓存模式转换。 在本模式下,客户端拥有Oplock Level II 锁就从缓存中读,否则从服务器中读。
作为写:客户存数据到缓存在扩展Oplock 锁情况下。否则,直接写服务器。

该选项在3.7版本后不再推荐使用,可用 cache=strict 代替。

rwpidforward
提示打开文件的进程,在对文件进行读或写时。
这会防止应用程序(如 WINE) 读或写失败,如果使用强制brlock 风格

mapchars
将7个保留字符(\:?|*><)中的6个(不包括反斜杠)重新映射到新的字符(高于0xF000)。
这样就允许客户端可以识别 Windows POSIX 模拟层创建的包含这些保留字符的文件名。
该选项还可以用于将文件名中包含保留字符的文件系统挂载到同样禁止使用保留字符的 Samba 服务器。
注意,在使用了此选项挂载的文件系统上创建的文件可能在不使用此选项挂载的情况下无法访问。
该选项对于不支持 Unicode 的服务器没有意义。
nomapchars
不对7个保留字符做任何重新映射。这是默认值。
intr
当前尚未实现
nointr
当前尚未实现(默认值)

hard
当服务器端失去响应后访问其上文件的应用程序将被挂起。
soft
(默认值)当服务器端失去响应后访问其上文件的应用程序将收到一个错误信号而不是被挂起。


noacl
即使服务器端支持,也禁用 POSIX ACL 特性。
CIFS 客户端可以获取和设置 Samba 服务器上的 POSIX ACL(getfacl,setfacl) (samba 3.0.10 及以上),但是可以通过该选项强制关闭。
设置 POSIX ACL 要求客户端内核的 CIFS 模块同时支持 CIFS_XATTR 和 CIFS_POSIX 特性.
POSIX ACL 支持可以被禁止在mount 时通过 指定noacl.


cifsacl
这个选项用于映射 CIFS/NTFS ACLs to/from linux 权限位。映射 SIDs to/from  UIDs 和GIDs, 并获取与设置安全描述符。
详细参考:CIFS/NTFS ACL, SID/UID/GID MAPPING, SECURITY DESCRIPTORS

backupuid=arg
限制用户的备份,需要提供一个用户名或uid,没有默认值。
详细参考:ACCESSING FILES WITH BACKUP INTENT
backupgid=arg
限制用户组的备份,需要提供一个用户名或id,没有默认值。
           See section ACCESSING FILES WITH BACKUP INTENT for more details
nocase
对路径名进行大小写无关的匹配(在服务器端支持的情况下,大小写敏感的匹配是默认值)。
ignorecase
同上


sec={none|krb5|krb5i|ntlm|ntlmi|ntlmv2|ntlmv2i}
选择安全模型:
none 尝试以空用户连接(不提供用户名)
krb5 使用 Kerberos version 5 认证
krb5i 使用 Kerberos version 5 和包签名(packet signing)认证
ntlm 使用 NTLM 口令散列认证
ntlmi 使用 NTLM 签名口令散列和包签名(packet signing)认证
ntlmv2 使用 NTLMv2 口令散列认证
ntlmv2i 使用 NTLMv2 口令散列认证和包签名(packet signing)认证
ntlmssp   使用 NTLMv2 口令散列用原始NTLMSSP消息压缩
ntlmsspi  使用 NTLMv2 口令散列用原始NTLMSSP消息压缩,和包签名(packet signing)认证


在主线内核中,3.8以前默认为sec=ntlm,从3.8开始,默认为sec=ntlmssp
如果服务器需要在协议协商时签名,就可以自动使能。/proc/fs/cifs/SecurityFlags

nobrl
不向服务器发送对 byte range lock 的请求。
对于某些不遵守 cifs 风格的 byte range lock 规范的应用程序来说,这个选项是必须的。
另一方面,目前大多数 cifs 服务器也尚未实现 advisory byte range lock 。


sfu
如果服务器端不支持 CIFS Unix扩展,那么就以兼容SFU(Services for Unix)的格式创建设备文件和管道(FIFO)文件。
也就是通过 SETFILEBITS 属性额外检查文件权限的高 10-12 位(和 SFU 的做法一样)。
而剩余的低 9 位依然可以用于描述权限(ACL)。

serverino
使用服务器提供的inode编号(连续的、文件唯一标识符),而不使用客户端自动生成的临时inode编号。
虽然服务器的inode编号可以很轻易的分辨硬链接文件(它们的inode编号相同)并且保持稳定不变(这对某些程序很有必要),
但是当同时挂载多个服务器端文件系统时,依然可能由于inode编号重叠而导致混乱。
而且,也有少数服务器不支持提供inode编号。如果服务器不能提供inode编号,这个选项就没有任何实际效果。
noserverino
使用客户端自动生成的临时inode编号,即使服务器提供了inode编号。这是默认值。
更多信息参见"INODE编号"小节。


nounix
强制关闭 CIFS Unix扩展。这相当于一次性关闭多个选项,
包括:POSIX ACL, POSIX lock, POSIX path, 服务器端软连接(symlink), 服务器端的 uids/gids/mode 值。
这个选项也可以用于对 CIFS Unix扩展支持有缺陷的服务器。
更多信息请参见"INODE编号"小节。

nouser_xattr
即使服务器端支持,也不允许 getfattr/setfattr 获取和设置 xattr 。这是默认值。


rsize=num
默认网络读取尺寸(通常是 16K)。目前还不能使用比 CIFSMaxBufSize 大的值。
CIFSMaxBufSize 的默认值是 16K 并且可以在加载 cifs.ko 时,
将其设置为从 8K 到最大允许的 kmalloc 尺寸之间的任意值。
将 CIFSMaxBufSize 设为一个很大的值将会导致使用更多的内存,并且有可能在某些情况下降低性能。
使用大于127K(原始cifs协议允许的最大值)的值还需要服务器端的额外支持(比如 Samba 3.0.26 或更高版本)。
num 的最小值是 2048 ,最大值是 130048(127K)与 CIFSMaxBufSize 中的较小者。


wsize=num
默认网络写入尺寸。内核3.0.0以前允许的最大值是57344(14个4K页面)。
3.0.0以后,如果客户端与服务器端协商通过POSIX扩展提供大写,则默认为1M,最大允许为16M。
如果不是,则默认为65536,并且最大为131007.

fsc
使能本地磁盘缓存用于FS-Cache 为CIFS。这可以提高性能在低连接,高负载服务器 ,或读磁盘比读服务器快的网络。
这也减少了可扩展性,服务器的连接数减小。
但是,本地缓存并不适合所有工作负载,如:只读一次。
所以,你要仔细考虚 情况/工作负载。当前,本地磁盘缓存使能对于CIFS 文件以只读方式打开时。

注:本选项需要内核对CONFIG_CIFS_FSCACHE支持。还需要安装cachefilesd守护进程。


multiuser
映射用户访问服务器时去访问独立的凭据文件。默认,CIFS挂载只使用单一的用户凭据文件。

actimeo=
CIFS客户端对文件与目录的属性缓存时间。默认为1s.
noposixpaths
不使用posix风格的路径名
posixpaths
同上
prefixpath
挂载一个共享的子目录是可能的。它可以添加路径到挂载时的UNC。

vers= SMB 协议版本。可能值有:
1.0-- 典型的CIFS/SMBv1 协议。这是默认的。
2.0-- 这个SMBv2.002协议,它被初始引入是在windows vista service pack 1,windows server2008.
注:windows vista 初始版本说了一点方言(2.000),不支持。
2.1-- 这个SMBv2.1协议由windows 7 和windows server 2008r2引入。
3.0-- 这个SMBv3.0协议由windows 8 和windows server 2012 引入。
注:当使用给定的协议时,不是所有的特性在每个版本上都是可用的。


--verbose
在挂载时输出额外的调试信息。注意,该选项必须在 -o 选项之前使用,也就是这样:
mount -t cifs //server/share /mnt --verbose -o user=username

SERVICE 的格式和分割符
通常在 service 中用正斜杠(/)作为分隔符。
由于正斜杠(/)不能用于Windows平台的文件名中,所以可以被看做"全局分割符",并被Linux客户端无条件的转换成反斜杠(\)。
另一方面,由于POSIX标准允许在文件名中使用反斜杠(\),所以不能自动将其转换为正斜杠(/)。
mount.cifs 将会在可以转换而不产生混淆的情况下,自动将反斜杠(\)转换成正斜杠(/)。
但是它不会将共享名(sharename)之后的路径中所包含的反斜杠(\)自动转换成正斜杠(/)。


INODE编号
如果服务器端支持Unix扩展,并且客户端也允许使用Unix扩展,那么将使用服务器实际提供的inode编号响应 POSIX 调用。
如果Unix扩展被nounix禁用(或者服务器端本身就不支持),但同时又开启了"serverino"选项的话,那么将无法获取真正的服务器端inode编号。
此时客户端将把 server-assigned "UniqueID" 映射到一个inode编号。
UniqueID 的值和服务器端inode编号是两个不同的值。
UniqueID 的值在整个服务器范围内是唯一的,其值通常大于232(2的32次方)。
这个值通常会让不支持LFS(Large File Support)的程序触发一个 glibc EOVERFLOW 错误。
因此强烈建议你重新编译此程序,并开启LFS支持(也就是 -D_FILE_OFFSET_BITS=64),以避免这个错误。
当然,你也可以使用"noserverino"选项来客户端确保生成的inode编号小于232(2的32次方)。
但是这样做的缺点是无法正确检测到硬链接。


文件和目录的属主及权限:FILE AND DIRECTORY OWNERSHIP AND PERMISSIONS
核心 CIFS 协议并不提供文件和目录的 unix 属主或权限信息。
正因为如此,文件和目录才会看上去像被 uid= 和 gid= 选项指定的用户和组所拥有,
并且其权限才会看上去和 file_mode 以及 dir_mode 指定的权限一致。
可以通过 chmod/chown 来修改这些值,但是并不会在服务器端产生真正的实际效果。
如果服务器端支持Unix扩展,并且客户端也允许使用Unix扩展,文件和目录的 uid, gid, mode 将由服务器端提供。
因为 CIFS 通常由同一个用户挂载,所以不管是哪个用户访问此文件系统,所使用的 credentials 文件都是同一个。
这样,新创建的文件和目录其属主/属组就都根据同一个 credentials 文件中的连接用户来设置。
如果客户端和服务器端使用的 uid 和 gid 并不匹配,那么 forceuid 和 forcegid 选项就很有用处了。
注意,并没有强制改写 mode 的选项。
当指定了 forceuid 和/或 forcegid 后,文件和目录的权限就可能不能反映真正的权限了。
如果Unix扩展被nounix禁用(或者服务器端本身就不支持),仍然有可能使用"dynperm"选项在服务器上模拟出来。
使用该选项后,新创建的文件和目录将看上去拥有了正确的权限。
不过这些权限并不真正存储在服务器端的文件系统上(仅在内存中),因此可能会随时丢失(比如内核刷新了inode缓存)。
因此,我们不鼓励使用此选项。
还可以使用 noperm 选项在客户端完全越过权限检查。
但是服务器端的权限检查是无法越过的,服务器端将始终根据 credentials 文件中提供的用户信息进行权限检查,
而与客户端实际访问文件系统的用户无关。


环境变量
环境变量 USER 用于指定连接服务器的用户名。该变量也可以使用 username%password 的格式同时给出口令。
环境变量 PASSWD 用于指定连接服务器的用户密码。
环境变量 PASSWD_FILE 用于给出读取密码的文件的路径。其中的第一行将被作为密码读取。


注意
该命令可能只允许 root 使用,除非以 setuid 安装。
在setuid的情况下,默认将开启 noexec 和 nosuid 挂载标记。
当安装为 setuid 程序后,该程序就将遵守 mount 程序对于用户挂载限制的约定。
某些 samba 客户端工具,例如 smbclient(8) ,会根据客户端的配置文件 smb.conf 中的参数决定其行为。
但是 mount.cifs 与他们不同,它完全无视 smb.conf 的内容。
配置
修改和读取 CIFS 配置、读取 CIFS 调试信息的首要途径就是 Linux 的 /proc 文件系统。
/proc/fs/cifs 目录中包含了许多配置和调试信息。
启动选项(例如最大buffer尺寸和buffer个数)只能在内核加载 cifs.ko 模块的时候指定,
它们可以通过"modinfo /path/to/cifs.ko"命令看到。
更多信息参见 Documentation/filesystems/cifs/README 文件。
缺陷
使用 CIFS URL 进行挂载目前尚未实现。
credentials 文件目前尚不能处理带有前导空格的 usernames 和 passwords
0 0
原创粉丝点击