一、Samba介绍:


   Server Message Block的缩写是SMB,即服务器消息块,SMB主要是作为Microsoft的网络通讯协议。Samba将SMB通信协议应用到了Linux系统上,使得Samba成为一款能让Linux系统应用Microsoft网络通讯协议的软件。Samba最大的功能可用于Linux与windows系统直接的文件共享和打印共享,Samba既可用于windows与Linux之间的文件共享,也可用于Linux与Linux之间的资源共享,由于NFS的出现,因而Samba更多用在Linux与windows之间的数据共享上面。

  SMB是基于客户机/服务器型的协议,故一台Samba服务器既可当文件共享服务器,也可充Samba的客户端。Samba在windows下使用的是NetBIOS协议,如果你要使用Linux下共享出来的文件,请确认你的windows系统下是否安装了NetBIOS协议。

  组成Samba运行的有两个服务,一个是SMB,另一个是NMBSMB是Samba 的核心启动服务,主要负责建立Samba服务器与Samba客户机之间的对话,验证用户身份并提供对文件和打印系统的访问,只有SMB服务启动,才能实现文件的共享,监听139 TCP端口;而NMB服务是负责解析用的,类似与DNS实现的功能,NMB可以把Linux系统共享的工作组名称与其IP对应起来,如果NMB服务没有启动,就只能通过IP来访问共享文件,监听137138 UDP端口。


   Samba服务器可实现如下功能:

       A、WINS和DNS服务;      

       B、网络浏览服务;        

       C、Linux和Windows域之间的认证和授权;      

       D、UNICODE字符集和域名映射;        

       E、满足CIFS协议的UNIX共享等。


二、安装软件:


   1、安装前的准备工作:      

SELINUX=disabled

   关闭防火墙:service iptables stop


   2、执行如下命令安装samba:

yum install samba


   3、启动samba服务及状态检查:

for i in smb nmb;do service $i start;done


   4、设置开机自启动,并查看是否设置成功:

[root@www ~]# chkconfig smb on
[root@www ~]# chkconfig nmb on
[root@www ~]# chkconfig --list | grep smb
smb             0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@www ~]# chkconfig --list | grep nmb
nmb             0:off   1:off   2:on    3:on    4:on    5:on    6:off



三、服务配置


   Samba服务配置主要是指/etc/samba/smb.conf文件的配置。一般情况下,公司或企业主要分三种情况,即:


   1、公共匿名类共享目录的配置(即匿名账户访问共同的目录或者文件);


   A、配置文件:

   /etc/samba/smb.conf

workgroup = WORKGROUP //定义工作组,也就是windows中的工作组概念
server string = Lmz Samba Server Version %v //定义Samba服务器的简要说明
netbios name = LmzSamba //定义windows中显示出来的计算机名称
log file = /var/log/samba/log.%m        //定义Samba用户的日志文件,%m代表客户端主机名    //Samba服务器会在指定的目录中为每个登陆主机建立不同的日志文件
security = share //共享级别,用户不需要账号和密码即可访问
[shared] //设置针对的是共享目录个别的设置,只对当前的共享资源起作用
comment = Public Stuff //对共享目录的说明文件,自己可以定义说明信息
path = /data //用来指定共享的目录,必选项
public= yes //所有人可查看,等效于guest ok = yes
write list = +magedu    //制定组或用户有可写权限,+或@号后面跟组,用户不用前面带+号或@
guest ok = Yes    //允许来宾用户登陆

 

    B、建立共享目录:

mkdir /data
cd /data
touch samba.txt
touch aa.txt

   Linux下samba详解_samba


为/data目录给匿名用户授权为nobody权限:

[root@www data]# chown -R nobody:nobody /data/
[root@www data]# ll
total 0
-rw-r--r--. 1 nobody nobody 0 Apr  2 20:19 aa.txt
-rw-r--r--. 1 nobody nobody 0 Apr  2 20:17 samba.txt


   C、重启smb服务:

for i in smb nmb;do service $i restart;done


   D、测试smb.conf配置是否正确:

