samba是著名的开源软件项目,在linux/unix系统中实现了SMB/CIFS网络协议的跨平台的文件共享系统

1.samba服务的组成

samba-3.0.33-3.28.el5.i386.rpm
samba-client-3.0.33-3.28.el5.i386.rpm

上面两个分别用于提供服务器和客户端程序文件

samba-common-3.0.33-3.28.el5.i386.rpm  软件包提供了服务器和客户端都需要使用的公共文件

samba-swat-3.0.33-3.28.el5.i386.rpm   软件包是一个web方式的管理工具

system-config-samba-1.2.41-5.el5.noarch.rpm  用于提供图形界面管理程序(需要在X图形环境中使用)

2.samba服务器主要提供这两个服务程序

》smbd:为客户机提供服务器中共享资源的访问
》nmbd:提供基于NetBIOS主机名称的解析,为Windows网络中的主机进行名称解析

通过"/etc/init.d/smb"脚本可以控制 samba服务的启动和中指,无需单独运行smbd或nmvbd

samba服务的配置文件位于"/etc/samba/"目录,主配置文件为smb.conf。在该文件中,注释行一“#”开始,配置样例行一“;”开始。当我们可以用grep过滤掉smb.conf配置文件中的注释、样例及空白行

[root@router ~]# grep -v "^#" /etc/samba/smb.conf |grep -v "^;" |grep -v "^$"

[global]
        workgroup = WORKGROUP
        server string = Samba Server Version %v
        # logs split per machine
        # max 50KB per log file, then rotate
        security = user
        passdb backend = tdbsam
        # the login script name depends on the machine name
        # the login script name depends on the unix user used
        # disables profiles support by specifing an empty path
        load printers = yes
        cups options = raw
        #obtain list of printers automatically on SystemV
[homes]
        comment = Home Directories
        browseable = no
        writable = yes
[printers]
        comment = All Printers
        path = /var/spool/samba
        browseable = no
        guest ok = no
        writable = no
        printable = yes

3.smb.conf配置文件默认包括以下三部分内容

》[global]全局设置:配置项里的内容对整个samba服务器生效
》[homes]用户目录共享设置:设置对应samba用户宿主目录的默认共享,即当用户访问服务器中与用户名同名的共享文件夹时,默认会映射到自己的宿主目录,
》[printers]打印机配置

4.smb.conf文件配置项及含义说明

workgroup设置服务器所在工作组名称。

serverstring设置服务器的说明文字,用于描述samba服务器。

security设置服务器的安全级别,一共四种值:

    share(可匿名访问)

    user(需由本服务器验证用户名及密码)

    server(有另一台服务器验证用户名及密码)

    domain(有windows域控制器验证用户名及密码)

logfile设置samba服务器的日志文件,默认设置为“/var/log/samba/%m.log”,表示日志文件保存到“/var/log/samba/”目录中,按每个客户机建立一个日志文件,“%m”变量表示客户端主机名或IP地址。

maxlogsize设置日志文件的最大容量,默认为50,表示50KB(默认单位为KB)。

comment设置对应共享目录的注释,说明信息。

path设置对应共享目录在服务器中的文件夹路径。

browseable设置该共享目录在“网上邻居”中是否可见,设置为no时相当于隐藏共享目录。

guestok设置是否所有人都可以访问共享目录,与public配置项作用相同。

writable设置该共享目录是否可写,与readonly的作用相同。

5.samba提供了一个配置文件检查工具:testparm程序,使用testparm 工具可以对smb.conf配置文件的正确性进行检查,如果发现错误将会进行提醒,

6.建立可匿名访问的文件共享

1>建立共享目录

[root@router ~]# mkdir -p /var/public/work

2>配置主配置文件(将其备份并将其筛选出)

[root@router samba]# mv smb.conf smb.conf.bak

[root@router samba]# grep -v "^#" /etc/samba/smb.conf.bak |grep -v "^;" |grep -v "^$" > smb.conf

[root@router samba]# vim smb.conf

[root@router samba]# cat smb.conf

[global]
        workgroup = WORKGROUP
        security = share

[work]
        comment = All Printers
        path = /var/public/work
        browseable = yes
        writable = yes
        public = yes

3>配置完毕即可执行“service smb start”命令启动smb 

