1.什么是samba?
    提到samba,总是让人联想到热情奔放的桑巴舞,一个linux下的网络服务,为什么会有这样一个有点奇怪的名字呢?其实,linux下很多的网络服务都有一个很有个性的名称,并且这些名称还有各自的说法甚至故事,了解它们的由来是很有意思的事情,可以大大增加学习这些网络应用的兴趣。
   samba是在1991年由一个叫作Andrew Tridgell的澳大利亚大学生编写的,目的是为了能在unix和dos上方便地进行文件共享, Andrew Tridgell最初把自己编写的这段程序命名为Server Message Block (SMB),但是smb是个缩写,而samba中既包含了smb,又是热情奔放的桑巴舞的名称,Andrew Tridgell就选择它来命名自己的程序,也就有了先在使用很广泛的“samba”这个网络服务的名称。
   Samba,是种自由软体,用来让UNIX系列的作业系统与微软Windows作业系统的SMB/CIFS(Server Message Block/Common Internet File System)网路协定做连结。在目前的版本(v3),不仅可存取及分享SMB的资料夹及印表机,本身还可以整合入Windows Server的网域、扮演为网域控制站(Domain Controller)以及加入Active Directory成员。简而言之,此软体在Windows与UNIX系列OS之间搭起一座桥梁,让两者的资源可互通有无。

2.samba的主要部分
  两个守护程序: smbd 和 nmbd(对客户端提供NetBIOS名服务)  
   配置文件: /etc/smb.conf   
    使用工具: smbclient,smbpasswd,mount,umount
  samba的启动脚本在/etc/rc.d/init.d/smb

3.两个守护程序: smbd 和 nmbd(对客户端提供NetBIOS名服务)
 a.smbd 
    smbd 实用工具是负责所有文件和打印共享服务的后台进程。一旦客户通过 nmbd 寻址到一个 SAMBA 服务器,就由 smbd 负责客户的文件和打印请求。
 b.nmbd
nmbd 实用工具控制系统的 NetBIOS 通信。它作为后台程序运行,并且负责监听用于名字服务请求的 NetBIOS 端口。当接收了名字服务请求时, nmbd 用系统的 IP 地址作出回答。负责保持浏览器能通报在一个已知的工作组中哪个成员在编写 NetBIOS 名字目录。

4. 配置文件: /etc/smb.conf
smb.conf 在初始化期间被用于配置 nmbd 和 smbd.
通用:
/etc/rc.d/init.d/smb stop
/etc/rc.d/init.d/smb start
RedHat:
service smb start
service smb stop

默认samba开启[global],[homes],[printers]下面就来详细的介绍一下他们的参数:
当你为你繁琐的注释搞得晕头转向时不防试一试下面的命令进行筛选:
  grep -v "^[[:space:]]*#" smb.conf | grep -v "^;" | grep -v "^$"
你也试一试吧,怎么样效果好多了吧。。
[global]
  workgroup = mygroup                 #WIN用户可以看到主机的名字
  server string = samba server %v     #服务器的字符串,相当于对服务计算机说明部分
  security = user                     #安全格式,使用用户级安全
  load printers = yes                 #自动共享打印机而不是个别地进行单独设置
  passdb backend = tdbsm              #amb用户密码的格式
  encrypt passwords = yes             #启用登入密码并放到/etc/samba/smbpasswd
  smb passwd file = /etc/samba/smbpasswd
:全局设置对整个文件都生效
[public]
  path = share dir                    #共享文件所放的目录
  public = yes            #是否所有人可见  
  guest ok = yes
  writable = yes         #共享目录是否可写
  printable = no         #是否可打印
[homes]
 comment = Home Directories          #注释
 browseable = no                     是否在浏览器下可见
 writable = yes                      #是否可写
 valid users = %S        #可访问的用户

用户还可以自定义如:
[shared123]
  comment = this is a share file
  path = /shared
  public = no
  write list = tom wendy
此定义共享目录为/shared 其他人不可见不可访问只有tom 和 wendy 可访问可写
注意:在window下看到共享名是shared123 而不是shared

总结其各个参数的意思如下:
  comment———注释说明

  path————分享资源的完整路径名称,除了路径要正确外,目录的权限也要设对

  browseable——是yes/否no在浏览资源中显示共享目录,若为否则必须指定共享路径才能存取

  printable——-是yes/否no允许打印

  hide dot ftles–是yes/否no隐藏隐藏文件

  public———-是yes/否no公开共享,若为否则进行身份验证(只有当security = share 时此项才起作用)

  guest ok——–是yes/否no公开共享,若为否则进行身份验证(只有当security = share 时此项才起作用)

  read only——-是yes/否no以只读方式共享当与writable发生冲突时也writable为准

  writable——–是yes/否no不以只读方式共享当与read only发生冲突时,无视read only

  vaild users—–设定只有此名单内的用户才能访问共享资源(拒绝优先)(用户名/@组名)

  invalid users—设定只有此名单内的用户不能访问共享资源(拒绝优先)(用户名/@组名)

  read list——-设定此名单内的成员为只读(用户名/@组名)

  write list——若设定为只读时,则只有此设定的名单内的成员才可作写入动作(用户名/@组名)

  create mask—–建立文件时所给的权限

  directory mask–建立目录时所给的权限

  force group—–指定存取资源时须以此设定的群组使用者进入才能存取(用户名/@组名)

  force user——指定存取资源时须以此设定的使用者进入才能存取(用户名/@组名)

  allow hosts—–设定只有此网段/IP的用户才能访问共享资源

  allwo hosts = 网段 except IP

  deny hosts——设定只有此网段/IP的用户不能访问共享资源

  allow hosts=本网段指定IP指定IP

  deny hosts=指定IP本网段指定IP


