| xj | b04a402 | 2021-11-25 15:01:52 +0800 | [diff] [blame] | 1 | This module supports the SMB3 family of advanced network protocols (as well | 
 | 2 | as older dialects, originally called "CIFS" or SMB1). | 
 | 3 |  | 
 | 4 | The CIFS VFS module for Linux supports many advanced network filesystem | 
 | 5 | features such as hierarchical DFS like namespace, hardlinks, locking and more. | 
 | 6 | It was designed to comply with the SNIA CIFS Technical Reference (which  | 
 | 7 | supersedes the 1992 X/Open SMB Standard) as well as to perform best practice  | 
 | 8 | practical interoperability with Windows 2000, Windows XP, Samba and equivalent  | 
 | 9 | servers.  This code was developed in participation with the Protocol Freedom | 
 | 10 | Information Foundation.  CIFS and now SMB3 has now become a defacto | 
 | 11 | standard for interoperating between Macs and Windows and major NAS appliances. | 
 | 12 |  | 
 | 13 | Please see | 
 | 14 |   MS-SMB2 (for detailed SMB2/SMB3/SMB3.1.1 protocol specification) | 
 | 15 |   http://protocolfreedom.org/ and | 
 | 16 |   http://samba.org/samba/PFIF/ | 
 | 17 | for more details. | 
 | 18 |  | 
 | 19 |  | 
 | 20 | For questions or bug reports please contact: | 
 | 21 |     smfrench@gmail.com | 
 | 22 |  | 
 | 23 | See the project page at: https://wiki.samba.org/index.php/LinuxCIFS_utils | 
 | 24 |  | 
 | 25 | Build instructions: | 
 | 26 | ================== | 
 | 27 | For Linux: | 
 | 28 | 1) Download the kernel (e.g. from http://www.kernel.org) | 
 | 29 | and change directory into the top of the kernel directory tree | 
 | 30 | (e.g. /usr/src/linux-2.5.73) | 
 | 31 | 2) make menuconfig (or make xconfig) | 
 | 32 | 3) select cifs from within the network filesystem choices | 
 | 33 | 4) save and exit | 
 | 34 | 5) make | 
 | 35 |  | 
 | 36 |  | 
 | 37 | Installation instructions: | 
 | 38 | ========================= | 
 | 39 | If you have built the CIFS vfs as module (successfully) simply | 
 | 40 | type "make modules_install" (or if you prefer, manually copy the file to | 
 | 41 | the modules directory e.g. /lib/modules/2.4.10-4GB/kernel/fs/cifs/cifs.ko). | 
 | 42 |  | 
 | 43 | If you have built the CIFS vfs into the kernel itself, follow the instructions | 
 | 44 | for your distribution on how to install a new kernel (usually you | 
 | 45 | would simply type "make install"). | 
 | 46 |  | 
 | 47 | If you do not have the utility mount.cifs (in the Samba 4.x source tree and on | 
 | 48 | the CIFS VFS web site) copy it to the same directory in which mount helpers | 
 | 49 | reside (usually /sbin).  Although the helper software is not | 
 | 50 | required, mount.cifs is recommended.  Most distros include a "cifs-utils" | 
 | 51 | package that includes this utility so it is recommended to install this. | 
 | 52 |  | 
 | 53 | Note that running the Winbind pam/nss module (logon service) on all of your | 
 | 54 | Linux clients is useful in mapping Uids and Gids consistently across the | 
 | 55 | domain to the proper network user.  The mount.cifs mount helper can be | 
 | 56 | found at cifs-utils.git on git.samba.org | 
 | 57 |  | 
 | 58 | If cifs is built as a module, then the size and number of network buffers | 
 | 59 | and maximum number of simultaneous requests to one server can be configured. | 
 | 60 | Changing these from their defaults is not recommended. By executing modinfo | 
 | 61 | 	modinfo kernel/fs/cifs/cifs.ko | 
 | 62 | on kernel/fs/cifs/cifs.ko the list of configuration changes that can be made | 
 | 63 | at module initialization time (by running insmod cifs.ko) can be seen. | 
 | 64 |  | 
 | 65 | Recommendations | 
 | 66 | =============== | 
 | 67 | To improve security the SMB2.1 dialect or later (usually will get SMB3) is now | 
 | 68 | the new default. To use old dialects (e.g. to mount Windows XP) use "vers=1.0" | 
 | 69 | on mount (or vers=2.0 for Windows Vista).  Note that the CIFS (vers=1.0) is | 
 | 70 | much older and less secure than the default dialect SMB3 which includes | 
 | 71 | many advanced security features such as downgrade attack detection | 
 | 72 | and encrypted shares and stronger signing and authentication algorithms. | 
 | 73 | There are additional mount options that may be helpful for SMB3 to get | 
 | 74 | improved POSIX behavior (NB: can use vers=3.0 to force only SMB3, never 2.1): | 
 | 75 |      "mfsymlinks" and "cifsacl" and "idsfromsid" | 
 | 76 |  | 
 | 77 | Allowing User Mounts | 
 | 78 | ==================== | 
 | 79 | To permit users to mount and unmount over directories they own is possible | 
 | 80 | with the cifs vfs.  A way to enable such mounting is to mark the mount.cifs | 
 | 81 | utility as suid (e.g. "chmod +s /sbin/mount.cifs). To enable users to  | 
 | 82 | umount shares they mount requires | 
 | 83 | 1) mount.cifs version 1.4 or later | 
 | 84 | 2) an entry for the share in /etc/fstab indicating that a user may | 
 | 85 | unmount it e.g. | 
 | 86 | //server/usersharename  /mnt/username cifs user 0 0 | 
 | 87 |  | 
 | 88 | Note that when the mount.cifs utility is run suid (allowing user mounts),  | 
 | 89 | in order to reduce risks, the "nosuid" mount flag is passed in on mount to | 
 | 90 | disallow execution of an suid program mounted on the remote target. | 
 | 91 | When mount is executed as root, nosuid is not passed in by default, | 
 | 92 | and execution of suid programs on the remote target would be enabled | 
 | 93 | by default. This can be changed, as with nfs and other filesystems,  | 
 | 94 | by simply specifying "nosuid" among the mount options. For user mounts  | 
 | 95 | though to be able to pass the suid flag to mount requires rebuilding  | 
 | 96 | mount.cifs with the following flag: CIFS_ALLOW_USR_SUID | 
 | 97 |  | 
 | 98 | There is a corresponding manual page for cifs mounting in the Samba 3.0 and | 
 | 99 | later source tree in docs/manpages/mount.cifs.8  | 
 | 100 |  | 
 | 101 | Allowing User Unmounts | 
 | 102 | ====================== | 
 | 103 | To permit users to ummount directories that they have user mounted (see above), | 
 | 104 | the utility umount.cifs may be used.  It may be invoked directly, or if  | 
 | 105 | umount.cifs is placed in /sbin, umount can invoke the cifs umount helper | 
 | 106 | (at least for most versions of the umount utility) for umount of cifs | 
 | 107 | mounts, unless umount is invoked with -i (which will avoid invoking a umount | 
 | 108 | helper). As with mount.cifs, to enable user unmounts umount.cifs must be marked | 
 | 109 | as suid (e.g. "chmod +s /sbin/umount.cifs") or equivalent (some distributions | 
 | 110 | allow adding entries to a file to the /etc/permissions file to achieve the | 
 | 111 | equivalent suid effect).  For this utility to succeed the target path | 
 | 112 | must be a cifs mount, and the uid of the current user must match the uid | 
 | 113 | of the user who mounted the resource. | 
 | 114 |  | 
 | 115 | Also note that the customary way of allowing user mounts and unmounts is  | 
 | 116 | (instead of using mount.cifs and unmount.cifs as suid) to add a line | 
 | 117 | to the file /etc/fstab for each //server/share you wish to mount, but | 
 | 118 | this can become unwieldy when potential mount targets include many | 
 | 119 | or  unpredictable UNC names. | 
 | 120 |  | 
 | 121 | Samba Considerations  | 
 | 122 | ==================== | 
 | 123 | Most current servers support SMB2.1 and SMB3 which are more secure, | 
 | 124 | but there are useful protocol extensions for the older less secure CIFS | 
 | 125 | dialect, so to get the maximum benefit if mounting using the older dialect | 
 | 126 | (CIFS/SMB1), we recommend using a server that supports the SNIA CIFS | 
 | 127 | Unix Extensions standard (e.g. almost any  version of Samba ie version | 
 | 128 | 2.2.5 or later) but the CIFS vfs works fine with a wide variety of CIFS servers. | 
 | 129 | Note that uid, gid and file permissions will display default values if you do  | 
 | 130 | not have a server that supports the Unix extensions for CIFS (such as Samba  | 
 | 131 | 2.2.5 or later).  To enable the Unix CIFS Extensions in the Samba server, add  | 
 | 132 | the line:  | 
 | 133 |  | 
 | 134 | 	unix extensions = yes | 
 | 135 | 	 | 
 | 136 | to your smb.conf file on the server.  Note that the following smb.conf settings  | 
 | 137 | are also useful (on the Samba server) when the majority of clients are Unix or  | 
 | 138 | Linux:  | 
 | 139 |  | 
 | 140 | 	case sensitive = yes | 
 | 141 | 	delete readonly = yes  | 
 | 142 | 	ea support = yes | 
 | 143 |  | 
 | 144 | Note that server ea support is required for supporting xattrs from the Linux | 
 | 145 | cifs client, and that EA support is present in later versions of Samba (e.g.  | 
 | 146 | 3.0.6 and later (also EA support works in all versions of Windows, at least to | 
 | 147 | shares on NTFS filesystems).  Extended Attribute (xattr) support is an optional | 
 | 148 | feature of most Linux filesystems which may require enabling via | 
 | 149 | make menuconfig. Client support for extended attributes (user xattr) can be | 
 | 150 | disabled on a per-mount basis by specifying "nouser_xattr" on mount. | 
 | 151 |  | 
 | 152 | The CIFS client can get and set POSIX ACLs (getfacl, setfacl) to Samba servers | 
 | 153 | version 3.10 and later.  Setting POSIX ACLs requires enabling both XATTR and  | 
 | 154 | then POSIX support in the CIFS configuration options when building the cifs | 
 | 155 | module.  POSIX ACL support can be disabled on a per mount basic by specifying | 
 | 156 | "noacl" on mount. | 
 | 157 |   | 
 | 158 | Some administrators may want to change Samba's smb.conf "map archive" and  | 
 | 159 | "create mask" parameters from the default.  Unless the create mask is changed | 
 | 160 | newly created files can end up with an unnecessarily restrictive default mode, | 
 | 161 | which may not be what you want, although if the CIFS Unix extensions are | 
 | 162 | enabled on the server and client, subsequent setattr calls (e.g. chmod) can | 
 | 163 | fix the mode.  Note that creating special devices (mknod) remotely  | 
 | 164 | may require specifying a mkdev function to Samba if you are not using  | 
 | 165 | Samba 3.0.6 or later.  For more information on these see the manual pages | 
 | 166 | ("man smb.conf") on the Samba server system.  Note that the cifs vfs, | 
 | 167 | unlike the smbfs vfs, does not read the smb.conf on the client system  | 
 | 168 | (the few optional settings are passed in on mount via -o parameters instead).   | 
 | 169 | Note that Samba 2.2.7 or later includes a fix that allows the CIFS VFS to delete | 
 | 170 | open files (required for strict POSIX compliance).  Windows Servers already  | 
 | 171 | supported this feature. Samba server does not allow symlinks that refer to files | 
 | 172 | outside of the share, so in Samba versions prior to 3.0.6, most symlinks to | 
 | 173 | files with absolute paths (ie beginning with slash) such as: | 
 | 174 | 	 ln -s /mnt/foo bar | 
 | 175 | would be forbidden. Samba 3.0.6 server or later includes the ability to create  | 
 | 176 | such symlinks safely by converting unsafe symlinks (ie symlinks to server  | 
 | 177 | files that are outside of the share) to a samba specific format on the server | 
 | 178 | that is ignored by local server applications and non-cifs clients and that will | 
 | 179 | not be traversed by the Samba server).  This is opaque to the Linux client | 
 | 180 | application using the cifs vfs. Absolute symlinks will work to Samba 3.0.5 or | 
 | 181 | later, but only for remote clients using the CIFS Unix extensions, and will | 
 | 182 | be invisbile to Windows clients and typically will not affect local | 
 | 183 | applications running on the same server as Samba.   | 
 | 184 |  | 
 | 185 | Use instructions: | 
 | 186 | ================ | 
 | 187 | Once the CIFS VFS support is built into the kernel or installed as a module  | 
 | 188 | (cifs.ko), you can use mount syntax like the following to access Samba or | 
 | 189 | Mac or Windows servers: | 
 | 190 |  | 
 | 191 |   mount -t cifs //9.53.216.11/e$ /mnt -o username=myname,password=mypassword | 
 | 192 |  | 
 | 193 | Before -o the option -v may be specified to make the mount.cifs | 
 | 194 | mount helper display the mount steps more verbosely.   | 
 | 195 | After -o the following commonly used cifs vfs specific options | 
 | 196 | are supported: | 
 | 197 |  | 
 | 198 |   username=<username> | 
 | 199 |   password=<password> | 
 | 200 |   domain=<domain name> | 
 | 201 |    | 
 | 202 | Other cifs mount options are described below.  Use of TCP names (in addition to | 
 | 203 | ip addresses) is available if the mount helper (mount.cifs) is installed. If | 
 | 204 | you do not trust the server to which are mounted, or if you do not have | 
 | 205 | cifs signing enabled (and the physical network is insecure), consider use | 
 | 206 | of the standard mount options "noexec" and "nosuid" to reduce the risk of  | 
 | 207 | running an altered binary on your local system (downloaded from a hostile server | 
 | 208 | or altered by a hostile router). | 
 | 209 |  | 
 | 210 | Although mounting using format corresponding to the CIFS URL specification is | 
 | 211 | not possible in mount.cifs yet, it is possible to use an alternate format | 
 | 212 | for the server and sharename (which is somewhat similar to NFS style mount | 
 | 213 | syntax) instead of the more widely used UNC format (i.e. \\server\share): | 
 | 214 |   mount -t cifs tcp_name_of_server:share_name /mnt -o user=myname,pass=mypasswd | 
 | 215 |  | 
 | 216 | When using the mount helper mount.cifs, passwords may be specified via alternate | 
 | 217 | mechanisms, instead of specifying it after -o using the normal "pass=" syntax | 
 | 218 | on the command line: | 
 | 219 | 1) By including it in a credential file. Specify credentials=filename as one | 
 | 220 | of the mount options. Credential files contain two lines | 
 | 221 |         username=someuser | 
 | 222 |         password=your_password | 
 | 223 | 2) By specifying the password in the PASSWD environment variable (similarly | 
 | 224 | the user name can be taken from the USER environment variable). | 
 | 225 | 3) By specifying the password in a file by name via PASSWD_FILE | 
 | 226 | 4) By specifying the password in a file by file descriptor via PASSWD_FD | 
 | 227 |  | 
 | 228 | If no password is provided, mount.cifs will prompt for password entry | 
 | 229 |  | 
 | 230 | Restrictions | 
 | 231 | ============ | 
 | 232 | Servers must support either "pure-TCP" (port 445 TCP/IP CIFS connections) or RFC  | 
 | 233 | 1001/1002 support for "Netbios-Over-TCP/IP." This is not likely to be a  | 
 | 234 | problem as most servers support this. | 
 | 235 |  | 
 | 236 | Valid filenames differ between Windows and Linux.  Windows typically restricts | 
 | 237 | filenames which contain certain reserved characters (e.g.the character :  | 
 | 238 | which is used to delimit the beginning of a stream name by Windows), while | 
 | 239 | Linux allows a slightly wider set of valid characters in filenames. Windows | 
 | 240 | servers can remap such characters when an explicit mapping is specified in | 
 | 241 | the Server's registry.  Samba starting with version 3.10 will allow such  | 
 | 242 | filenames (ie those which contain valid Linux characters, which normally | 
 | 243 | would be forbidden for Windows/CIFS semantics) as long as the server is | 
 | 244 | configured for Unix Extensions (and the client has not disabled | 
 | 245 | /proc/fs/cifs/LinuxExtensionsEnabled). In addition the mount option | 
 | 246 | "mapposix" can be used on CIFS (vers=1.0) to force the mapping of | 
 | 247 | illegal Windows/NTFS/SMB characters to a remap range (this mount parm | 
 | 248 | is the default for SMB3). This remap ("mapposix") range is also | 
 | 249 | compatible with Mac (and "Services for Mac" on some older Windows). | 
 | 250 |  | 
 | 251 | CIFS VFS Mount Options | 
 | 252 | ====================== | 
 | 253 | A partial list of the supported mount options follows: | 
 | 254 |   username	The user name to use when trying to establish | 
 | 255 | 		the CIFS session. | 
 | 256 |   password	The user password.  If the mount helper is | 
 | 257 | 		installed, the user will be prompted for password | 
 | 258 | 		if not supplied. | 
 | 259 |   ip		The ip address of the target server | 
 | 260 |   unc		The target server Universal Network Name (export) to  | 
 | 261 | 		mount.	 | 
 | 262 |   domain	Set the SMB/CIFS workgroup name prepended to the | 
 | 263 | 		username during CIFS session establishment | 
 | 264 |   forceuid	Set the default uid for inodes to the uid | 
 | 265 | 		passed in on mount. For mounts to servers | 
 | 266 | 		which do support the CIFS Unix extensions, such as a | 
 | 267 | 		properly configured Samba server, the server provides | 
 | 268 | 		the uid, gid and mode so this parameter should not be | 
 | 269 | 		specified unless the server and clients uid and gid | 
 | 270 | 		numbering differ.  If the server and client are in the | 
 | 271 | 		same domain (e.g. running winbind or nss_ldap) and | 
 | 272 | 		the server supports the Unix Extensions then the uid | 
 | 273 | 		and gid can be retrieved from the server (and uid | 
 | 274 | 		and gid would not have to be specified on the mount. | 
 | 275 | 		For servers which do not support the CIFS Unix | 
 | 276 | 		extensions, the default uid (and gid) returned on lookup | 
 | 277 | 		of existing files will be the uid (gid) of the person | 
 | 278 | 		who executed the mount (root, except when mount.cifs | 
 | 279 | 		is configured setuid for user mounts) unless the "uid="  | 
 | 280 | 		(gid) mount option is specified. Also note that permission | 
 | 281 | 		checks (authorization checks) on accesses to a file occur | 
 | 282 | 		at the server, but there are cases in which an administrator | 
 | 283 | 		may want to restrict at the client as well.  For those | 
 | 284 | 		servers which do not report a uid/gid owner | 
 | 285 | 		(such as Windows), permissions can also be checked at the | 
 | 286 | 		client, and a crude form of client side permission checking  | 
 | 287 | 		can be enabled by specifying file_mode and dir_mode on  | 
 | 288 | 		the client.  (default) | 
 | 289 |   forcegid	(similar to above but for the groupid instead of uid) (default) | 
 | 290 |   noforceuid	Fill in file owner information (uid) by requesting it from | 
 | 291 | 		the server if possible. With this option, the value given in | 
 | 292 | 		the uid= option (on mount) will only be used if the server | 
 | 293 | 		can not support returning uids on inodes. | 
 | 294 |   noforcegid	(similar to above but for the group owner, gid, instead of uid) | 
 | 295 |   uid		Set the default uid for inodes, and indicate to the | 
 | 296 | 		cifs kernel driver which local user mounted. If the server | 
 | 297 | 		supports the unix extensions the default uid is | 
 | 298 | 		not used to fill in the owner fields of inodes (files) | 
 | 299 | 		unless the "forceuid" parameter is specified. | 
 | 300 |   gid		Set the default gid for inodes (similar to above). | 
 | 301 |   file_mode     If CIFS Unix extensions are not supported by the server | 
 | 302 | 		this overrides the default mode for file inodes. | 
 | 303 |   fsc		Enable local disk caching using FS-Cache (off by default). This | 
 | 304 |   		option could be useful to improve performance on a slow link, | 
 | 305 | 		heavily loaded server and/or network where reading from the | 
 | 306 | 		disk is faster than reading from the server (over the network). | 
 | 307 | 		This could also impact scalability positively as the | 
 | 308 | 		number of calls to the server are reduced. However, local | 
 | 309 | 		caching is not suitable for all workloads for e.g. read-once | 
 | 310 | 		type workloads. So, you need to consider carefully your | 
 | 311 | 		workload/scenario before using this option. Currently, local | 
 | 312 | 		disk caching is functional for CIFS files opened as read-only. | 
 | 313 |   dir_mode      If CIFS Unix extensions are not supported by the server  | 
 | 314 | 		this overrides the default mode for directory inodes. | 
 | 315 |   port		attempt to contact the server on this tcp port, before | 
 | 316 | 		trying the usual ports (port 445, then 139). | 
 | 317 |   iocharset     Codepage used to convert local path names to and from | 
 | 318 | 		Unicode. Unicode is used by default for network path | 
 | 319 | 		names if the server supports it.  If iocharset is | 
 | 320 | 		not specified then the nls_default specified | 
 | 321 | 		during the local client kernel build will be used. | 
 | 322 | 		If server does not support Unicode, this parameter is | 
 | 323 | 		unused. | 
 | 324 |   rsize		default read size (usually 16K). The client currently | 
 | 325 | 		can not use rsize larger than CIFSMaxBufSize. CIFSMaxBufSize | 
 | 326 | 		defaults to 16K and may be changed (from 8K to the maximum | 
 | 327 | 		kmalloc size allowed by your kernel) at module install time | 
 | 328 | 		for cifs.ko. Setting CIFSMaxBufSize to a very large value | 
 | 329 | 		will cause cifs to use more memory and may reduce performance | 
 | 330 | 		in some cases.  To use rsize greater than 127K (the original | 
 | 331 | 		cifs protocol maximum) also requires that the server support | 
 | 332 | 		a new Unix Capability flag (for very large read) which some | 
 | 333 | 		newer servers (e.g. Samba 3.0.26 or later) do. rsize can be | 
 | 334 | 		set from a minimum of 2048 to a maximum of 130048 (127K or | 
 | 335 | 		CIFSMaxBufSize, whichever is smaller) | 
 | 336 |   wsize		default write size (default 57344) | 
 | 337 | 		maximum wsize currently allowed by CIFS is 57344 (fourteen | 
 | 338 | 		4096 byte pages) | 
 | 339 |   actimeo=n	attribute cache timeout in seconds (default 1 second). | 
 | 340 | 		After this timeout, the cifs client requests fresh attribute | 
 | 341 | 		information from the server. This option allows to tune the | 
 | 342 | 		attribute cache timeout to suit the workload needs. Shorter | 
 | 343 | 		timeouts mean better the cache coherency, but increased number | 
 | 344 | 		of calls to the server. Longer timeouts mean reduced number | 
 | 345 | 		of calls to the server at the expense of less stricter cache | 
 | 346 | 		coherency checks (i.e. incorrect attribute cache for a short | 
 | 347 | 		period of time). | 
 | 348 |   rw		mount the network share read-write (note that the | 
 | 349 | 		server may still consider the share read-only) | 
 | 350 |   ro		mount network share read-only | 
 | 351 |   version	used to distinguish different versions of the | 
 | 352 | 		mount helper utility (not typically needed) | 
 | 353 |   sep		if first mount option (after the -o), overrides | 
 | 354 | 		the comma as the separator between the mount | 
 | 355 | 		parms. e.g. | 
 | 356 | 			-o user=myname,password=mypassword,domain=mydom | 
 | 357 | 		could be passed instead with period as the separator by | 
 | 358 | 			-o sep=.user=myname.password=mypassword.domain=mydom | 
 | 359 | 		this might be useful when comma is contained within username | 
 | 360 | 		or password or domain. This option is less important | 
 | 361 | 		when the cifs mount helper cifs.mount (version 1.1 or later) | 
 | 362 | 		is used. | 
 | 363 |   nosuid        Do not allow remote executables with the suid bit  | 
 | 364 | 		program to be executed.  This is only meaningful for mounts | 
 | 365 | 		to servers such as Samba which support the CIFS Unix Extensions. | 
 | 366 | 		If you do not trust the servers in your network (your mount | 
 | 367 | 		targets) it is recommended that you specify this option for | 
 | 368 | 		greater security. | 
 | 369 |   exec		Permit execution of binaries on the mount. | 
 | 370 |   noexec	Do not permit execution of binaries on the mount. | 
 | 371 |   dev		Recognize block devices on the remote mount. | 
 | 372 |   nodev		Do not recognize devices on the remote mount. | 
 | 373 |   suid          Allow remote files on this mountpoint with suid enabled to  | 
 | 374 | 		be executed (default for mounts when executed as root, | 
 | 375 | 		nosuid is default for user mounts). | 
 | 376 |   credentials   Although ignored by the cifs kernel component, it is used by  | 
 | 377 | 		the mount helper, mount.cifs. When mount.cifs is installed it | 
 | 378 | 		opens and reads the credential file specified in order   | 
 | 379 | 		to obtain the userid and password arguments which are passed to | 
 | 380 | 		the cifs vfs. | 
 | 381 |   guest         Although ignored by the kernel component, the mount.cifs | 
 | 382 | 		mount helper will not prompt the user for a password | 
 | 383 | 		if guest is specified on the mount options.  If no | 
 | 384 | 		password is specified a null password will be used. | 
 | 385 |   perm          Client does permission checks (vfs_permission check of uid | 
 | 386 | 		and gid of the file against the mode and desired operation), | 
 | 387 | 		Note that this is in addition to the normal ACL check on the | 
 | 388 | 		target machine done by the server software.  | 
 | 389 | 		Client permission checking is enabled by default. | 
 | 390 |   noperm        Client does not do permission checks.  This can expose | 
 | 391 | 		files on this mount to access by other users on the local | 
 | 392 | 		client system. It is typically only needed when the server | 
 | 393 | 		supports the CIFS Unix Extensions but the UIDs/GIDs on the | 
 | 394 | 		client and server system do not match closely enough to allow | 
 | 395 | 		access by the user doing the mount, but it may be useful with | 
 | 396 | 		non CIFS Unix Extension mounts for cases in which the default | 
 | 397 | 		mode is specified on the mount but is not to be enforced on the | 
 | 398 | 		client (e.g. perhaps when MultiUserMount is enabled) | 
 | 399 | 		Note that this does not affect the normal ACL check on the | 
 | 400 | 		target machine done by the server software (of the server | 
 | 401 | 		ACL against the user name provided at mount time). | 
 | 402 |   serverino	Use server's inode numbers instead of generating automatically | 
 | 403 | 		incrementing inode numbers on the client.  Although this will | 
 | 404 | 		make it easier to spot hardlinked files (as they will have | 
 | 405 | 		the same inode numbers) and inode numbers may be persistent, | 
 | 406 | 		note that the server does not guarantee that the inode numbers | 
 | 407 | 		are unique if multiple server side mounts are exported under a | 
 | 408 | 		single share (since inode numbers on the servers might not | 
 | 409 | 		be unique if multiple filesystems are mounted under the same | 
 | 410 | 		shared higher level directory).  Note that some older | 
 | 411 | 		(e.g. pre-Windows 2000) do not support returning UniqueIDs | 
 | 412 | 		or the CIFS Unix Extensions equivalent and for those | 
 | 413 | 		this mount option will have no effect.  Exporting cifs mounts | 
 | 414 | 		under nfsd requires this mount option on the cifs mount. | 
 | 415 | 		This is now the default if server supports the  | 
 | 416 | 		required network operation. | 
 | 417 |   noserverino   Client generates inode numbers (rather than using the actual one | 
 | 418 | 		from the server). These inode numbers will vary after | 
 | 419 | 		unmount or reboot which can confuse some applications, | 
 | 420 | 		but not all server filesystems support unique inode | 
 | 421 | 		numbers. | 
 | 422 |   setuids       If the CIFS Unix extensions are negotiated with the server | 
 | 423 | 		the client will attempt to set the effective uid and gid of | 
 | 424 | 		the local process on newly created files, directories, and | 
 | 425 | 		devices (create, mkdir, mknod).  If the CIFS Unix Extensions | 
 | 426 | 		are not negotiated, for newly created files and directories | 
 | 427 | 		instead of using the default uid and gid specified on | 
 | 428 | 		the mount, cache the new file's uid and gid locally which means | 
 | 429 | 		that the uid for the file can change when the inode is | 
 | 430 | 	        reloaded (or the user remounts the share). | 
 | 431 |   nosetuids     The client will not attempt to set the uid and gid on | 
 | 432 | 		on newly created files, directories, and devices (create,  | 
 | 433 | 		mkdir, mknod) which will result in the server setting the | 
 | 434 | 		uid and gid to the default (usually the server uid of the | 
 | 435 | 		user who mounted the share).  Letting the server (rather than | 
 | 436 | 		the client) set the uid and gid is the default. If the CIFS | 
 | 437 | 		Unix Extensions are not negotiated then the uid and gid for | 
 | 438 | 		new files will appear to be the uid (gid) of the mounter or the | 
 | 439 | 		uid (gid) parameter specified on the mount. | 
 | 440 |   netbiosname   When mounting to servers via port 139, specifies the RFC1001 | 
 | 441 | 		source name to use to represent the client netbios machine  | 
 | 442 | 		name when doing the RFC1001 netbios session initialize. | 
 | 443 |   direct        Do not do inode data caching on files opened on this mount. | 
 | 444 | 		This precludes mmapping files on this mount. In some cases | 
 | 445 | 		with fast networks and little or no caching benefits on the | 
 | 446 | 		client (e.g. when the application is doing large sequential | 
 | 447 | 		reads bigger than page size without rereading the same data)  | 
 | 448 | 		this can provide better performance than the default | 
 | 449 | 		behavior which caches reads (readahead) and writes  | 
 | 450 | 		(writebehind) through the local Linux client pagecache  | 
 | 451 | 		if oplock (caching token) is granted and held. Note that | 
 | 452 | 		direct allows write operations larger than page size | 
 | 453 | 		to be sent to the server. | 
 | 454 |   strictcache   Use for switching on strict cache mode. In this mode the | 
 | 455 | 		client read from the cache all the time it has Oplock Level II, | 
 | 456 | 		otherwise - read from the server. All written data are stored | 
 | 457 | 		in the cache, but if the client doesn't have Exclusive Oplock, | 
 | 458 | 		it writes the data to the server. | 
 | 459 |   rwpidforward  Forward pid of a process who opened a file to any read or write | 
 | 460 | 		operation on that file. This prevent applications like WINE | 
 | 461 | 		from failing on read and write if we use mandatory brlock style. | 
 | 462 |   acl   	Allow setfacl and getfacl to manage posix ACLs if server | 
 | 463 | 		supports them.  (default) | 
 | 464 |   noacl 	Do not allow setfacl and getfacl calls on this mount | 
 | 465 |   user_xattr    Allow getting and setting user xattrs (those attributes whose | 
 | 466 | 		name begins with "user." or "os2.") as OS/2 EAs (extended | 
 | 467 | 		attributes) to the server.  This allows support of the | 
 | 468 | 		setfattr and getfattr utilities. (default) | 
 | 469 |   nouser_xattr  Do not allow getfattr/setfattr to get/set/list xattrs  | 
 | 470 |   mapchars      Translate six of the seven reserved characters (not backslash) | 
 | 471 | 			*?<>|: | 
 | 472 | 		to the remap range (above 0xF000), which also | 
 | 473 | 		allows the CIFS client to recognize files created with | 
 | 474 | 		such characters by Windows's POSIX emulation. This can | 
 | 475 | 		also be useful when mounting to most versions of Samba | 
 | 476 | 		(which also forbids creating and opening files | 
 | 477 | 		whose names contain any of these seven characters). | 
 | 478 | 		This has no effect if the server does not support | 
 | 479 | 		Unicode on the wire. | 
 | 480 |  nomapchars     Do not translate any of these seven characters (default). | 
 | 481 |  nocase         Request case insensitive path name matching (case | 
 | 482 | 		sensitive is the default if the server supports it). | 
 | 483 | 		(mount option "ignorecase" is identical to "nocase") | 
 | 484 |  posixpaths     If CIFS Unix extensions are supported, attempt to | 
 | 485 | 		negotiate posix path name support which allows certain | 
 | 486 | 		characters forbidden in typical CIFS filenames, without | 
 | 487 | 		requiring remapping. (default) | 
 | 488 |  noposixpaths   If CIFS Unix extensions are supported, do not request | 
 | 489 | 		posix path name support (this may cause servers to | 
 | 490 | 		reject creatingfile with certain reserved characters). | 
 | 491 |  nounix         Disable the CIFS Unix Extensions for this mount (tree | 
 | 492 | 		connection). This is rarely needed, but it may be useful | 
 | 493 | 		in order to turn off multiple settings all at once (ie | 
 | 494 | 		posix acls, posix locks, posix paths, symlink support | 
 | 495 | 		and retrieving uids/gids/mode from the server) or to | 
 | 496 | 		work around a bug in server which implement the Unix | 
 | 497 | 		Extensions. | 
 | 498 |  nobrl          Do not send byte range lock requests to the server. | 
 | 499 | 		This is necessary for certain applications that break | 
 | 500 | 		with cifs style mandatory byte range locks (and most | 
 | 501 | 		cifs servers do not yet support requesting advisory | 
 | 502 | 		byte range locks). | 
 | 503 |  forcemandatorylock Even if the server supports posix (advisory) byte range | 
 | 504 | 		locking, send only mandatory lock requests.  For some | 
 | 505 | 		(presumably rare) applications, originally coded for | 
 | 506 | 		DOS/Windows, which require Windows style mandatory byte range | 
 | 507 | 		locking, they may be able to take advantage of this option, | 
 | 508 | 		forcing the cifs client to only send mandatory locks | 
 | 509 | 		even if the cifs server would support posix advisory locks. | 
 | 510 | 		"forcemand" is accepted as a shorter form of this mount | 
 | 511 | 		option. | 
 | 512 |  nostrictsync   If this mount option is set, when an application does an | 
 | 513 | 		fsync call then the cifs client does not send an SMB Flush | 
 | 514 | 		to the server (to force the server to write all dirty data | 
 | 515 | 		for this file immediately to disk), although cifs still sends | 
 | 516 | 		all dirty (cached) file data to the server and waits for the | 
 | 517 | 		server to respond to the write.  Since SMB Flush can be | 
 | 518 | 		very slow, and some servers may be reliable enough (to risk | 
 | 519 | 		delaying slightly flushing the data to disk on the server), | 
 | 520 | 		turning on this option may be useful to improve performance for | 
 | 521 | 		applications that fsync too much, at a small risk of server | 
 | 522 | 		crash.  If this mount option is not set, by default cifs will | 
 | 523 | 		send an SMB flush request (and wait for a response) on every | 
 | 524 | 		fsync call. | 
 | 525 |  nodfs          Disable DFS (global name space support) even if the | 
 | 526 | 		server claims to support it.  This can help work around | 
 | 527 | 		a problem with parsing of DFS paths with Samba server | 
 | 528 | 		versions 3.0.24 and 3.0.25. | 
 | 529 |  remount        remount the share (often used to change from ro to rw mounts | 
 | 530 | 	        or vice versa) | 
 | 531 |  cifsacl        Report mode bits (e.g. on stat) based on the Windows ACL for | 
 | 532 | 	        the file. (EXPERIMENTAL) | 
 | 533 |  servern        Specify the server 's netbios name (RFC1001 name) to use | 
 | 534 | 		when attempting to setup a session to the server.  | 
 | 535 | 		This is needed for mounting to some older servers (such | 
 | 536 | 		as OS/2 or Windows 98 and Windows ME) since they do not | 
 | 537 | 		support a default server name.  A server name can be up | 
 | 538 | 		to 15 characters long and is usually uppercased. | 
 | 539 |  sfu            When the CIFS Unix Extensions are not negotiated, attempt to | 
 | 540 | 		create device files and fifos in a format compatible with | 
 | 541 | 		Services for Unix (SFU).  In addition retrieve bits 10-12 | 
 | 542 | 		of the mode via the SETFILEBITS extended attribute (as | 
 | 543 | 		SFU does).  In the future the bottom 9 bits of the | 
 | 544 | 		mode also will be emulated using queries of the security | 
 | 545 | 		descriptor (ACL). | 
 | 546 |  mfsymlinks     Enable support for Minshall+French symlinks | 
 | 547 | 		(see http://wiki.samba.org/index.php/UNIX_Extensions#Minshall.2BFrench_symlinks) | 
 | 548 | 		This option is ignored when specified together with the | 
 | 549 | 		'sfu' option. Minshall+French symlinks are used even if | 
 | 550 | 		the server supports the CIFS Unix Extensions. | 
 | 551 |  sign           Must use packet signing (helps avoid unwanted data modification | 
 | 552 | 		by intermediate systems in the route).  Note that signing | 
 | 553 | 		does not work with lanman or plaintext authentication. | 
 | 554 |  seal           Must seal (encrypt) all data on this mounted share before | 
 | 555 | 		sending on the network.  Requires support for Unix Extensions. | 
 | 556 | 		Note that this differs from the sign mount option in that it | 
 | 557 | 		causes encryption of data sent over this mounted share but other | 
 | 558 | 		shares mounted to the same server are unaffected. | 
 | 559 |  locallease     This option is rarely needed. Fcntl F_SETLEASE is | 
 | 560 | 		used by some applications such as Samba and NFSv4 server to | 
 | 561 | 		check to see whether a file is cacheable.  CIFS has no way | 
 | 562 | 		to explicitly request a lease, but can check whether a file | 
 | 563 | 		is cacheable (oplocked).  Unfortunately, even if a file | 
 | 564 | 		is not oplocked, it could still be cacheable (ie cifs client | 
 | 565 | 		could grant fcntl leases if no other local processes are using | 
 | 566 | 		the file) for cases for example such as when the server does not | 
 | 567 | 		support oplocks and the user is sure that the only updates to | 
 | 568 | 		the file will be from this client. Specifying this mount option | 
 | 569 | 		will allow the cifs client to check for leases (only) locally | 
 | 570 | 		for files which are not oplocked instead of denying leases | 
 | 571 | 		in that case. (EXPERIMENTAL) | 
 | 572 |  sec            Security mode.  Allowed values are: | 
 | 573 | 			none	attempt to connection as a null user (no name) | 
 | 574 | 			krb5    Use Kerberos version 5 authentication | 
 | 575 | 			krb5i   Use Kerberos authentication and packet signing | 
 | 576 | 			ntlm    Use NTLM password hashing (default) | 
 | 577 | 			ntlmi   Use NTLM password hashing with signing (if | 
 | 578 | 				/proc/fs/cifs/PacketSigningEnabled on or if | 
 | 579 | 				server requires signing also can be the default)  | 
 | 580 | 			ntlmv2  Use NTLMv2 password hashing       | 
 | 581 | 			ntlmv2i Use NTLMv2 password hashing with packet signing | 
 | 582 | 			lanman  (if configured in kernel config) use older | 
 | 583 | 				lanman hash | 
 | 584 | hard		Retry file operations if server is not responding | 
 | 585 | soft		Limit retries to unresponsive servers (usually only | 
 | 586 | 		one retry) before returning an error.  (default) | 
 | 587 |  | 
 | 588 | The mount.cifs mount helper also accepts a few mount options before -o | 
 | 589 | including: | 
 | 590 |  | 
 | 591 | 	-S      take password from stdin (equivalent to setting the environment | 
 | 592 | 		variable "PASSWD_FD=0" | 
 | 593 | 	-V      print mount.cifs version | 
 | 594 | 	-?      display simple usage information | 
 | 595 |  | 
 | 596 | With most 2.6 kernel versions of modutils, the version of the cifs kernel | 
 | 597 | module can be displayed via modinfo. | 
 | 598 |  | 
 | 599 | Misc /proc/fs/cifs Flags and Debug Info | 
 | 600 | ======================================= | 
 | 601 | Informational pseudo-files: | 
 | 602 | DebugData		Displays information about active CIFS sessions and | 
 | 603 | 			shares, features enabled as well as the cifs.ko | 
 | 604 | 			version. | 
 | 605 | Stats			Lists summary resource usage information as well as per | 
 | 606 | 			share statistics. | 
 | 607 |  | 
 | 608 | Configuration pseudo-files: | 
 | 609 | SecurityFlags		Flags which control security negotiation and | 
 | 610 | 			also packet signing. Authentication (may/must) | 
 | 611 | 			flags (e.g. for NTLM and/or NTLMv2) may be combined with | 
 | 612 | 			the signing flags.  Specifying two different password | 
 | 613 | 			hashing mechanisms (as "must use") on the other hand  | 
 | 614 | 			does not make much sense. Default flags are  | 
 | 615 | 				0x07007  | 
 | 616 | 			(NTLM, NTLMv2 and packet signing allowed).  The maximum  | 
 | 617 | 			allowable flags if you want to allow mounts to servers | 
 | 618 | 			using weaker password hashes is 0x37037 (lanman, | 
 | 619 | 			plaintext, ntlm, ntlmv2, signing allowed).  Some | 
 | 620 | 			SecurityFlags require the corresponding menuconfig | 
 | 621 | 			options to be enabled (lanman and plaintext require | 
 | 622 | 			CONFIG_CIFS_WEAK_PW_HASH for example).  Enabling | 
 | 623 | 			plaintext authentication currently requires also | 
 | 624 | 			enabling lanman authentication in the security flags | 
 | 625 | 			because the cifs module only supports sending | 
 | 626 | 			laintext passwords using the older lanman dialect | 
 | 627 | 			form of the session setup SMB.  (e.g. for authentication | 
 | 628 | 			using plain text passwords, set the SecurityFlags | 
 | 629 | 			to 0x30030): | 
 | 630 |   | 
 | 631 | 			may use packet signing 				0x00001 | 
 | 632 | 			must use packet signing				0x01001 | 
 | 633 | 			may use NTLM (most common password hash)	0x00002 | 
 | 634 | 			must use NTLM					0x02002 | 
 | 635 | 			may use NTLMv2					0x00004 | 
 | 636 | 			must use NTLMv2					0x04004 | 
 | 637 | 			may use Kerberos security			0x00008 | 
 | 638 | 			must use Kerberos				0x08008 | 
 | 639 | 			may use lanman (weak) password hash  		0x00010 | 
 | 640 | 			must use lanman password hash			0x10010 | 
 | 641 | 			may use plaintext passwords    			0x00020 | 
 | 642 | 			must use plaintext passwords			0x20020 | 
 | 643 | 			(reserved for future packet encryption)		0x00040 | 
 | 644 |  | 
 | 645 | cifsFYI			If set to non-zero value, additional debug information | 
 | 646 | 			will be logged to the system error log.  This field | 
 | 647 | 			contains three flags controlling different classes of | 
 | 648 | 			debugging entries.  The maximum value it can be set | 
 | 649 | 			to is 7 which enables all debugging points (default 0). | 
 | 650 | 			Some debugging statements are not compiled into the | 
 | 651 | 			cifs kernel unless CONFIG_CIFS_DEBUG2 is enabled in the | 
 | 652 | 			kernel configuration. cifsFYI may be set to one or | 
 | 653 | 			nore of the following flags (7 sets them all): | 
 | 654 |  | 
 | 655 | 			log cifs informational messages			0x01 | 
 | 656 | 			log return codes from cifs entry points		0x02 | 
 | 657 | 			log slow responses (ie which take longer than 1 second) | 
 | 658 | 			  CONFIG_CIFS_STATS2 must be enabled in .config	0x04 | 
 | 659 | 				 | 
 | 660 | 				 | 
 | 661 | traceSMB		If set to one, debug information is logged to the | 
 | 662 | 			system error log with the start of smb requests | 
 | 663 | 			and responses (default 0) | 
 | 664 | LookupCacheEnable	If set to one, inode information is kept cached | 
 | 665 | 			for one second improving performance of lookups | 
 | 666 | 			(default 1) | 
 | 667 | LinuxExtensionsEnabled	If set to one then the client will attempt to | 
 | 668 | 			use the CIFS "UNIX" extensions which are optional | 
 | 669 | 			protocol enhancements that allow CIFS servers | 
 | 670 | 			to return accurate UID/GID information as well | 
 | 671 | 			as support symbolic links. If you use servers | 
 | 672 | 			such as Samba that support the CIFS Unix | 
 | 673 | 			extensions but do not want to use symbolic link | 
 | 674 | 			support and want to map the uid and gid fields  | 
 | 675 | 			to values supplied at mount (rather than the  | 
 | 676 | 			actual values, then set this to zero. (default 1) | 
 | 677 |  | 
 | 678 | These experimental features and tracing can be enabled by changing flags in  | 
 | 679 | /proc/fs/cifs (after the cifs module has been installed or built into the  | 
 | 680 | kernel, e.g.  insmod cifs).  To enable a feature set it to 1 e.g.  to enable  | 
 | 681 | tracing to the kernel message log type:  | 
 | 682 |  | 
 | 683 | 	echo 7 > /proc/fs/cifs/cifsFYI | 
 | 684 | 	 | 
 | 685 | cifsFYI functions as a bit mask. Setting it to 1 enables additional kernel | 
 | 686 | logging of various informational messages.  2 enables logging of non-zero | 
 | 687 | SMB return codes while 4 enables logging of requests that take longer | 
 | 688 | than one second to complete (except for byte range lock requests).  | 
 | 689 | Setting it to 4 requires CONFIG_CIFS_STATS2 to be set in kernel configuration | 
 | 690 | (.config). Setting it to seven enables all three.  Finally, tracing | 
 | 691 | the start of smb requests and responses can be enabled via: | 
 | 692 |  | 
 | 693 | 	echo 1 > /proc/fs/cifs/traceSMB | 
 | 694 |  | 
 | 695 | Per share (per client mount) statistics are available in /proc/fs/cifs/Stats. | 
 | 696 | Additional information is available if CONFIG_CIFS_STATS2 is enabled in the | 
 | 697 | kernel configuration (.config).  The statistics returned include counters which | 
 | 698 | represent the number of attempted and failed (ie non-zero return code from the | 
 | 699 | server) SMB3 (or cifs) requests grouped by request type (read, write, close etc.). | 
 | 700 | Also recorded is the total bytes read and bytes written to the server for | 
 | 701 | that share.  Note that due to client caching effects this can be less than the | 
 | 702 | number of bytes read and written by the application running on the client. | 
 | 703 | Statistics can be reset to zero by "echo 0 > /proc/fs/cifs/Stats" which may be | 
 | 704 | useful if comparing performance of two different scenarios. | 
 | 705 | 	 | 
 | 706 | Also note that "cat /proc/fs/cifs/DebugData" will display information about | 
 | 707 | the active sessions and the shares that are mounted. | 
 | 708 |  | 
 | 709 | Enabling Kerberos (extended security) works but requires version 1.2 or later | 
 | 710 | of the helper program cifs.upcall to be present and to be configured in the | 
 | 711 | /etc/request-key.conf file.  The cifs.upcall helper program is from the Samba | 
 | 712 | project(http://www.samba.org). NTLM and NTLMv2 and LANMAN support do not | 
 | 713 | require this helper. Note that NTLMv2 security (which does not require the | 
 | 714 | cifs.upcall helper program), instead of using Kerberos, is sufficient for | 
 | 715 | some use cases. | 
 | 716 |  | 
 | 717 | DFS support allows transparent redirection to shares in an MS-DFS name space. | 
 | 718 | In addition, DFS support for target shares which are specified as UNC | 
 | 719 | names which begin with host names (rather than IP addresses) requires | 
 | 720 | a user space helper (such as cifs.upcall) to be present in order to | 
 | 721 | translate host names to ip address, and the user space helper must also | 
 | 722 | be configured in the file /etc/request-key.conf.  Samba, Windows servers and | 
 | 723 | many NAS appliances support DFS as a way of constructing a global name | 
 | 724 | space to ease network configuration and improve reliability. | 
 | 725 |  | 
 | 726 | To use cifs Kerberos and DFS support, the Linux keyutils package should be | 
 | 727 | installed and something like the following lines should be added to the | 
 | 728 | /etc/request-key.conf file: | 
 | 729 |  | 
 | 730 | create cifs.spnego * * /usr/local/sbin/cifs.upcall %k | 
 | 731 | create dns_resolver * * /usr/local/sbin/cifs.upcall %k | 
 | 732 |  | 
 | 733 | CIFS kernel module parameters | 
 | 734 | ============================= | 
 | 735 | These module parameters can be specified or modified either during the time of | 
 | 736 | module loading or during the runtime by using the interface | 
 | 737 | 	/proc/module/cifs/parameters/<param> | 
 | 738 |  | 
 | 739 | i.e. echo "value" > /sys/module/cifs/parameters/<param> | 
 | 740 |  | 
 | 741 | 1. enable_oplocks - Enable or disable oplocks. Oplocks are enabled by default. | 
 | 742 | 		    [Y/y/1]. To disable use any of [N/n/0]. | 
 | 743 |  |