Samba

From Noah.org
Revision as of 14:43, 3 September 2010 by Root (Talk | contribs) (Browsing Windows workgroups in Nautilus fails with a timeout)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Mount a Windows share on Linux

It's pretty easy to mount a Windows network share on Linux. The `mount` command supports filesystem type cifs (and smbfs).

You may need to resolve your Windows \\server name to an IP address. I find this easier than trying to deal with the Windows names. The following examples show how to mount a Windows folder share named \\server\SharedDocs, and pretends that \\server resolves to 192.168.2.14.

This shows a mount using cifs:

mkdir shareddocs
sudo mount -t cifs -o user=Guest //192.168.2.14/shareddocs shareddocs

This shows a mount using old style smbfs:

mkdir shareddocs
sudo mount -t smbfs -o username=Guest //192.168.2.14/shareddocs shareddocs

Make SMB mounts persistent by using fstab

Add the following to /etc/fstab and /media/SharedDocs will be automatically mounted when you reboot or run `mount -a`. The IP address, 192.168.2.14, may be replaced with the Windows server name. You may also need to set username and password.

Using cifs

//192.168.2.14/shareddocs /media/shareddocs cifs auto,username=guest,password=,rw,user 0 0

This shows a mount with a given group of admin and forced permissions for files and directories.

//192.168.2.14/shareddocs /media/shareddocs cifs auto,user=YOUR_WINDOWS_LOGIN,password=YOUR_WINDOWS_PASSWORD,rw,gid=admin,file_mode=00666,dir_mode=00777 0 0

Old style using smbfs

//192.168.2.14/shareddocs /media/shareddocs smbfs auto,username=guest,password=,rw,user 0 0

Browse with smbclient

Note: don't put a trailing slash on the share name!

smbclient -UGuest //192.168.1.1/SharedDocs

.

Samba tries to search for Windows shares through a few different methods. It first looks up names in DNS. If that fails then it tries broadcasts on the localnet to see if any nearby machines answer. But if you use a "smart" DNS, then the DNS lookup will not fail as it is supposed to. So Samba will never fall-through to using a broadcast lookup. Instead you will just get a timeout.

If you can't fix your DNS then you can change the name resolution order that Samba uses. Edit the file, /etc/samba/smb.conf and find the name resolve order line similar to this:

; name resolve order = lmhosts host wins bcast

Your values may be slightly different. Change this line so that it is uncommented and the resolve order puts host at the end of the list:

name resolve order = lmhosts wins bcast host

You may need to restart processes that make use of Samba including any of the horrible 'gvfs' processes. Sending a HUP signal is usually good enough.

pkill -HUP smb

Sometimes the first time I browse the Windows network I will get a blank page, but if I go back and click "Windows Network" again it will allow me to browse.

Make sure Samba is NOT the Windows Master Browser

Often on a Windows office Network you already have a machine dedicated for the Master Browser and all that other Windows stuff that I've been slowly forgetting. A default install of Samba server might sometimes take over as the Master which may not be desirable. Having multiple local master browsers result in each server competing for browsing election requests. There should be only one local master browser per subnet.

[global]
domain master = no
local master = no
preferred master = no
os level = 0

Errors

mount_data version 1919251317 is not supported

If you get an error something like this:

smbfs: mount_data version 1919251317 is not supported

then you don't have the smbfs module loaded. Under Ubuntu this is pretty easy to fix. Just run:

sudo apt-get install smbfs

mount error 6

If you get an error like this:

mount error 6 = No such device or address
Refer to the mount.cifs(8) manual page (e.g.man mount.cifs)

then you probably used the wrong share name. The remote share does not exist.

/var/log/samba/log.0.0.0.0: Transport endpoint is not connected

These errors are harmless noise caused by Windows XP clients. Win XP will attempt to connect to both ports 139 and 445 at the same time. It will use whichever port connects first and it will drop the connection from the other port.

getpeername failed. Error was Transport endpoint is not connected
client 0.0.0.0 read error = Transport endpoint is not connected.

If your Samba server is not a PDC and there are no other Samba servers on your localnet then you may choose to silence these errors by shutting off port 445. Add the following to /etc/samba/smb.conf under the [global] section:

    smb ports = 139

Share a Linux directory on a Windows network

This provides read/write for everyone on the given disk named sde1 and mounted under /media/sde1. Put this in in /etc/samba/smb.conf then restart samba.

[global]
    security = share
[sde1]
    comment = sde1 on Linux server
    path = /media/sde1
    public = yes
    writable = yes
    locking = no
    guest ok = yes  

Samba Spaces in directory filename

If you have directory path that has a space in it then here is how you set this in /etc/fstab. For example, say the Windows shared directory had a space in the name such as "Shared Docs" instead of "shareddocs". Use '\040' instead of a space.

//192.168.2.14/Shared\040Docs /media/shareddocs cifs auto,user=YOUR_WINDOWS_LOGIN,password=YOUR_WINDOWS_PASSWORD,rw,gid=admin,file_mode=00666,dir_mode=00777 0 0

Simple smb.conf

[global]
    security = share
    workgroup = WORKGROUP
    server string = %h server
    dns proxy = no
    name resolve order = lmhosts wins bcast host
    log file = /var/log/samba/log.%m
    max log size = 1000
    domain master = no
    local master = no
    preferred master = no
    os level = 0
    # smb ports = 139

[public]
    comment = Public shared folder on Linux server
    path = /media/usb0
    public = yes
    writable = yes
    locking = no
    guest ok = yes
    # force group = public

[print$]
    comment = Printer Drivers
    path = /var/lib/samba/printers
    browseable = yes
    read only = yes
    guest ok = yes