Table of Contents
SMB/CIFS Utilities
CIFS/SMB
The Common Internet File System (CIFS) offers the possibility to map network drives on Windows workstations; the corresponding network protocol was formerly called Server Message Block (SMB). UNIX/Linux operating systems usually come with some utilities which help to make use of CIFS on these platforms, too:
smbclient
The smbclient
program is a command line tool e.g. for
- listing network shares and network printers offered by windows servers,
- listing directory contents,
- or file transfer.
In the following, lmuelle8
will be used as an example for a valid GWDG user account name, and winfs-uni.top.gwdg.de
will serve as an example for a Windows CIFS/SMB server. Since Windows servers are typically part of the Active Directory, a domain has also to be specified. GWDG
is usually correct; employees of the Max-Planck-Institute (MPI) for Biophysical Chemistry have to use MBPC
, employees of the MPI fuer Experimentelle Medizin MPEM
.
Listing network shares
smbclient -L winfs-uni.top.gwdg.de -W GWDG -U lmuelle8 Password:
Although the password could be given directly on the command line, this should be avoided for security reasons; it is better to be prompted for the password. The output of the command has been omitted because it is very long.
Listing directory contents
smbclient //winfs-uni.top.gwdg.de/lmuelle8$ -W GWDG -U lmuelle8 Password: Domain=[GWDG] OS=[Windows Server 2008 R2 Enterprise 7601 Service Pack 1] Server=[Windows Server 2008 R2 Enterprise 6.1] smb: \> dir . DR 0 Mon May 23 11:52:52 2011 .. DR 0 Mon May 23 11:52:52 2011 $RECYCLE.BIN DHS 0 Tue May 3 08:51:59 2011 Eigene Bilder DAR 0 Wed Jun 30 05:24:50 2010 Eigene Musik DAR 0 Wed Jun 30 05:24:50 2010 IO.SYS AHSR 0 Thu Feb 8 11:15:26 2001 MSDOS.SYS AHSR 0 Thu Feb 8 11:15:26 2001 My Music DR 0 Tue May 3 08:51:59 2011 My Pictures DR 0 Tue May 3 08:51:59 2011 My Videos DR 0 Tue May 3 08:51:59 2011 WINDOWS D 0 Tue May 3 08:51:49 2011 _AdminsOnly DAH 0 Wed Jun 30 05:24:46 2010 _GWDGsys DA 0 Wed Jun 30 05:24:48 2010 65535 blocks of size 33554432. 18580 blocks available smb: \> quit
These directory entries didn't change for years, but that's life …
Please notice the trailing $ symbol within the name of the network share //winfs-uni.top.gwdg.de/lmuelle8$. It has to be appended because all shares on Windows/CIFS servers exporting user data are hidden and thus require a $ on access.
File transfer
smbclient //winfs-uni.top.gwdg.de/lmuelle8$ -W GWDG -U lmuelle8 Password: Domain=[GWDG] OS=[Windows Server 2008 R2 Enterprise 7601 Service Pack 1] Server=[Windows Server 2008 R2 Enterprise 6.1] smb: \> put example.doc putting file example.doc as \example.doc (2142.8 kb/s) (average 2142.9 kb/s) smb: \> cd "My Music" smb: \My Music\> get laughter.mp3 getting file \My Music\laughter.mp3 of size 3953876 as laughter.mp3 (16223.6 kb/s) (average 16223.6 kb/s) smb: \My Music\> quit
As demonstrated, put
sends files to the remote host, while get
fetches them.
Further help
Help is available via manual page (man smblient
) or the online help
command which can be typed at the smb:
prompt.
SMB/CIFS mount
General remarks
On FreeBSD or Linux systems, e.g., it is possible to mount a Windows network share into the local directory tree. Here, it is important to realize that it is inevitable to establish a user mapping while mounting the share. Thus on the one hand the user credentials on the remote Windows server as well as a local user name have to be specified. On the FreeBSD/Linux client, all files seem to belong to the specified local user, whereas in reality they belong to the user whose credentials were used when accessing the share. Both user names may be equal but they do not have to be.
Example user, server and share names are as described above within the context of smbclient
.
Please look at the manual pages on your system for further help if the examples below won't help.
FreeBSD example
mount_smbfs -U lmuelle8 -I winfs-uni.top.gwdg.de -W GWDG -u 1001 -g 20 //lmuelle8@winfs-uni/lmuelle8$ /import/lmuelle8 Password:
The password could be given in the command line, but should not for security reasons. Meaning of the arguments is:
-U lmuelle8
– user account name to authenticate with-I winfs-uni.top.gwdg.de
– host name or ip address of server-W GWDG
– active directory domain-u 1001
– local user number-g 20
– local group number//lmuelle8@winfs-uni/lmuelle8$
– //name of remote user@netbios server name/network share name/import/lmuelle8
– local directory to mount on
Linux example
mount.cifs -o domain=GWDG,user=lmuelle8,uid=1001,gid=100 //winfs-uni.top.gwdg.de/lmuelle8$ /import/lmuelle8 Password:
The password could be given in the command line, but should not for security reasons. Meaning of the arguments is:
-o domain=GWDG,user=lmuelle8,uid=1001,gid=100
– active directory domain, user account name to authenticate with, local user number, local group number//winfs-uni.top.gwdg.de/lmuelle8$
– //host name or ip address of server/network share name/import/lmuelle8
– local directory to mount on
persistent mount using a credentials file and fstab
The mount.cifs command mentioned before works properly if you want to mount the share at once. For a persistent mounting the effort specifying the userid, domain, share URI and mountpoint and always entering the password may be not really comfortable. So you may want to mount the CIFS shares as you do with NFS by adding a line to the /etc/fstab
.
# cat /etc/fstab | grep cifs //winfs-uni.top.gwdg.de/lmuelle8$ /import/lmuelle8 cifs domain=GWDG,user=lmuelle8,uid=1001,gid=100,file_mode=0664 0 0
This skips out the mount command with all the options, but still requires to enter the password. If it's ok to store the password in your linux system, you can use a credential file instead of giving username, domain and password. Such a file looks like this (taking the example from above):
# cat /etc/smbpasswd domain=GWDG username=lmuelle8 password=<User's Password in plain text>
The line in the fstab file then looks like this:
# cat /etc/fstab | grep cifs //winfs-uni.top.gwdg.de/lmuelle8$ /import/lmuelle8 cifs credentials=/etc/smbpasswd,uid=1001,gid=100,file_mode=0640 0 0
if you want to mount different shares you can use the same credential file for each, if you need different credentials for different shares just setup different credential files, e.g.
# cat /etc/fstab | grep cifs //winfs-uni.top.gwdg.de/lmuelle8$ /import/lmuelle8 cifs credentials=/home/lmuelle8/.smb-lmuelle8,uid=1001,gid=100,file_mode=0640 0 0 //wfs-test.top.gwdg.de/workgroup$ /import/workgroup cifs credentials=/etc/smbworkgroup,uid=1001,gid=1000,file_mode=0664 0 0
As the credentials file contains a plain text password, it should be strictly protected from other users accessing it. so please do set the access rights to 600 by
chmod 600 <path to credentials file>