类Unix主机之间可以使用NFS服务实现文件共享,实现起来也很方便。
在Windows主机之间使用Windows文件共享同样可以实现包括网络文件在内的系统资源的共享。
如果想在linux和Windows主机之间进行文件的共享,使用samba服务器是比较理想的解决方案。
linux主机与Windows主机之间进行文件共享的方式
在构建linux主机和Windows主机的混合应用系统中,linux主机用过使用samba服务器和客户机与Windows主机实现共享文件互相访问。主要有以下三种应用方式:
1. linux主机运行samba服务器,Windows主机作为客户端。
2. linux主机运行samba服务器,在linux主机中使用samba客户端程序对samba服务器进行测试,并访问服务器中的共享资源。
3. Windows主机提供文件共享服务。linux主机中使用samba客户端程序访问Windows共享文件。
通过以上三种文件共享的使用方式可以看出,linux主机与Windows主机之间进行文件共享的互访主要涉及到samba服务器、samba客户端、和Windows服务器3个角色,其中Windows服务器既可以提供文件共享服务也可以作为客户机访问其他服务器中的共享文件,Windows与linux主机之间共享文件互访关系图:
samba服务器的基本原理
samba服务器在linux系统上实现了SMB/CIFS协议,即可以在linux系统中为Windows主机提供网络文件共享服务。samba服务器中包括两个服务程序:
smbd服务程序为客户机提供了服务器中共享资源(目录和文件等)的访问。
nmbd服务程序提供了netbios主机名称解析,为Windows网络中或者工作组内的主机进行主机名称的解析。
samba服务器需要smbd和nmbd两个服务程序同时运行。
samba服务器的安装
所需软件包:
samba-common软件包:提供了samba服务器和客户机都必须使用的公共文件。
samba-client软件包:提供了samba客户机所有的文件。
samba软件包:提供了samba服务器所有的文件。
建立samba用户,在建立samba用户之前需要建立同名的linux系统帐号。
关于smbpasswd命令选项:
-h:显示smbpasswd的命令格式帮助
-a:添加指定的用户帐号
-d:禁用指定的用户帐号
-e:启用指定的用户帐号
-x:删除指定的用户帐号
没有添加任何选项时候将改变用户密码。
认识samba服务器主配文件:smb.conf
[global] 部分是samba服务器的全局设置,对整个服务器有效。
[homes] 部分是设置用户共享目录属性。
[printers] 部分设置了samba服务器中打印共享资源的属性,samba服务器除了可以提供文件共享,还可以提供打印共享。
[global]部分详解:
workgroup 设置samba服务器所在的工作组,默认是:MYGROUP
server string 设置samba服务器的说明,用于描述服务器。
log file 设置samba服务器的日志文件,默认是:/var/log/samba/log.%m
max log size 设置日志文件的最大容量,默认是50,单位KB。
security 设置samba服务器和客户端的认证方式,默认是user。一共有4种方式:
share 表示用户不需要账户及密码即可登录服务器。
user 表示登录samba服务器需要用户和密码。
server 表示检查账户及密码的工作指定由另一台Windows服务器或者samba服务器负责。
domain 指定Windows域控制器来验证用户和密码。
[homes]部分详解:
comment 设置共享的说明信息
browseable 设置为no表示所有samba用户的宿主目录都不能被看到,只有登录用户才能看见自己的宿主目录。
writable 设置为yes表示用户可以对该共享目录写入。
更多享目录常见设置项:
path 用户设置共享目录对应的linux系统目录路径。
public 设置为yes表示该共享目录对于所有samba用户是可见的。
only guest 设置为yes表示所有用户在使用该共享目录时的用户身份是guest,就是系统用户nobody。
writable 设置为yes表示该共享目录对于用户可写。
valid users 允许指定用户访问共享目录。
示例:建立一个public共享目录
smb.conf配置文件:
# grep -v "^#" /etc/samba/smb.conf | grep -v "^;"
[global]
workgroup = MYGROUP
server string = Samba Server Version %v
# logs split per machine
log file = /var/log/samba/log.%m
# max 50KB per log file, then rotate
max log size = 50
security = user
passdb backend = tdbsam
load printers = yes
cups options = raw
#obtain list of printers automatically on SystemV
[homes]
comment = Home Directories
browseable = no
writable = yes
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes
[public]
comment = Public Stuff
path = /home/public
public = yes
writable = yes
only guest = yes
对配置文件测试:
# testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: rlimit_max (1024) below minimum Windows limit (16384)
Processing section "[homes]"
Processing section "[printers]"
Processing section "[public]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
[global]
workgroup = MYGROUP
server string = Samba Server Version %v
log file = /var/log/samba/log.%m
max log size = 50
cups options = raw
[homes]
comment = Home Directories
read only = No
browseable = No
[printers]
comment = All Printers
path = /var/spool/samba
printable = Yes
browseable = No
[public]
comment = Public Stuff
path = /home/public
read only = No
guest only = Yes
guest ok = Yes
testparm命令显示的配置清单和smb.conf内容稍有不同,但是含义是完全一样的!
启动samba服务器
samba服务器配置完成。