testparm
[root@www data]# testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[homes]"
Processing section "[printers]"
Processing section "[shared]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
[global]
    workgroup = MYGROUP
    server string = Samba Server Version %v
    log file = /var/log/samba/log.%m
    max log size = 50
    idmap config * : backend = tdb
    cups options = raw
[homes]
    comment = Home Directories
    read only = No
    browseable = No
[printers]
    comment = All Printers
    path = /var/spool/samba
    printable = Yes
    print ok = Yes
    browseable = No
[shared]
    comment = Public Stuff
    path = /data
    write list = +magedu
    read only = No
    guest ok = Yes


   E、Linux主机172.16.251.100访问Samba服务器的共享文件:      

[root@station100 ~]# smbclient //172.16.12.1/shared
Enter root's password:
Anonymous login successful
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.9-164.el6]
smb: \> ls
  .                                   D        0  Wed Apr  2 20:19:04 2014
  ..                                 DR        0  Wed Apr  2 15:40:01 2014
  samba.txt                                    0  Wed Apr  2 20:17:27 2014
  aa.txt                                       0  Wed Apr  2 20:19:04 2014
        40317 blocks of size 524288. 37377 blocks available
smb: \> quit


  2、实战题目

   示例:建立samba共享,共享目录为/data,要求:

           1)共享名为shared,工作组为magedu,可以被浏览;

           2)添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组,ubuntu不属于develop组;密码均为用户名;

           3)添加samba用户gentoo,centos和ubuntu,密码均为“mageedu”;

           4)此samba共享shared仅允许develop组具有写权限,其他用户只能以只读方式访问;

           5)此samba共享服务仅允许来自于172.16.0.0/16网络的主机访问;


       vim /etc/samba/smb.conf    

       编辑配置文件,在最下面添加:

[shared]
comment = Public Stuff
path = /data
write list = +magedu  
guest ok = Yes

groupadd develop
useradd -G develop gentoo
useradd -G develop centos
useradd ubuntu
passwd gentoo
passwd centos
passwd ubuntu
smbpasswd -a gentoo
smbpasswd -a centos
smbpasswd -a ubuntu
chmod 777 /data


   Linux下samba详解_linux下samba_02


   登陆测试:


   Linux下samba详解_samba_03



   补充:

       Samba服务密码文件

       samba服务器发布共享资源后,客户端访问samba服务器,需要提交用户名和密码进行身份验证,验证合格后才可以登录。samba服务为了实现客户身份验证功能,将用户名和密码信息存放在/etc/samba/smbpasswd中,在客户端访问时,将用户提交资料与smbpasswd存放的信息进行比对,如果相同,并且samba服务器其他安全设置允许,客户端与samba服务器连接才能建立成功哈~


   那如何建立samba帐号呢?偶在说之前先强调一点哈,samba帐号并不能直接建立滴,需要先建立Linux同名的系统帐号。比如如果我们要建立一个名为michael的samba帐号,那Linux系统中必须提前存在一个同名的michael系统帐号。


samba中添加帐号命令为smbpasswd,命令格式:


smbpasswd -a 用户名


我们来测试下,在samba服务器中添加samba帐号redking,我们建立samba帐号之前必须先添加相对应的系统帐号,使用useradd命令建立帐号redking,然后执行passwd命令为帐号redking设置密码哈~最后我们添加redking用户的samba帐号,执行smbpasswd添加帐号redking到samba配置文件中。


OK,Samba帐号添加完毕哈,如果我们在添加samba帐号时输入完两次密码出错:Failed to modifypassword entry for user amy


这是因为Linux本地用户里没有amy这个用户,我们在系统里面添加一下就OK了哈~


呵,所以,务必要注意在建立samba帐号之前,一定要先建立一个与samba帐号同名的系统帐号。


我们经过上面的设置,再次访问samba共享文件时就可以使用redking或amy帐号访问了。


注意:解决/etc/samba目录下没有smbpasswd文


原因:samba启用了tdbsam验证。


解决:smb.conf文件中注释掉passdb backend = tdbsam一行,加上smb passwd file =/etc/samba/smbpasswd,然后保存退出。


这样再建立用户就产生了/etc/samba/smbpasswd文件了。


使用cat命令查看smbpasswd文件滴内容哈~:cat /etc/samba/smbpasswd