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