Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。
在早期网络世界当中,档案数据在不同主机之间的传输大多是使用 FTP 这个好用的服务器软件来进行传送。不过,使用FTP 传输档案却有个小小的问题,那就您无法直接修改主机上面的档案数据!也就是说您想要更改Linux 主机上的某个档案时,必需要由 Server 端将该档案下载到 Client端后才能修改,也因此该档案在 Server 与 Client 端都会存在。这个时候,万一如果有一天您修改了某个档案,却忘记将数据上传回主机,那么等过了一阵子之后,如何知道那个档案才是最新的?!
既然有这样的问题,可不可以在 Client 端的机器上面直接取用Server 上面的档案,如果可以在 Client 端直接进行 Server 端档案的存取,那么在Client 端就不需要存在该档案数据,也就是说,只要有 Server 上面的档案资料存在就可以!有没有这样的档案系统( File System )?很高兴的是, NetworkFile System, NFS 就是这样的档案系统之一!我只要在 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这部机器也能够分享档案数据呢?』,为了解决这样的的问题,这老兄就自行写了个program 去侦测当 DOS 与 DEC 的 Unix 系统在进行数据分享传送时所使用到的通讯协议信息,然后将这些重要的信息撷取下来,并且基于上述所找到的通讯协议而开发出ServerMessage Block (SMB) 这个档案系统,而就是这套 SMB软件能够让 Unix 与 DOS 互相的分享数据!( 注:再次的给他强调一次,在Unix Like 上面可以分享档案数据的 file system 是 NFS,那么在 Windows 上面使用的『网络邻居』所使用的档案系统则称为Common Internet File System, CIFS )。因此 Tridgwell就去申请了 SMBServer ( Server Message Block 的简写 ) 这个名字来做为他撰写的这个软件的商标,可惜的是,因为SMB 是没有意义的文字,因此没有办法达成注册。既然如此的话,那么能不能在字典里面找到相关的字词可以做为商标来注册呢?翻了老半天,呵呵!这个SAMBA刚好含有 SMB ,又是热情有劲的拉丁舞蹈的名称,不如就用这个名字来做为商标好了。如此,这成为我们今天所使用的SAMBA 的名称由来。
rpm -qa | grep 'samba'
samba-3.6.9-151.el6.x86_64
//服务器端软件,主要提供samba服务器的守护程序,共享文档,日志的轮替
samba-common-3.6.9-151.el6.x86_64
//主要提供samba服务器的设置文件与设置文件语法检验程序testparm
samba-client-3.6.9-151.el6.x86_64
//客户端软件,主要提供linux主机作为客户端时,所需要的工具指令集
yum -y install samba samba-common samba-client
[jamza@Jamza ~]$ rpm -qa | grep 'samba'
samba-common-tools-4.8.3-4.el7.x86_64
samba-common-4.8.3-4.el7.noarch
samba-client-libs-4.8.3-4.el7.x86_64
samba-libs-4.8.3-4.el7.x86_64
samba-4.8.3-4.el7.x86_64
samba-common-libs-4.8.3-4.el7.x86_64
samba-client-4.8.3-4.el7.x86_64
安装完成后,会生成/etc/samba/smb.conf文件,这是samba服务的主配置文件。
service smb status //查看samba服务状态
service smb start //启动samba服务
service smb restart //重启samba服务
打开samba服务配置文件 /etc/samba/smb.conf,内容如下:
# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.
[global]
workgroup = SAMBA
security = user
passdb backend = tdbsam
printing = cups
printcap name = cups
load printers = yes
cups options = raw
[homes]
comment = Home Directories
valid users = %S, %D%w%S
browseable = No
read only = No
inherit acls = Yes
[printers]
comment = All Printers
path = /var/tmp
printable = Yes
create mask = 0600
browseable = No
[print$]
comment = Printer Drivers
path = /var/lib/samba/drivers
write list = @printadmin root
force group = @printadmin
create mask = 0664
directory mask = 0775
增加模式为:
[shared_name]
path = /path/to/share_directory //共享文件的目录路径
comment = aaa //注释信息
guest ok = {yes|no} //是否允许来宾账号访问
public = {yes|no} //是否公开
writable = {yes|no} //共享权限是否可写
read only = {yes|no} //是否只读,read only = no 相当于writable= yes
browseable = {yes|no} //是否支持浏览
write list = +GROUP_name //组内的人是否可写入,没有+则是用户,
范例:
[share]
path = /home/jamza/share
comment = jamza_share
public = yes
writable = yes
browseable = yes
guest ok = yes
valid users = jamza,root
available = yes
smbpasswd -a jamza //为jamza用户增加共享用户,并设定samba密码
在window端,映射网络驱动器,输入\192.168.0.130\share,然后输入账号janza与密码,即可访问。
注意share为 /etc/samba/smb.conf中的[share]。
对于centos 7.0,默认使用的是firewall作为防火墙。关闭firewall:
systemctl stop firewalld.service
#停止firewall
systemctl disable firewalld.service
#禁止firewall开机启动
firewall-cmd --state
#查看默认防火墙状态(关闭后显示notrunning,开启后显示running)
CentOS中的SELinux是一个很强大的强制访问控制系统,它的全称是Security Enhanced Linux,是强制访问控制系统的一个实现,其目的在于明确的指出某个进程可以访问哪些资源,这些资源包括但不限于文件或网络端口等。
所以,之前在Samba中,共享的文件已经列出,所有者无争议,且权限设置无误的情况下,却依然被拒绝访问,是由于它导致的。在服务器上,这样的安全机制是很有必要的,但是作为开发机,则有些无谓了。既然这样,我们可以通过自己的设置,来配置SELinux。
获取当前SELinux的运行状态:getenforce
返回的结果分为三种:Enforcing,Permissive和Disabled。其中,Enforcing-代表记录警告且阻止可疑行为;Permissive-代表仅记录安全警告但不阻止可疑行为;Disabled表示被禁用。
设置SELinux的运行状态:setenforce [Enforcing | Permissive | 1 | 0]
永久改变的话,就需要配置它的配置文件:vi /etc/sysconfig/selinux
设置SELINUX=xxx(xxx表示你想要的状态,enforcing,permissive或disabled)即可
2 # This file controls the state of SELinux on the system.
3 # SELINUX= can take one of these three values:
4 # enforcing - SELinux security policy is enforced.
5 # permissive - SELinux prints warnings instead of enforcing.
6 # disabled - No SELinux policy is loaded.
7 SELINUX=disabled
8 # SELINUXTYPE= can take one of three values:
9 # targeted - Targeted processes are protected,
10 # minimum - Modification of targeted policy. Only selected processes are protected.
11 # mls - Multi Level Security protection.
12 SELINUXTYPE=targeted