文件服务器Samba
Samba是一种在Linux环境中运行的免费软件,利用Samba,Linux可以创建基于Windows的计算机共享。另外,Samba还提供一些工具,允许Linux用户从Windows计算机进入共享和传输文件。Samba是基于Server Messages Block的协议,可以为局域网内的不同计算机系统之间提供文件及打印机等资源的共享服务。
Samba服务简介
SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba方便在网络中共享资源。
Samba服务安装配置
在进行Samba服务安装之前首先了解下网络邻居工作原理。网上邻居的工作模式是一个典型的客户端/服务器工作模式,首先,单击【网络邻居】图标,打开网上邻居列表,这个阶段的实质是列出一个网上可以访问的服务器的名字列表。其次,单击【打开目标服务器】图标,列出目标服务器上的共享资源,接下来,单击需要的共享资源图标,进行需要的操作(这些操作包括列出内容、增加、修改或删除内容等)。在单击一台具体的共享服务器时,先发生了一个名字解析过程,电脑会尝试解析名字列表中的这个名称,并尝试进行连接。在连接到该服务器后,可以根据服务器的安全设置对服务器上的共享资源进行允许的操作。Samba服务器可以提供的功能为可以在Linux之间或Linux与Windows之间共享资源。
1.Samba的安装
要安装Samba服务器,可以采用两种方法:从二进制代码安装和从源代码安装。初学者建议使用RPM来安装;较为熟练的使用者可以采取源码安装的方式。本节采用源码安装的方式,最新的源码可以在http://www.samba.org/获取,本节采用的软件包为samba-4.2.0.tar.gz,安装过程如【示例1-1】所示。
【示例1-1】
#安装gcc编译器及samba以来的软件包
[root@node1 ~]# yum install -y gcc python-devel gnutls-devel libacl-devel openldap-devel
[root@node1 ~]# wget https://download.samba.org/pub/samba/stable/samba-4.2.0.tar.gz
#解压压缩包
[root@node1 ~]# tar xvf samba-4.2.0.tar.gz
[root@node1 ~]# cd samba-4.2.0
#首先检查系统环境并生成MakeFile
[root@node1 samba-4.2.0]# ./configure --prefix=/usr/local/smaba
#编译
[root@node1 samba-4.2.0]# make
#安装
[root@node1 samba-4.2.0]# make install
#安装完毕后进入主目录查看
[root@node1 samba-4.2.0]# cd /usr/local/samba/
[root@node1 samba]# ls
bin etc include lib lib64 private sbin share var
在主目录中的bin和sbin子目录中,包含了Samba最主要的程序:
- smbd:SMB服务器,为客户机如Windows等提供文件和打印服务。
- nmbd:NetBIOS名字服务器,可以提供浏览支持。
- smbclient:SMB客户程序,类似FTP程序,用以从Linux或其他操作系统上访问SMB服务器上的资源。
- smbmount:挂载SMB文件系统的工具,对应的卸载工具为smbumount。
- smbpasswd:用户增删登陆服务端的用户和密码。
2.配置文件
以下是一个简单的配置,允许特定的用户读写指定的目录,如【示例1-2】所示。
【示例1-2】
#创建共享的目录并赋予相关用户权限,这行代码有问题,会error
[root@node1 bin]# useradd test1
[root@node1 bin]# useradd test2
[root@node1 bin]# mkdir -p /data/test1
[root@node1 bin]# chown -R test1.users /data/test1
[root@node1 bin]# mkdir -p /data/test2
[root@node1 bin]# chown -R test2.users /data/test2
#samba配置文件默认位于此目录
[root@node1 etc]# pwd
/usr/local/samba/etc
[root@node1 etc]# cat smb.conf
[global]
workgroup = mySamba
netbios = mySamba
server string = Linux Samba Server Test
security = ueer
[test1]
path = /data/test1
writeable = yes
browseable = yes
[test2]
path = /data/test2
writeable = yes
browseable = yes
guest ok = yes
[global]表示全局配置,是必须有的选项。以下是每个选项的含义。
- workgroup:在Windows中显示的工作组。
- netbios name:在Windows中显示出来的计算机名。
- server string:就是Samba服务器说明,可以自己来定义。
- security:这是验证和登录方式,share表示不需用户名和密码,对应的另外一种为user验证方式,需要用户名密码。
- [test]:表示Windows中显示出来的是共享的目录。
- path:共享的目录。
- writeable:共享目录是否可写。
- browseable:共享的目录是否可以浏览。
- guest ok:是否允许匿名用户以guest身份登录。
3.服务启动
首先创建用户目录及设置允许的用户名和密码,认证方式为系统用户认证,要添加的用户名需要在/etc/passwd中存在,如【示例1-3】所示。
【示例1-3】
#设置用户test1的密码
[root@node1 bin]# ./smbpasswd -a test1
Unknown parameter encountered: "netbios"
Ignoring unknown parameter "netbios"
New SMB password:
Retype new SMB password:
Added user test1.
#设置用户test2的密码
[root@node1 bin]# ./smbpasswd -a test2
Unknown parameter encountered: "netbios"
Ignoring unknown parameter "netbios"
New SMB password:
Retype new SMB password:
Added user test2.
#启动命令
[root@node1 bin]# /usr/local/samba/sbin/smbd
[root@node1 bin]# /usr/local/samba/sbin/nmbd
#停止命令
[root@node1 bin]# killall -9 smbd
[root@node1 bin]# killall -9 nmbd
samba开放tcp/139,445端口,udp/137,138端口。
1)Port 137 (UDP) - NetBIOS 名字服务 ; nmbd
2)Port 138 (UDP) - NetBIOS 数据报服务
3)Port 139 (TCP) - 文件和打印共享 ; smbd (基于SMB(Server Message Block)协议,主要在局域网中使用,文件共享协议)
4)Port 389 (TCP) - 用于 LDAP (Active Directory Mode)
5)Port 445 (TCP) - NetBIOS服务在windos 2000及以后版本使用此端口, (Common Internet File System,CIFS,它是SMB协议扩展到Internet后,实现Internet文件共享)
6)Port 901 (TCP) - 用于 SWAT,用于网页管理Samba
#开放端口
[root@node1 bin]# firewall-cmd --per --add-port=137/udp
[root@node1 bin]# firewall-cmd --per --add-port=138/udp
[root@node1 bin]# firewall-cmd --per --add-port=139/tcp
[root@node1 bin]# firewall-cmd --per --add-port=389/tcp
[root@node1 bin]# firewall-cmd --per --add-port=445/tcp
[root@node1 bin]# firewall-cmd --per --add-port=901/tcp
[root@node1 bin]# firewall-cmd --reload
[root@node1 bin]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: dhcpv6-client ssh
ports: 137/udp 138/udp 139/tcp 389/tcp 445/tcp 901/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
启动完毕可以使用**ps**
命令和**netstat**
命令查看进程和端口是否启动成功。
4.服务测试
打开Windows中的资源管理器,输入地址\192.168.1.128,按Enter键,弹出用户名密码校验界面,输入用户名密码,如图3.1所示。
验证成功后可以看到共享的目录,进入test1,创建目录testdir,如图3.2所示。可以看到此目录对于test1用户是可读可写的,与之对应的是进入目录test2,发现没有权限写入,如图3.3所示。

以上演示了Samba的用法,要求用户在访问共享资源之前必须先提供用户名和密码进行验证。Samba其他的功能可以参考系统帮助。