Setting Up Samba

While not strictly necessary for the operation of Asterisk, you may want to consider setting up Samba on your Asterisk system. With it, you can map the system's file system to another machine, allowing you to copy/paste files to it with drag and drop from any number of GUIs. This will be way better than using FTP to copy all of the files to/from the Asterisk system. On the other hand, as with inbound FTP, you should evaluate the convenience provided vs. the risk involved with allowing outside systems to get at the Asterisk system's file system. If your Asterisk system is critical, you may want to disable Samba after you've set up the box or maybe not install it at all.

The following URL has good notes about setting up Samba. Might want to read them, if you run into trouble:

     http://home.nyc.rr.com/computertaijutsu/samba.html

Note that, if you make any changes to Samba, you may have to reboot some or all of your Windows workstations (Windows caches SMBs and this can lead to changes not taking effect). You should always restart the smbd and nmbd processes.

.../etc/hosts & .../etc/lmhosts:

Add the Samba server name to these two files on all of the Windows boxes. On most Windows systems, .../etc/hosts is in /WINNT/system32/drivers/etc or /WINDOWS/system32/drivers/etc. So is lmhosts. For example:

     192.168.1.1          mysys
     192.168.1.1          jump_gate      # <==== Exact name used for server
          .
          .
          .
     #BEGIN_ALTERNATE
     #INCLUDE     C:\WINNT\system32\drivers\etc\lmhosts.npt
     #END_ALTERNATE

It is very important that you do this and that the name added to the hosts file matches the name the Samba server is advertising under exactly.

/etc/hosts:

If you wish to refer to the workstations by name on the Samba server (e.g. if you will be using Samba client), add the Windows workstation or other Samba server names to /etc/hosts on the Asterisk box. For example:

     127.0.0.1       localhost.homeworld     localhost
     192.168.1.1     jump-gate.homeworld     jump-gate
     192.168.1.2     gabriella.homeworld     gabriella  # <==== workstation
     192.168.1.3     clara-bow.homeworld     clara-bow  # <==== names
     192.168.1.3     clara_bow.homeworld     clara_bow  # <====

/etc/samba/lmhosts:

If you will be using Samba client, add the Win NT/98/2000/XP workstation names to /etc/samba/lmhosts on the Asterisk box. For example:

     127.0.0.1       localhost
     192.168.1.1     jump-gate
     192.168.1.1     jump_gate
     192.168.1.2     gabriella           # <==== Workstation names
     192.168.1.3     clara-bow           # <==== Note that Unix uses '-'
     192.168.1.3     clara_bow           # <==== Note that Winduhs uses '_'

The lmhosts file is basically a copy of /etc/hosts so you can start by copying it to samba/lmhosts and then just edit it down, if you already have the workstations defined in /etc/hosts:

     cp /etc/hosts /etc/samba/lmhosts

The permissions should look like:

     -rw-r--r--     root     root

/etc/samba/smbusers:

Set up equivalences between Windows login names and login names on the Asterisk server in this file. For example:

     # Unix_name = SMB_name1 SMB_name2 ...
     root = administrator admin
     nobody = guest pcguest smbguest
     joeblow = joe

pdbedit

Add passwords (by hand) using pdbedit:

     su
     pdbedit -a -u username

for each user that you wish to add. Note that the username is the local userid, not the Windows userid (which is mapped to a local userid by /etc/samba/smbusers, above).

/etc/samba/smb.conf:

