在我们使用 Windows 作为客户机的时候,通常有文件、打印共享的需求。作为Windows 网络功能之一,通常可以在 Windows 客户机之间通过 Windows Network 固有的功能实现这些要求。然而,通过 Samba 我们也可以让一台 Fedora 主机来兼容 Windows 网络,实现同样的功能,进而充分发挥 Fedora 主机的可用性。
本文主要介绍怎样通过 Samba 服务器的构建实现 Windows 网络中的文件共享。
..........................
在我们使用 Windows 作为客户机的时候,通常有文件、打印共享的需求。作为Windows 网络功能之一,通常可以在 Windows 客户机之间通过 Windows Network 固有的功能实现这些要求。然而,通过 Samba 我们也可以让一台 Fedora 主机来兼容 Windows 网络,实现同样的功能,进而充分发挥 Fedora 主机的可用性。
本文主要介绍怎样通过 Samba 服务器的构建实现 Windows 网络中的文件共享。
SMB协议是建立在NetBIOS协议之上的应用协议,是基于TCP138、139两个端口的服务,NetBIOS出现之后,Microsoft就使用NetBIOS实现了一个网络文件/打印服务系统。这个系统基于NetBIOS设定了一套文件共享协议,Microsoft称之为SMB(Server Message Block) 协议,这个协议被用于Lan Manager和Windows服务器系统中,实现不同计算机之间共享打印机和文件等。因此,为了让Windows和Unix/Linux计算机相集成,最好的办法就是在 Unix/Linux计算机中安装支持SMB协议的软件。这样使用Windows的客户端不需要更改设置, 就能像使用Windows NT或Windows 2000服务器一样,使用Unix/Linux计算机上的共享资源了。
Samba使SMB协议运行在NetBIOS协议上,并且使用Windows的NetBEUI协议让Unix/Linux服务器可以在Windows的网络邻居上被访问到。
首先,通过 yum 来在线安装 Samba 。
yum -y install samba
然后,通过编辑 /etc/samba/smb.conf ,根据需求配置 Samba。在这里,本文的原则是只将文件共享应用于内网,并让将要被共享的目录拥有充分的读写权限属性。
[root@sample ~]# vi /etc/samba/smb.conf ← 编辑 Samba 的配置文件
workgroup = WORKGROUP // 设置工作组
server string = %U's samba %v // 描述信息%U代表当前登陆用户
netbios name = fedora //netbios 名字,fedora9 默认没有启用
log file = /var/log/samba/log.%m // 日志文件保存路径%m你的windows主机名
max log size = 50 // 日志最大容量
security = user // 安全级别,user需要用户名和密码,share级别则不要
[samba] // 建立一个共享名为samba的共享
comment = samba // 描述信息
path = /home/suyang/samba // 共享路径
public = no // 是否允许guest用户访问(相当于guest ok = yes/no)
writable = yes // 是否可写
write list = suyang // 可以写入的用户列表( @ 代表用户组 )
接下来,创建将要通过 Samba 共享给 Windows 网络的专用目录。
[root@sample ~]# mkdir /home/suyang/samba ← 建立共享文件专用目录
[root@sample ~]# chown -R nobody. /home/suyang/samba ← 设置专用目录归属为 nobody
[root@sample ~]# chmod 777 /home/suyang/samba ← 将专用目录属性设置为 777
在进行到服务端的连接之前,需要预先对用于登录 Samba 的用户进行设置。这里我们以 Fedora 中 Samba 标准的 Samba 用户数据库管理工具“smbpasswd”为例,创建用于登录 Samba 的用户数据。这里需要注意的一点:用 smbpasswd 创建用户的前提是,系统用户中存在该用户 -- 在基于系统用户之上,才可以创建该用户在 Samba 用户数据库中的信息。
[root@sample ~]# smbpasswd -a suyang ← 将系统用户 suyang(例)加入到 Samba 用户数据库
New SMB password: ← 输入该用户用于登录 Samba 的密码
Retype new SMB password: ← 再次确认输入该密码
在启动 Samba 服务之前,首先将防火墙设置中 Samba 所用到的端口进行开放。
[root@sample ~]# vi /etc/sysconfig/iptables ← 编辑 iptables 配置文件
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT ← 找到此行,在下面添加如下行:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 137 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 138 -j ACCEPT
[root@sample ~]# /etc/rc.d/init.d/iptables restart ← 重新启动 iptables ,使新的规则生效
Flushing firewall rules: [ OK ]
Setting chains to policy ACCEPT: filter [ OK ]
Unloading iptables modules: [ OK ]
Applying iptables firewall rules: [ OK ]
最后,启动 Samba 服务(含两个守护进程:smb,nmb)。
[root@sample ~]# chkconfig smb on ← 设置 Samba 自启动
[root@sample ~]# chkconfig --list smb ← 确认 Samba 启动标签,确认 2-5 为 on 的状态
smb 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@sample ~]# chkconfig nmb on ← 设置 nmb 自启动
[root@sample ~]# chkconfig --list nmb ← 确认 nmb 启动标签,确认 2-5 为 on 的状态
nmb 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@sample ~]# /etc/rc.d/init.d/smb start ← 启动 Samba 服务
Starting SMB services: [ OK ]
[root@sample ~]# /etc/rc.d/init.d/nmb start ← 启动 nmb 服务
Starting NMB services: [ OK ]
[注意:]
1. smbd 监听139 TCP端口 设置共享目录、打印等
2. nmbd 137. 138 UDP端口 管理群组、NetBIOS 等解析工作
这里要注意的是fedora9基于安全考虑,把smb和nmb两个服务给分离了,平时我们在使用samba服务的时候,在启动smb服务的同时nmb这个服务也会跟着启动,fedora9中则不然,这就造成了我们设置好fedora9中共享的时候,只能使用[url=file://ip/]""ip[/url] 来访问,而不能使用[url=file://计算机名/]""计算机名[/url] 来访问,解决的办法就是同时启动smb和nmb服务 。
从 Windows 客户端连接到 Samba 服务器
在服务端启动 Samba 服务后,我们就可以从 Windows 客户端通过 Windows 网络连接到 Samba。这里以 Windows XP 为例,说明如下连接过程:
1、从桌面打开“网上邻居”,并点击“查看工作组计算机”选项;
2、确认出现 Samba 服务端的连接,并双击该连接;(本站文档的主机名以 Sample 为例)
3、输入在服务端预先设置好的 Samba 用户的用户名及密码;(用户名同系统用户名,密码需要输入在通过 smbpasswd 为该系统用户设置的 Samba 专用的密码。)
4、然后确认能够连接到 Samba 服务器,并出现根目录及 Samba 专用共享目录。
最后,在相应目录进行新建、修改以及删除文件的操作,测试相应权限的可操作性。
[注意:]
在其它版本的 linux 中( AS5,AS4 , Centos )中做如上设置后就可以正常访问共享了,但是在 fedora9 中却不行,我们只能看到共享,但是访问的时候会出现拒绝访问的情况,这是为什么呢? 因为 selinux 对 samba 共享做了限制,我们只用把 selinux 中对 samba 的限制给解决了就行了,我们做如下设置就 OK 了,这也是我做此教程的目的:
#setsebool –P samba_enable_home_dir on
#setsebool –P samba_export_all_ro on
#setsebool –P samba_export_all_rw on
我们可以用命令getsebool –a | grep samba
查看上面三项是否打开,打开的话你的共享应该就正常了。