我们前面介绍的NFS服务只能在Linux系统之间实现文件共享,但是企业网络中的绝大多数客户端都是使用Windows系统,那么我们能否在一台安装有Linux系统的服务器上设置文件共享,然后作为文件服务器提供给网络中的Windows客户端访问呢?这就要用到Samba服务。
Samba服务的主要功能就是实现Linux系统和Windows系统之间的互访,既可以在Windows客户端上访问Linux服务器上的文件共享,也可以在Linux客户端上访问Windows服务器上的文件共享,因而相比NFS服务更具有实践意义。
Samba服务基于SMB服务消息块协议和CIFS通用互联网文件系统协议,Samba服务对应的进程有2个:
文件共享功能主要是由smbd进程提供的,nmbd进程主要提供主机名称解析功能,也就是令客户端可以通过计算机名的方式去访问服务端。我们主要考虑的是smbd进程,它对应的进程服务名为smb。
Samba服务默认并没有安装,所以我们要先执行“yum install samba”命令安装服务。
安装完成后,启动服务,并设为永久启动。
[root@localhost ~]# service smb start
启动 SMB 服务: [确定]
[root@localhost ~]# chkconfig smb on
Samba服务的主配置文件为/etc/samba/smb.conf,该文件中的内容比较多,其中大多是以“#”开头的注释行,以及以“;”开头的配置样例行。样例行是对配置内容的举例,用户可以参考样例行进行配置。无论是注释行还是样例行,Samba服务器都将予以忽略。
使用vim编辑器打开该文件,可以发现其中主要包括三部分内容:
【global】全局设置:这部分配置项的内容对整个Samba服务器有效。
全局配置中的主要设置项目:
设置Samba服务器所在的工作组以及对工作组的描述信息。当在Windows客户端上通过网上邻居的方式访问文件共享时,才需要用到工作组,我们现在已经很少去使用网上邻居了,所以这部分信息如何设置都无所谓。
这部分是用来设置Samba服务器的日志存放位置以及日志文件大小,一般无需改动。
security用来设置安全级别,passdb backend用来设置用户密码存放位置。
其中security是全局设置中最重要的一个设置项目,主要有以下几种安全级别:
安全级别中比较常用的是share和user。
除了全局设置之外,另外两部分是对用户主目录和打印机的默认共享设置。
[homes]部分是对用户主目录的默认共享设置,也就是说Samba服务器默认将所有用户的主目录都设为了共享。当在客户端以Samba服务器中某个系统用户的身份登录时,就会看到自己的主目录,并且具有写入权限。当然每个用户只能看到自己的主目录,别人的主目录是无法看到的。
[printers]部分是打印机的默认共享设置,如果系统中并没有安装打印机,那么可以将这部分内容注释掉,或者无需理会。
下面我们来创建一个最简单的匿名共享,即所有客户端无需进行身份验证,直接就可以访问共享文件。
首先创建共享目录,并在其中放一个测试文件:
[root@localhost ~]# mkdir /home/share
[root@localhost ~]# echo ‘hello,world!’ > /home/share/hello.txt
然后修改配置文件:
[root@localhost ~]# vim /etc/samba/smb.conf
首先在【global】全局设置中设置“security = share”,允许匿名访问。
然后按“G“键将光标移动到文件末尾,在这里提供了一个设置范例:
我们可以按照这个范例来设置要共享的目录:
对设置项目的解释:
[share]:共享名,可自由定义。
comment:对共享的描述信息,可自由定义。
path:共享目录的路径,必须为绝对路径。
public:是否允许所有用户访问。
writable:是否允许写入。
范例中倒数第二行的printable,是指是否需要提供打印共享,这个一般无需设置。
范例中的最后一行write list,是指允许写入的用户列表。由于我们设置了拒绝写入,所以这一项也不需设置。
设置完成后,保存退出,然后重启smb服务生效。
[root@localhost ~]# service smb restart
然后我们在另一台Windows客户端上进行访问测试,输入Samba服务器文件共享的UNC路径:
但此时却发现虽然可以匿名访问,并可以看到share共享目录,但却无法看到其中的内容,这是由于Samba服务器上的SELinux导致的,关于SELinux的配置我们也放到以后再说,这里先将Selinux关闭,也就是将其改为许可模式。
[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce
Permissive
然后在客户端再次测试,就可以正常访问了。
本文转自 yttitan 51CTO博客,原文链接:http://blog.51cto.com/yttitan/1198906