Samba文件共享服务器-文件服务器

Samba文件共享服务器-文件服务器

Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。

Samba介绍

在早期网络世界当中,档案数据在不同主机之间的传输大多是使用 FTP 这个好用的服务器软件来进行传送。不过,使用FTP 传输档案却有个小小的问题,那就您无法直接修改主机上面的档案数据!也就是说您想要更改Linux 主机上的某个档案时,必需要由 Server 端将该档案下载到 Client端后才能修改,也因此该档案在 Server 与 Client 端都会存在。

既然有这样的问题,可不可以在 Client 端的机器上面直接取用Server 上面的档案,如果可以在 Client 端直接进行 Server 端档案的存取,那么在Client 端就不需要存在该档案数据,也就是说,只要有 Server 上面的档案资料存在就可以!有没有这样的档案系统( File System )?很高兴的是,NFS(NetworkFile System)就是这样的档案系统之一!我只要在 Client 端将 Server所提供分享的目录挂载进来,那么在 Client 的机器上面就可以直接取用 Server上的档案数据,而且,该数据就像 Client 端上面的partition 一般!而除了可以让 Unix Like 的机器互相分享档案的NFS 服务器之外,在微软 ( Microsoft ) 上面也有类似的档案系统,那就是 CommonInternet File System, CIFS 这个咚咚啦!CIFS 最简单的想法就是目前常见的『网上邻居』。Windows 系统的计算机可以透过桌面上『网上邻居』来分享别人所提供的档案数据。不过,NFS仅能让 Unix 机器沟通, CIFS 只能让 Windows 机器沟通。伤脑筋,那么有没有让Windows 与 Unix-Like 这两个不同的平台相互分享档案数据的档案系统?

1991 年一个名叫Andrew Tridgwell 的大学生就有这样的困扰,他手上有三部机器,分别是跑DOS 的个人计算机、DEC公司的 Digital Unix 系统以及 Sun 的 Unix 系统。在当时,DEC 公司发展出一套称为 PATHWORKS 的软件,这套软件可以用来分享 DEC 的Unix 与个人计算机的 DOS 这两个操作系统的档案数据,可惜让 Tridgwell 觉得较困扰的是,Sun的 Unix 无法藉由这个软件来达到数据分享的目的。这个时候 Tridgwell 就想着既然这两部系统可以相互沟通,没道理Sun 就必需这么苦命吧?可不可以将这两部系统的运作原理找出来,然后让 Sun这部机器也能够分享档案数据呢?为了解决这样的的问题,这老兄就自行写了个程序去侦测当 DOS 与 DEC 的 Unix 系统在进行数据分享传送时所使用到的通讯协议信息,然后将这些重要的信息撷取下来,并且基于上述所找到的通讯协议而开发出ServerMessage Block (SMB) 这个系统,而就是这套 SMB软件能够让 Unix 与 DOS 互相的分享数据!

因此 Tridgwell就去申请了 SMBServer ( Server Message Block 的简写 ) 这个名字来做为他撰写的这个软件的商标,可惜的是,因为SMB 是没有意义的文字,因此没有办法达成注册。既然如此的话,那么能不能在字典里面找到相关的字词可以做为商标来注册呢?翻了老半天,呵呵!这个SAMBA刚好含有 SMB ,又是热情有劲的拉丁舞蹈的名称,不如就用这个名字来做为商标好了。如此,这成为我们今天所使用的SAMBA 的名称由来。

安装Samba

$ yum install samba samba-client samba-common

Samba-common:这个套件则主要提供了 SAMBA 的主要设定档(smb.conf) 、 smb.conf 语法检验的测试程序 ( testparm )等等。

samba:这个套件主要包含了 SAMBA 的主要 daemon档案 ( smbd 及 nmbd )、 SAMBA 的文件档 ( document )、以及其它与 SAMBA 相关的logrotate 设定文件及开机预设选项档案等。

samba-client:这个套件则提供了当 Linux 做为SAMBA Client 端时,所需要的工具指令,例如挂载 SAMBA 档案格式的执行档 smbmount等等。

Samba用户

Samba用户必须是系统用户但密码是Samba密码。

$ useradd wode
$ smbpasswd -a wode
$ pdbedit -a -u wode
Samba账户设置别名(/etc/samba/smbusers)
$ vim /etc/samba/smbusers
root = administrator admin
nobody = guest pcguest smbguest
wode = hehe

Samba配置文件

$ cat /etc/samba/smb.conf
[global]
workgroup = WORKGROUP #工作组;
server string = Samba Server #显示名称;
security = user #安全级别;
load printers = YES #加载打印机;
username map = /etc/samba/smbusers #指定名称映射文件;

[home]
comment = Home Directories
browseable = no
writable = yes

[wode] #提供一个共享名称,下面都是为这个共享目录提供的可选择参数,根据需求搭配即可,注意参数之间不可相互矛盾;
comment = share #描述信息;
path = /wode #共享文件路径;
public = yes #是否公开;
browseable = yes #是否可浏览;
writable = yes #可写;
read only = no #是否只读;
writable_list = user1 #定义哪些用户可写;
valid_users = user2 #定义哪些用户可以使用;
invalid_users = user3 #定义哪些用户不可以访问;

[public]
path = /public
public = yes
read only = yes

启动服务

$ service smb restart
Starting SMB services: [ OK ]
Starting NMB services: [ OK ]

Linux挂载Samba共享

需要注意的是挂在端也需要安装cifs相关的文件系统包

$ yum install cifs*
$ mount -t cifs -o username=username,password=password //IP/share /mnt

Linux开机自动挂载samba共享

$ vim /etc/fstab.conf
//IP/share /mnt cifs credentials=/etc/samba/cred.passwd 0 0
$ vim /etc/samba/cred.passwd
username=user
password=redhat
chmod og=-- /etc/samba/cred.passwd

Linux挂载windows共享

$ mount -o username=administrator //IP/share /mnt

免密码版

上面都是设置密码,安全访问模式。有时候你可能需要免密码访问,本人是碰到不同Linux内核版本导致有用户密码模式下总是无法挂载成功,后来就使用免密码模式。共享目录基本配置如下:

[global]
workgroup = SAMBA
security = user
map to guest = Bad User

[mysql_data]
comment = mysql data backup
path = /data/backup
public = yes
browseable = yes
writable = yes
read only = no
guest ok= yes
然后客户端挂载的时候需要注意,比如:
$ mount -t cifs -o rw //172.18.201.6/mysql_data /mnt
Password for root@//172.18.201.6/mysql_data:

还是会出现让输入密码的交互模式,你一回车就会挂载上了。有没有办法去掉这个输出呢?再加一个password参数就ok了。

$ mount -t cifs -o password,rw //172.18.201.6/mysql_data /mnt

CIFS协议在我的使用过程中还是比较稳当和性能不错的,我经常拿来作为数据库备份目录挂载。

推荐阅读