5. 使用工具:smbclient smbpassd,mount ,umount
a. smbclient
smbclient 命令用来存取远程 samba 服务器上的资源,它的界面到目前为止还是文本方式的,命令形式和 ftp 类似。
smbclient 命令的语法是:
smbclient <servicename> [password] [options]
其中 servicename 是要连接的资源名称,资源名称的形式如下: //server/service
其中 server 是远程服务器的 netbios 名字,对于 windows 服务器来说,就是它们出现在“网络邻居”中的名字。
service 是各 server 所提供的资源的名字,同样是出现在“网络邻居”中的名字。
password 是存取该资源所需的口令。
如果既没有给出 password 参数,也没有使用 -N 选项。smbclient 会提示用户输入口令;如果目标资源并不需要口令,用户可直接回车跳过。
-N 选项禁止 smbclient 提示用户输入口令,当连接不需要口令的资源时可以使用该选项。
使用 -L 选项将列出远程服务器提供的所有资源。如果不知道服务器的 netbios 名,可以使用 -I 选项来指定它的 IP 地址,如:
smbclient //unknown/service -I 192.168.1.2
使用了 -I 选项之后,servicename 中的 netbios 名部分将被忽略。
smbclient 命令运行之后,会出现如下提示符(和 DOS 提示符比较相像):
smb:\>
quit 或者 exit
退出 smbclient。

b. smbpasswd 命令
smbpasswd 命令除了可以修改用户口令之外,还可以帮助 root 用户添加和删除用户。smbpasswd 命令如果被 root 用户运行,那么它将直接修改口令文件,而不需要借助smbd;如果被普通用户运行,smbpasswd 就以客户机/服务器模式工作,它连接到smbd 以完成必要的修改。客户机/服务器模式使得 smbpasswd 不必成为一个 SUID 程序,避免产生安全漏洞。

smbpasswd命令常用选项有:
1> -a 增加一个用户帐号,该帐号必须出现在 /etc/passwd 文件中,亦即是一个合法的 Linux 帐号,只有 root 可以使用本选项。
2> -d 禁止一个用户帐号,并不将其删除,仅供 root 使用。
3> -e 恢复一个被禁止的用户帐号,仅供 root 使用。
4> -n 将帐号的口令设为空,即将口令字段的前11个字符改为“NO PASSWORD”。
仅供 root 使用。

如:加入一个smb用户
useradd tom
smbpasswd -a tom
回车提示你输入密码,输入你想要的密码即可,就这么简单。
c.mount umount 命令
挂载到本地:mount - t cifs //remote_machine_ipor_domain/share dir  /mnt  -o username=name
注意:上边的用户必需存在

若嫌每次手动挂载麻烦,那教你一招开机自动挂载:写到/etc/fstab里,easy吧?
//remote_machine_ipor_domain/share_dir  /mnt cifs default,username=name,password=your_secret

卸载:umonut /mnt 即可

6.宏描述
%S  当前服务或共享的名称
%P  当前服务或共享的目录
%u  当前服务或共享使用的用户名
%g  %u 所在组的名称
%U  当前会话使用的用户名(登录名?!),即客户机所期望的用户名,可以和客户机真正得到的用户名不同.
%G  %U 所在组的名称
%H  %u 的私人目录(主目录)
%v  Samba 的版本号
%h  Samba 服务器的 NetBIOS 名
%m  客户机的 NetBIOS 主机名(Win9x的机器名)
%L  服务器的 NetBIOS 名
%N  服务器的(?????)名
%M  客户机的 Internet 主机名
%I  客户机的 IP 地址
%T  当前的日期和时间
%d  当前服务器进程 ID
%a  远程客户机的体系结构,目前只能识别WfWg,NT,和 Win 95、98,并且不是100%可靠,其他系统被标示为 UNKNOWN
 
注意:不论你何时何地修改了这个文件/etc/samba/smb.conf,你都应运行一下命令“testparm“来测试你是否犯了一些基本语法的错误。

         有时候你会抱怨,我给了用户权限为什么就是不行呢,有权限的用户不能访问共享区? 

你要知道要想共享区被访问,不但用户拥有权限,而且其共享的目录的权限,这个目录应给用户可开放可读写权限