[root@router ~]# service smb start

[root@router ~]# netstat -anptu | grep mbd
tcp        0      0 0.0.0.0:139                 0.0.0.0:*                   LISTEN      32477/smbd          
tcp        0      0 0.0.0.0:445                 0.0.0.0:*                   LISTEN      32477/smbd          
udp        0      0 192.168.1.101:137           0.0.0.0:*                               32480/nmbd          
udp        0      0 0.0.0.0:137                 0.0.0.0:*                               32480/nmbd          
udp        0      0 192.168.1.101:138           0.0.0.0:*                               32480/nmbd          
udp        0      0 0.0.0.0:138                 0.0.0.0:*                               32480/nmbd        
到此即可访问共享目录

7.建立带验证的文件共享

Samba 服务器在使用过程中, 经常涉及三类用户: Windows用户、UNIX/Linux 用户、Samba 用户。

Samba 用户是Windows用户与UNIX/Linux 用户的共同包含的部分, 但要注意这样几点: 

①只有Samba 用户才可以合法使用Samba 服务器。

②Samba用户必须首先是UNIX/Linux 用户, 反之不一定成立。

③ 将UNIX /Linux 用户转换为Samba 用户时, 名称可以改变。

④Samba 用户可以不是Windows 用户。

1>建立samba用户

[root@router ~]# useradd cane

[root@router ~]# smbpasswd -a cane
New SMB password:
Retype new SMB password:
Added user cane.

[root@router ~]# smbpasswd -a root
New SMB password:
Retype new SMB password:
Added user root.

samba用户存放在此文件中

[root@router ~]# cat /etc/samba/smbpasswd 
cane:500:F73CA4862113B785AAD3B435B51404EE:4AF411D2B648DAC8F495340AA7C13DC3:[U          ]:LCT-50B5FFA3:
root:0:D480EA9533C500D4AAD3B435B51404EE:329153F560EB329C0E1DEEA55E88A1E9:[U          ]:LCT-50B5FFB6:

smbpasswd 命令的多个选项,结合使用进行管理维护

》-h:显示smbpasswd命令的帮助信息

》-a:添加指定的用户账号

》-d:禁用指定的用户账号

》-e:启用指定的用户账号

》-x:删除指定的用户账号

》不适用任何选项时用于修改samba用户的密码

Samba服务器有用户名称映射的功能,配置文件位于“/etc/samba/smbusers”,映射是指可以设置多个不同的用户名对应为一个samba账户,起到隐藏对应系统账户的效果,减少密码穷举攻击的风险

[root@router ~]# cat /etc/samba/smbusers 

# Unix_name = SMB_name1 SMB_name2 ...

cane = zhangsan lisi

在主配置文件smb.conf中要加上以下行

[root@router ~]# vim /etc/samba/smb.conf

    username map = /etc/samba/smbusers     //在[global]全局配置中指定名称映射文件

这样就可以用zhangsan 和 lisi访问文件系统了,只告诉cane的密码,由于不知道cane这个账户,所以不能登录系统,比较安全

2>添加用户授权设置

  在smb.conf中,共享目录的用户授权设置主要由“valid users”、“write list”配置项指定,同时要取消公开访问的设置

  需要授权多个用户是用空格或逗号分隔,注意不能用账户别名,而只用实际的samba用户名,授权组是可以用“@组名”的形式,组内的每个用户都需要有对应的samba账户

  若需要设置samba用户在共享目录中建立的子目录、文件的默认权限,可以用“directory mask”、“create mask”。

[root@router ~]# cat /etc/samba/smb.conf
[global]
        workgroup = WORKGROUP
        security = user
[homes]
        comment = Home Directories
        browseable = no
        writable = yes
[work]
        comment = All Printers
        path = /var/public/work
        browseable = yes
        writable = yes
        public = no
        readonly = no
        valid users = cane,@root
        write list = root
        directory mask = 0744
        create mask = 0600

重启samba服务即可

[root@router ~]# service smb restaart


linux下访问

[root@router ~]# smbclient -L IP

[root@router ~]# smbclient -U cane //IP/work 

将共享目录挂载到linux下

[root@router ~]# mkdir -p /media/smbdir

[root@router ~]# mount -o username=cane //IP/work /media/smbdir