Configure Samba by hacking /etc/samba/smb.conf. Pay attention to the following (especially the "interfaces" IP addresses, which should be set to your machine's IP address plus 127.0.0.1):

     workgroup = WORKGROUP
     # netbios name = MRSERVER  <== Set this only if you don't want to use the
                                    machine's name from /etc/sysconfig/network
     comment = mysys
     server string = Samba %v Server
     hosts allow = 192.168.1. 127.
     interfaces = 192.168.1.1/24 127.0.0.1    <==== Machine's IP address here
     passdb backend = tdbsam
     unix password sync = no
     remote browse sync = 192.168.1.255
     local master = yes
     domain master = yes
     [homes]
     [Root]

You can copy the sample config file from the build directory tree:

     cp ../examples/smb.conf.default /etc/samba/smb.conf

Or, if you'd like, here is a sample of a complete config file:

     # This is the main Samba configuration file. You should read the
     # smb.conf(5) manual page in order to understand the options listed
     # here. Samba has a huge number of configurable options (perhaps too
     # many!) most of which are not shown in this example
     #
     # Any line which starts with a ; (semi-colon) or a # (hash)
     # is a comment and is ignored. In this example we will use a #
     # for commentry and a ; for parts of the config file that you
     # may wish to enable
     #
     # NOTE: Whenever you modify this file you should run the command "testparm"
     # to check that you have not many any basic syntactic errors.
     #
     #======================= Global Settings ===================================
     [global]
     # workgroup = NT-Domain-Name or Workgroup-Name
         workgroup = WORKGROUP
         comment = mysys
     # server string is the equivalent of the NT Description field
         server string = Samba %v Server
     # This option is important for security. It allows you to restrict
     # connections to machines which are on your local network. The
     # following example restricts access to two C class networks and
     # the "loopback" interface. For more examples of the syntax see
     # the smb.conf(5) man page
         hosts allow = 192.168.1. 127.
     # if you want to automatically load your printer list rather
     # than setting them up individually then you'll need this
     ;    printcap name = /etc/printcap
     ;    load printers = yes
     # It should not be necessary to spell out the print system type unless
     # yours is non-standard. Currently supported print systems include:
     # cups, bsd, sysv, plp, lprng, aix, hpux, qnx
     ;   printing = cups
     # Uncomment this if you want a guest account, you must add this to
     # /etc/passwd otherwise the user "nobody" is used
     ;   guest account = pcguest
     # this tells Samba to use a separate log file for each machine
     # that connects
         log file = /var/log/samba/log.%m
     # Have no cap on log file size or put a cap on the size of the log
     # files (in Kb).
     ;   max log size = 0
         max log size = 50
     # Security mode. Most people will want user level security. See
     # security_level.txt for details.
         security = user
     # Use password server option only with security = server
     ;   password server = <NT-Server-Name>
     # Backend to store user information in. New installations should
     # use either tdbsam or ldapsam. smbpasswd is available for backwards
     # compatibility. tdbsam requires no further configuration.
         passdb backend = tdbsam
     ;   passdb backend = smbpasswd
     # Disallow access to accounts that have null passwords.
         null passwords = no
     # You may wish to use password encryption. Please read
     # ENCRYPTION.txt, Win95.txt and WinNT.txt in the Samba documentation.
     # Do not enable this option unless you have read those documents
     ;   encrypt passwords = yes
     ;   smb passwd file = /etc/samba/smbpasswd
     # The following are needed to allow password changing from Windows to
     # update the Linux sytsem password also.
     # NOTE: Use these with 'encrypt passwords' and 'smb passwd file' above.
     # NOTE2: You do NOT need these to allow workstations to change only
     #        the encrypted SMB passwords. They allow the Unix password
     #        to be kept in sync with the SMB password.
         unix password sync = no
     ;   passwd program = /usr/bin/passwd %u
     ;   passwd chat = NewUNIXpassword %n\n ReTypenewUNIXpassword* %n\n \
                       passwd:allauthenticationtokensupdatedsuccessfully*
     # Unix users can map to different SMB User names
         username map = /etc/samba/smbusers
     # Using the following line enables you to customise your configuration
     # on a per machine basis. The %m gets replaced with the netbios name
     # of the machine that is connecting
     ;   include = /etc/samba/smb.conf.%m
     # Most people will find that this option gives better performance.
     # See speed.txt and the manual pages for details
     ;   socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
     # Configure Samba to use multiple interfaces
     # If you have multiple network interfaces then you must list them
     # here. See the man page for details.
     ;   interfaces = 192.168.1.1/24
         interfaces = 192.168.1.1/24 127.0.0.1
         bind interfaces only = True
     # Configure remote browse list synchronisation here
     #  request announcement to, or browse list sync from:
     #     a specific host or from / to a whole subnet (see below)
     ;   remote browse sync = 192.168.3.25 192.168.5.255
         remote browse sync = 192.168.1.255
     # Cause this host to announce itself to local subnets here
     ;   remote announce = 192.168.1.255 192.168.2.44
     # Browser Control Options:
     # set local master to no if you don't want Samba to become a master
     # browser on your network. Otherwise the normal election rules apply
         local master = no
     ;   local master = yes
     # OS Level determines the precedence of this server in master browser
     # elections. The default value should be reasonable
     ;   os level = 33
     # Domain Master specifies Samba to be the Domain Master Browser. This
     # allows Samba to collate browse lists between subnets. Don't use this
     # if you already have a Windows NT domain controller doing this job
     ;   domain master = yes
     # Preferred Master causes Samba to force a local browser election on
     # startup and gives it a slightly higher chance of winning the election
     ;   preferred master = yes
     # Use only if you have an NT server on your network that has been
     # configured at install time to be a primary domain controller.
     ;   domain controller = <NT-Domain-Controller-SMBName>
     # Enable this if you want Samba to be a domain logon server for
     # Windows95 workstations.
     ;   domain logons = yes
     # if you enable domain logons then you may want a per-machine or
     # per user logon script
     # run a specific logon batch file per workstation (machine)
     ;   logon script = %m.bat
     # run a specific logon batch file per username
     ;   logon script = %U.bat
     # Where to store roving profiles (only for Win95 and WinNT)
     #        %L substitutes for this servers netbios name, %U is username
     #        You must uncomment the [Profiles] share below
     ;   logon path = \\%L\Profiles\%U
     # All NetBIOS names must be resolved to IP Addresses
     # 'Name Resolve Order' allows the named resolution mechanism to be specified
     # the default order is "host lmhosts wins bcast". "host" means use the unix
     # system gethostbyname() function call that will use either /etc/hosts OR
     # DNS or NIS depending on the settings of /etc/host.config,
     # /etc/nsswitch.conf and the /etc/resolv.conf file. "host" therefore is
     # system configuration dependant. This parameter is most often of use to
     # prevent DNS lookups in order to resolve NetBIOS names to IP Addresses.
     # Use with care! The example below excludes use of name resolution for
     # machines that are NOT on the local network segment
     # - OR - are not deliberately to be known via lmhosts or via WINS.
     ; name resolve order = wins lmhosts bcast
     # Windows Internet Name Serving Support Section:
     # WINS Support - Tells the NMBD component of Samba to enable it's WINS Server
         wins support = no
     # WINS Server - Tells the NMBD components of Samba to be a WINS Client
     #     Note: Samba can be either a WINS Server, or a WINS Client, but NOT both
     ;   wins server = w.x.y.z
     # WINS Proxy - Tells Samba to answer name resolution queries on
     # behalf of a non WINS capable client, for this to work there must be
     # at least one     WINS Server on the network. The default is NO.
     ;   wins proxy = yes
     # DNS Proxy - tells Samba whether or not to try to resolve NetBIOS names
     # via DNS nslookups. The built-in default for versions 1.9.17 is yes,
     # this has been changed in version 1.9.18 to no.
         dns proxy = no
      map to guest = never
      dead time = 0
      debug level = 0
     # Case Preservation can be handy - system default is no
     # NOTE: These can be set on a per share basis
     ;  preserve case = no
     ;  short preserve case = no
     # Default case is normally upper case for all DOS files
     ;  default case = lower
     # Be very careful with case sensitivity - it can break things!
     ;  case sensitive = no
     #============================ Share Definitions ============================
     [homes]
         comment = Home Directory
         browseable = no
         writable = yes
     [Root]
         comment = Root Directory
         path = /
         public = yes
         browseable = yes
         writeable = yes
         write list = @joeblow

You'll probably need to turn on the Samba service so that it starts at system startup and then start it by hand (or reboot):

     su
     /sbin/chkconfig smb on
     /etc/init.d/smb start