您的位置:首页 > 其它

Samba基础知识和Samba服务器的部署

2016-03-20 19:33 453 查看

一. 传统数据传输的弊端

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

二. 共享服务的出现

如果在 Client 端的机器上面直接取用Server 上面的档案,在 Client 端直接进行 Server 端档案的存取,那么在Client 端就不需要存在该档案数据,也就是说,只要有 Server 上面的档案资料存在就可以。

在类Unix系统中,NFS(NetworkFile System) 就是这样的档案系统之一!我只要在 Client 将 Server所提供分享的目录挂载进来,那么在 Client 的机器上面就可以直接取用 Server上的档案数据,而且,该数据就像 Client 上面的partition(分区) 一般!

那么,在微软的系统中,怎么实现这个功能呢?在NetBIOS出现之后,Microsoft就使用NetBIOS实现了一个网络文件/打印服务系统,这个系统基于NetBIOS设定了一套文件共享协议,Microsoft称之为SMB(Server Message Block)协议。这个协议被Microsoft用于它们Lan Manager和Windows NT服务器系统中,而Windows系统均包括这个协议的客户软件,因而这个协议在局域网系统中影响很大。随着Internet的流行,Microsoft希望将这个协议扩展到Internet上去,成为Internet上计算机之间相互共享数据的一种标准。因此它将原有的几乎没有多少技术文档的SMB协议进行整理,重新命名为 CIFS(Common Internet File System),并打算将它与NetBIOS相脱离,试图使它成为Internet上的一个标准协议。(转自百度百科)

如果我想让windows和类Unix操作系统共享文件,改怎么办?这个时候,Samba就出现了!

三. Samba是什么

Samba是一款基于类unix平台的软件,同样是C/S架构。

Samba使用smb/cifs协议,实现Windows和类Unix主机之间数据的共享。

四. 安装Samba软件包

服务器端:

[root@server ~] # yum -y install samba

类unix系统客户端:

[root@client ~] # yum -y install samba-client cifs-utils

Windows类操作系统本身就支持CIFS和SMB协议,不用安装额外的软件包!

五. Samba共享的访问控制

Samba使用的不是系统账户,也不是匿名用户,也不是虚拟用户,是属于他自己的Samba账户。

所以,创建Samba共享,一定要有Samba账号。Samba账号的特点:

1)新建共享账号时,必须有同名的系统账号。

2)Samba账号和系统账号的密码是独立的。

3)访问共享时使用Samba账号密码登陆、但是权限取决与对应的系统账号。

六. 创建Samba共享账号

创建账号命令格式:创建之前要保证有同名的系统账户,不然无法创建!

[root@server ~] # pdbedit -a username

为账户设置Samba密码,只能登录Samba使用

[root@server ~] # pdbedit -x username

删除密码

[root@server ~] # pdbedit -L

查看samba账户

七. 配置文件

Samba配置文件:/etc/samba/smb.conf

配置文件内容解读:

[global] #全局设置

workgroup = MYGROUP #定义工作组(没有太大的实际意义)

server string = Samba Server Version %v #服务器提示字符(登录服务器的时 候的欢迎字符。建议更改,如果不更改,会显示出版本号)

hosts allow = 192.168.12. #限制登录的主机,默认不限制(更改的时候,建议复制粘 贴再更改)

security = user/share #设置基于账户(user)或匿名(share)的共享

passdb backend = tdbsam #用数据库的方式存放密码

[home] #系统账户共享家目录设置

comment = Home Directories ,共享家目录

writable = yes #Smb帐号,默认共享自己的家目录。

browseable = no, 默认是yes。browseable设置为no表示所有samba用户的宿主目录都不能被看到,只有登录用户才能看到自己的宿主目录,这样设置可以加强samba服务器的安全性。

访问方式:

[root@client ~] # smbclient -U username //服务器地址或域名/username

例:

[root@client ~]# smbclient -U yao //smb.beginner.net.cn/yao

Enter yao’s password:

Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.9-164.el6]

smb: >

打印机共享:

[printers] #定义共享打印机



自定义共享:

[public]

共享名,给客户端看得。是一个模板,如果想建立更多的共享,复制这个模板然后再更改

comment = Public Stuff

注释,可以没有,来标识共享的信息

path = /home/samba

共享的目录绝对路径

public = yes

是否匿名共享。yes表示匿名,no为不 匿名

valid users = user1,user,2,@groupname

如果public=no,定义哪些账户可以访问这个目录,还可以限制组@groupname

writable = yes

是否可写(是否可以上传文件),默认可以下载文件。

write list = user1,user2,@group

可写的列表,如果上面的writable=no,则这个列表里的用户可写

printable = no

