smb.conf

A sample /etc/samba/smb.conf file that worked for me
[global]
    workgroup = ABLAB
    server string = %h server (Samba, Ubuntu)
    #name resolve order = host
    log file = /var/log/samba/log.%m
    max log size = 1000
    syslog = 0
    panic action = /usr/share/samba/panic-action %d

    security = user
    encrypt passwords = yes
    passdb backend = smbpasswd
    username map = /etc/samba/smbusers

[xedhome]
    comment = Home directory of Chris
    read only = no
    valid users = xed
    path = /home/xed
Note
Use $ testparm to check the validity of a Samba configuration file.

Starting on Centos

/etc/init.d/smb start
sudo chkconfig smb on

Notes on Samba Authentication Issues

After a lot of research here’s what I think. Samba is doing two things. 1. It is a file transfer protocol, it moves files. And, 2. it decides who can do this, it authenticates. As an authentication mechanism, it’s very flexible. Too flexible. It can keep it’s own users, groups, etc, or it can pass along authentication requests to the underlying system (to PAM, for example). The problem is that when you let Samba use it’s own user database, the records for the passwords are stored in hashes that are different from that which PAM uses. This means that if you want to use PAM (the Linux accounts) you have to enable Samba to pass the passwords in clear text to PAM so that PAM can hash them and compare with what’s in PAM’s database. This works fine in a trusted environment where the chances of someone sniffing passwords off the wire is small, but it is a terrible idea on the wild internet.

There is another way. One possibility is getting an LDAP server set up. With that working, both PAM and Samba can be configured to use the same "directory" of users and hashes (securely).

Perhaps the simplest way to set up is to use smbpasswd, Samba’s own special way of what amounts to keeping an /etc/passwd file. This involves setting up a temporary "directory" (i.e. list) of users in the Samba style (on the Samba server, there will essentially be a separate "password file"). This will require people to have/set a different password (which could be the same).

smbpasswd

In smb.conf you need this:

passdb backend = smbpasswd

To add Samba users (totally different from Linux PAM users):

:-< [nike][/etc/samba]$ sudo smbpasswd -a xed
New SMB password:
Retype new SMB password:
startsmbfilepwent_internal: file /etc/samba/smbpasswd did not exist.
File successfully created.
Added user xed.

Looks like you must have a corresponding Unix account to set the smbpasswd or you get "Failed to modify password entry for user …" So much for the independent authentication mechanisms.

Also you may want to map Samba users to Linux users with whatever was specified here:

username map = /etc/samba/smbusers

Usually contains something like

xed = "xed"
jack = "jack"

smbclient

This works fine for testing:

smbclient -U xed //xablab.ucsd.edu/xedhome -c ls

If there are no passwords:

smbclient //pelican/pelicanc -N

where "pelican" is the name of the host and "pelicanc" is the name of the share as set in W95.

If you want to use backslashes for some reason, double them up -

smbclient \\\\pelican\\pelicanc -N

The "-N" option bypasses the password prompt.

When in smbclient, FTP commands often work. To exit, "q" works.

Warning
I had big big problems for too long because I was screwing up the syntax. Don’t put a trailing slash on the end of the share name!!!!!!

THIS IS WRONG

smbclient //parrot/parrotc/*

This is correct:

[~]$ smbclient //parrot/parrotc

To list what Samba thinks it’s offering:

$ smbclient -L localhost

(Password here seems optional.)

smbmount

smbmount //pelican/pelicanc/ /mnt/pelican -n

This will mount the share "pelicanc" to path /mnt/pelican -n should be used to mount shares that do not need a password

I had trouble mounting a smb share as non-root. I used su and then had to explicitly call out where smbmount was:

/usr/sbin/smbmount .....

smbumount seems to be for non-root users who use smbmount. To unmount the smb file system as root, use ordinary umount:

umount /mnt/pelican

If you have trouble mounting because of a host name too long error, "my hostname name too long as a netbios name: cardinal.windmills" try this:

smbmount //canary/canaryc /mnt/pelican -n -c cardinal

I don’t understand what the deal is, but this makes it work out.