引用一下David_Tang同学的Samba简介:
Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,而SMB是Server Message Block的缩写,即为服务器信息块 。SMB主要是作为Microsoft的网络通讯协议,后来Samba将SMB通信协议应用到了Linux系统上,就形成了现在的Samba软件。后来微软又把 SMB 改名为 CIFS(Common Internet File System),即通用互联网文件系统,并且加入了许多新的功能,这样一来,使得Samba具有了更强大的功能。
Samba最大的功能就是可用于Linux和windows系统的文件共享和打印共享,Samba既可以用于windows与Linux之间的文件共享,也可以用于Linux与Linux之间的资源共享,由于NFS(网络文件系统)可以很好的完成Linux与Linux之间的数据共享,因而 Samba较多的用在了Linux与windows之间的数据共享上面。
SMB是基于客户端/服务器型的协议,然而一台Samba服务器既可以充当文件共享服务器,也可以充当一个Samba的客户端。例如,一台在Linux 下已经架设好的Samba服务器,windows客户端可以通过SMB协议访问Samba服务器上的文件资源,同时,Samba服务器也可以访问网络中其它windows系统或者Linux系统共享出来的文件。
Samba在windows下使用的是NetBIOS协议,如果你要使用Linux下共享出来的文件,请确认你的windows系统下是否安装了NetBIOS协议。
组成Samba运行的有两个服务,一个是SMB,另一个是NMB;SMB是Samba 的核心启动服务,主要负责建立 Linux Samba服务器与Samba客户端间的对话, 验证用户身份并提供对文件和打印资源的访问,只有SMB服务启动,才能实现文件的共享,监听在139/445 TCP端口;而NMB服务是负责解析用的,类似与DNS实现的功能,NMB可以把Linux系统共享的工作组名称与其IP对应起来,监听在137/138 UCP端口,如果NMB服务没有启动,就只能通过IP来访问共享文件。
Samba安装及配置:
1、关闭SELINUX、防火墙
# vim /etc/selinux/config
SELINUX=disabled
# setenforce 0
# service iptables stop
2、安装Samba
# yum install samba4 samba4-client samba4-common samba4-swat
# 安装包解析
samba4:服务器端程序,提供了samba服务器端守护进程(包含了smbd及nmbd),以及其它与samba相关的共享文档、日志、开机启动项等;
samba4-client:客户端程序,它为Linux作为客户端时提供了所需要的工具指令;
samba4-common:提供samba服务器的配置文件和配置文件的语法检测程序testparm;
samba4-swat:提供了基于web的samba图形配置界面。
3、启动Samba
# service smb start
# service nmb start
4、Samba配置及解析
# 简单来说,Samba的配置文件可以分为两段,一段为[global]全局配置段,一段为[share]共享定义段;
# 这里列出一些常用的配置参数:
[global]
workgroup = MYGROUP # 工作组
netbios name = MYSERVER # 当前主机的NIetBIOS名称
server string = Samba Server Version %v # 服务器描述,修改成别的,不应输出
hosts allow = 127. 172.16. 192.168.101. # 基于IP的访问控制
log file = /var/log/samba/log.%m # 访问的每个客户端使用独立的日志
max log size = 50 # 日志文件最大容量(50KB),超过则滚动
security = user # 安全机制
passdb backend = tdbsam # 账号和密码存放的格式
load printers = yes # 是否共享打印机
cups options = raw # 打印选项
socket options = # 配置服务器端和客户端之间会话的socket选项,可优化传输速度。
[share]
comment = share directory # 注释
path = # 共享资源路径
browseable = no # 是否能被浏览
writable = yes # 是否可写
public = yes # 是否能被所有用户读
read only = # 是否为只读的
write list = user1,user2,@group,+group # 定义可写用户列表
valid users = # 允许访问的用户(白名单)
invalid users = # 不允许访问的用户(黑名单)
# 简要说一下samba的用户认证模式,有5种:
1. share:所有人都可以访问这台samba服务器(不需要输入用户名和密码,匿名访问);
2. user:需要输入有效的用户名和密码才能访问samba服务器(需要samba添加验证用户);
3. server:与user相同,只是将身份验证交由指定的另一台samba服务器负责;
4. domain:将身份验证交由域控制器负责;
5. ads:将身份验证交由域控制器负责。
# 以上5种,最为常用的是share 和 user,也就是匿名访问和用户认证访问。
# 一个简单的配置示例(匿名访问)
# 本文使用的是samba4,因samba4中的share匿名认证方式已经被弃用
# 需要将:security = share 改为
# security = user
# map to guest = Bad User
## Start ##
# mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
# vim /etc/samba/smb.conf
[global]
workgroup = WORKGROUP
netbios name = MYSERVER
server string = Linux Samba Server
security = user
map to guest = Bad User
log file = /var/log/samba/%m.log
max log size = 5000
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
[share]
comment = Test Share
path = /data/tshare
public = yes
writeable = yes
browseable = yes
guest ok = yes
readonly = no
:wq!
# 重启smb
# mkdir /data/tshare
# chmod 777 /data/tshare
# service smb restart
## End ##
# 这样,一个可匿名访问、可写的共享目录就完成了,windows访问\\192.168.101.168即可。
# 再来一个用户认证的示例
# vim /etc/samba/smb.conf
[global]
workgroup = WORKGROUP
netbios name = MYSERVER
server string = Linux Samba Server
security = user
encrypt passwords = yes
passdb backend = tdbsam
log file = /var/log/samba/%m.log
max log size = 5000
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
[share]
comment = Test Share
path = /data/tshare
valid users = vuser
public = yes
writeable = yes
browseable = yes
readonly = no
:wq!
# 创建vuser用户
# pdbedit -a vuser
new password:
retype new password:
# 检测语法并重启smb
# chmod 755 /data/tshare
# chown vuser:vuser /data/tshare
# testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[share]"
Loaded services file OK.
# service smb restart
# 注意:这里/data/tshare的目录权限,可使用setfacl进行对应修改。
# 这里提一下passdb backend的三种管理模式
1. smbpasswd:这种方式是使用smb工具smbpasswd给系统用户设置一个samba密码,以文本方式存储,客户端就用此密码访问samba的共享资源,smbpasswd保存在/etc/samba/目录下,需要手动创建。使用方法:passdb backend = smbpasswd:/etc/samba/smbpasswd;注意,这里的系统用户是系统已经存在的真实用户或虚拟用户。
2. tdbsam:sam即security account manager,使用数据库管理samba用户,数据库名一般叫passdb.tdb;可使用smbpasswd -a创建用户,也可以使用pdbedit创建用户,pdbedit有较多的选项,可以使用pdbedit --help查看。
3. ldapsam:基于LDAP的用户管理模式,因对LDAP不太熟悉,这里不作过多介绍,有兴趣的朋友请自行google、baidu。
5、客户端访问共享资源命令
smbclient:
-L NetBIOS_Name:查看对应主机或IP的共享资源
-U username:用户名
Example:smbclient -L 192.168.101.168 -U vuser
6、samba的web图形化管理工具swat
# 注意:因swat是由xinetd超级守护进程管理的(监听在端口901),在安装samba-swat过程中,xinetd也会由依赖安装上,如果没有安装,请手动安装。
# rpm -qa xinetd samba4-swat
# chkconfig --list swat
# chkconfig swat on
# 修改xinetd管理swat配置
# vim /etc/xinetd.d/swat
service swat
{
port = 901
socket_type = stream
wait = no
only_from = 127.0.0.1 192.168.101.0/24
user = root
server = /usr/sbin/swat
log_on_failure += USERID
disable = no
}
# 重启xinetd
# service xinetd restart
# 浏览器访问:http://192.168.101.168:901 ;; 使用root帐号密码登录即可。