Difference between revisions of "Samba"

from HTYP, the free directory anyone can edit if they can prove to me that they're not a spambot
Jump to navigation Jump to search
(→‎Configure Samba for "guest" logins: share folders from sambaguest's home folder)
(→‎Automatic resolution of Network Neighborhood names: actually, doing exactly that just now didn't work, so it can't be assumed)
Line 65: Line 65:
  
 
===Automatic resolution of Network Neighborhood names===
 
===Automatic resolution of Network Neighborhood names===
'''Note''': Newer versions of Samba do this out of the box, e.g. if you're running [[Ubuntu]] 6.10 and you install Samba using {{linuxcmd|apt}}, you don't need to do anything else for this to work.
 
 
 
Some explanation, for technical purists:
 
Some explanation, for technical purists:
 
* '''Problem''': How can we add [[Network Neighborhood]] machine names to the search space used by [[Linux]]'s [[domain name resolver]]?
 
* '''Problem''': How can we add [[Network Neighborhood]] machine names to the search space used by [[Linux]]'s [[domain name resolver]]?
 
* '''Justification''': This is needed so that commands which accept a domain name as input (e.g. ftp, ssh, mysql) can accept a machine name instead, removing the necessity to manually look up the machine's IP address. For example, I should be able to type '''ssh <u>machinename</u>''' instead of having to first look up <u>machinename</u>'s IP address via other methods, and then paste or retype that address (both methods prone to error) after the ssh command.
 
* '''Justification''': This is needed so that commands which accept a domain name as input (e.g. ftp, ssh, mysql) can accept a machine name instead, removing the necessity to manually look up the machine's IP address. For example, I should be able to type '''ssh <u>machinename</u>''' instead of having to first look up <u>machinename</u>'s IP address via other methods, and then paste or retype that address (both methods prone to error) after the ssh command.
 +
 +
'''Note''': Under some circumstances, Samba appears to set itself up this way automatically, but results have been inconsistent.
  
 
I researched this extensively for many months, but all the solutions I found were either hideously complicated or somehow inadequate. The solution turns out to be quite simple:
 
I researched this extensively for many months, but all the solutions I found were either hideously complicated or somehow inadequate. The solution turns out to be quite simple:
Line 76: Line 76:
 
** change the "hosts" line to include "wins" before "dns".
 
** change the "hosts" line to include "wins" before "dns".
  
This tells Linux's [[domain name resolver]] to check [[WINS]] before it checks [[DNS]] when resolving domain names. No further action should be required; test the change by trying to ping a local machine by name.
+
This tells Linux's [[domain name resolver]] to check [[WINS]] before it checks [[DNS]] when resolving domain names. No further action should be required (you don't even have to restart the networking daemon); test the change by trying to ping a local machine by name.
 
====related useful information====
 
====related useful information====
 
The command '''{{linuxcmd|nmblookup}} <u>machinename</u>''' returns an IP address, as will '''{{linuxcmd|net}} lookup <u>machinename</u>'''. nmblookup apparently sends out a broadcast request ("anyone here named <u>machinename</u>?"), while net lookup checks a central list (presumably on the Samba master browser).
 
The command '''{{linuxcmd|nmblookup}} <u>machinename</u>''' returns an IP address, as will '''{{linuxcmd|net}} lookup <u>machinename</u>'''. nmblookup apparently sends out a broadcast request ("anyone here named <u>machinename</u>?"), while net lookup checks a central list (presumably on the Samba master browser).

Revision as of 16:25, 10 February 2007

navbar

computing: software: Samba

Overview

Samba is a program which allows "Network Neighborhood"-style communication between Windows and other platforms such as Linux. It is named after the SMB protocol, which is what Windows uses for "Network Neighborhood" communication.

Commands

Related Articles

How To

Debug connection/access issues

Samba maintains activity logs in /var/log/samba/. There seem to be two logs, log.nmbd and log.smbd; log.smbd generally has information about connections and access, while log.nmbd has more to to with network-name resolution. The nature of the log files is configurable somewhat through smb.conf (see log level, among others). Use tail -f /var/log/samba/log.smbd (for example) to monitor a logfile in real-time.

Restart the Samba Server

If you have Fedora Core, there's a convenient little "services" application you can use to restart Samba and several dozen other services. For the rest of us, however, there's a command you have to execute from a root terminal.

On Ubuntu, and probably other Debian-based systems:

sudo /etc/init.d/samba restart

On SuSE 10.0 and Fedora Core 4:

sudo /etc/init.d/smb restart

This will ask for a password; type in your password (not root's) unless you have reconfigured your sudo setup. (This assumes you have sudo privileges; if not, su to get root access and then type the rest of the command without the "sudo".)

On Red Hat, I'm told the command would be:

/sbin/samba restart

(Possibly substituting "smb" for "samba"; ls the directory in question to find a list of services.) This is the same general technique used for restarting services, which should itself probably be documented somewhere. (The Samba share configuration GUI program really ought to have a "restart Samba server" button, though, even if it does this automatically when you change parameters -- because there is no way to know if it is doing this otherwise.)

Configure Samba for "guest" logins

As most home operating systems are now moving towards requiring users to have login accounts, this is becoming less necessary -- but it is still useful under some circumstances (such as wanting to give access to Win9x machines with the login dialogue bypassed).

Configuration for smb.conf:

  • In the [global] section:
guest account = guestuser
guest ok = yes
security = share

...where guestuser should be a standard Linux user (typically "sambaguest") who has the necessary permissions on the target system for whatever sort of access you want to grant through the share. If the user doesn't have the correct permissions, client machines will probably be able to see the share but not to access anything inside it. Check /var/log/samba/ for log files which may help trace problems (the actual log filespecs are defined by the "log file =" parameter in smb.conf).

The following settings have not been tested successfully and aren't actually necessary, but can apparently be helpful if there are permissions conflicts (e.g. files created by guestuser can't be written or deleted by anyone else):

force group = browsegroup
force create mode = 0060
create mask = 0775

...where browsegroup is the groupname for users who should have access to shared stuff; I usually use "lanusers". "force group" may be unnecessary if guestuser is created as a member of browsegroup instead of its own private group:

sudo adduser --ingroup browsegroup --no-create-home guestuser

After editing and saving smb.conf. restart the Samba daemon for changes to take effect. Note for the future: it may actually be a better idea to leave off the --no-create-home option, because the guestuser's home directory actually makes a very sensible place for folders to be shared from.

A bit of explanation: The "guest account" setting is the filesystem user which the Samba server uses for accessing files on its host system, regardless of what username is sent by remote systems. Files created on the Samba server using a "guest" connection will be owned by guestuser and guestuser's primary group. If the "force group" setting is used, then the group ownership for those files will instead be browsegroup.

The actual names for guestuser and browsegroup are arbitrary; "sambaguest" and "lanusers" seem to work fine.

Automatic resolution of Network Neighborhood names

Some explanation, for technical purists:

  • Problem: How can we add Network Neighborhood machine names to the search space used by Linux's domain name resolver?
  • Justification: This is needed so that commands which accept a domain name as input (e.g. ftp, ssh, mysql) can accept a machine name instead, removing the necessity to manually look up the machine's IP address. For example, I should be able to type ssh machinename instead of having to first look up machinename's IP address via other methods, and then paste or retype that address (both methods prone to error) after the ssh command.

Note: Under some circumstances, Samba appears to set itself up this way automatically, but results have been inconsistent.

I researched this extensively for many months, but all the solutions I found were either hideously complicated or somehow inadequate. The solution turns out to be quite simple:

  • install winbind (usually available in standard repositories; Ubuntu 6.06 has it)
  • edit /etc/nsswitch.conf
    • change the "hosts" line to include "wins" before "dns".

This tells Linux's domain name resolver to check WINS before it checks DNS when resolving domain names. No further action should be required (you don't even have to restart the networking daemon); test the change by trying to ping a local machine by name.

related useful information

The command nmblookup machinename returns an IP address, as will net lookup machinename. nmblookup apparently sends out a broadcast request ("anyone here named machinename?"), while net lookup checks a central list (presumably on the Samba master browser).

explanations

WINS is a method of domain name resolution, as is DNS. WINS (a protocol) originally used NetBIOS (another, lower-level protocol), but more recently has switched to using TCP.

Reference

Links