是否可以打印(不能写yes,如果写成yes,就成为了一个打印机,就不是目录了,无法打开。用来共享打印机)。

hosts allow = IP 或网段地址

白名单

hosts deny = IP 或网段地址

黑名单

read only = yes

是否只读,注意不要和wirtable冲突!

修改完samba配置文件后,可以使用testparm测试是否有问题:

[root@server ~] # 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 “[share]”

Loaded services file OK.

Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

按回车键,可以查看到具体的共享内容。

注意:Samba和Vsftpd不同。当设置Samba为基于本地账户的模式后,Samba账户名为系统账户名,密码为Samba密码。而FTP账户名为系统账户名,密码为系统密码。

八. 实验

1)实验一:
4000
基于账户的Samba共享

[root@server ~] # yum -y install samba

[root@server ~] # service smb start

[root@server ~] # chkconfig smb on

[root@server ~] # useradd username

[root@server ~] # pdbedit -a username

默认Samba会共享账户的家目录

linux访问Samba共享:

[root@client ~] # smbclient -U username //domain_name | ip_addr/username

windows访问samba共享:



2)实验二:在实验一的基础上,添加更多的共享目录

思路:

在/etc/samba/smb.conf文件的末尾,加入更多的[ ]共享

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



[public] #共享名,给客户端看得

comment = Public Stuff #注释,可以没有,来标识共享的信息

path = /common #共享的目录路径

public = no #是否匿名共享。yes表示匿名,no为不匿名

writable = yes #是否可写

printable = no

write list = +staff #可写的列表,如果上面的writable=no,这个列表里的人可写



[root@server ~] # mkdir /common

[root@server ~] # /etc/init.d/smb restart

[root@server ~] # chmoc o+w /common

使用root新建目录后,把目录开启共享,虽然配置文件中配置的可写,但是others对这个目录依然没有可写权限,所以要给一个o+w权限

3)实验三:设置匿名共享

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



[global]

security = share

[share]



public = yes



4)实验四:Linux作为客户端,访问Samba共享

[root@client ~] # yum -y install samba-client cifs-utils

安装samba客户端软件和cifs协议

[root@client ~] # smbclient -L //服务器地址

查看对方的共享,不需要输入密码

[root@client ~] # smbclient //服务器地址/共享名

匿名访问共享

[root@client ~] # smbclient -U username //服务器地址/共享名

基于账户的访问

5)实验五:Linux客户端在Samba服务器上的下载和上传

[root@server] # tail /etc/samba/smb.conf



[share]

path = /share

public = no

write list = yao

browseable = no

[root@server] # mkdir /share

>[root@server] # setfacl -m u:yao:rwx /share

允许用户上传文件的时候,用户要对目录有w权限。为了安全,使用匿名访问时,上传的文件的own和group都是nobody。

[root@server] # touch /share/smb_get_test

[root@client ~]# smbclient -U yao //smb.beginner.net.cn/share

Enter yao’s password:

Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.9-164.el6]

smb: > get smb_get_test #下载文件

getting file \smb_get_test of size 0 as smb_get_test (0.0 KiloBytes/sec) (average 0.0 KiloBytes/sec)

smb: > put install.log #上传文件

putting file install.log as \install.log (2525.6 kb/s) (average 2525.6 kb/s)

注意:和ftp同样,下载的文件被下载到登陆samba前的目录下;上传的文件在登陆samba服务器前的目录下。

6)实验六:使用mount,把共享目录挂载到本地

匿名:

[root@client ~]# mount [-t cifs] -o guest //服务器地址/共享名 挂载点

本地:

[root@client ~]# mount [-t cifs] -o username=用户名,passwork=密码 //服务器地址/共享名 挂载点

例:

[root@client ~]# mount -t cifs -o username=yao,password=xxx //smb.beginner.net.cn/share /smb_share/

[root@client ~]# df -hT



//smb.beginner.net.cn/share cifs 99G 6.8G 87G 8% /smb_share

也可以写入/etc/fstab文件中,实现开机自动挂载:

[root@client ~]# echo “//smb.beginner.net.cn/share /smb_share cifs username=yao,password=xxx 0 0” >> /etc/fstab

[root@client ~]# df -hT



//smb.beginner.net.cn/share cifs 99G 6.8G 87G 8% /smb_share

7)实验七:提升Samba安全性,使用账户别名

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



[global]

username map = /etc/samba/smbusers #定义别名文件是谁,这个文件可以自己创建。

文件的格式: Unix_name = SMB_name1 SMB_name2 …

[root@client ~]# /etc/init.d/smb restart

基于加密的Samba共享,等博文更新到security后,会在此做链接。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  服务器 samba 数据