SAMBA简介
Samba是linux和unix系统上实现SMB/CIFS协议的一个免费软件,由服务器和客户端程序构成。而SMB是局域网支持共享文件和打印机的一种通信协议,为局域网内不同计算机之间提供文件及打印机等资源的共享服务 ,最初SMB主要是作为Microsoft的网络通讯协议,后来一个名叫Andrew Tridgwell 的大学生将SMB通信协议应用到了Linux系统上,就形成了现在的Samba软件。后来微软又把 SMB 改名为 CIFS(Common Internet File System),即公共 Internet 文件系统,并且加入了许多新的功能,这样一来,使得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 TCP端口;而NMB服务是负责解析用的,类似与DNS实现的功能,NMB可以把Linux系统共享的工作组名称与其IP对应起来,如果NMB服务没有启动,就只能通过IP来访问共享文件,监听137和138 UDP端口。
例如,某台Samba服务器的IP地址为10.0.0.163,对应的工作组名称为davidsamba,那么在Windows的IE浏览器输入下面两条指令都可以访问共享文件。其实这就是Windows下查看Linux Samba服务器共享文件的方法。
\10.0.0.163\共享目录名称
\davidsamba\共享目录名称
Samba服务器可实现如下功能WINS和DNS服务; 网络浏览服务; Linux和Windows域之间的认证和授权; UNICODE字符集和域名映射;满足CIFS协议的UNIX共享等。
SAMBA软件包
SAMBA软件由3个软件包组成
- Samba(服务端软件包)
包含了samba的主要daemon档案(smbd及nmbd)、samba的文件档(document)、以及其他与samba相关的logrotate设定文件及开机预设选项档案等。 - Samba-common(公用软件包)
主要提供了SAMBA的主要设定档(smb.conf)、smb.conf语法检验的测试程序(testparm)等等。 - Samba-client(客户端软件包)
提供了当linux作为SAMBA Client端时,所需要的工具指令,例如挂载SAMBA档案格式的执行档smbmount等等
SAMBA配置文件
/etc/samba/smb.conf
这是 Samba 的主要配置文件,基本上,咱们的 Samba 就仅有这个配置文件而已,且这个配置文件本身就是很详细的说明文件了,请用 vim 去查阅它吧!主要的设定项目分为服务器的相关设定 (global),如工作组、NetBIOS 名称与密码等级等, 以及分享的目录等相关设定,如实际目录、分享资源名称与权限等等两大部分。
/etc/sysconfig/samba
提供启动 smbd, nmbd 时,你还想要加入的相关服务参数。
/etc/samba/smbusers
由于 Windows 与 Linux 在管理员与访客的账号名称不一致,例如 administrator (windows) 及 root(linux), 为了对应这两者之间的账号关系,可使用这个档案来设定
/var/lib/samba/private/{passdb.tdb,secrets.tdb}
管理 Samba 的用户账号/密码时,会用到的数据库档案;
/etc/samba/lmhosts
这个档案的主要目的在对应NetBIOS name 与该主机名称的 IP ,事实上,他有点像是 /etc/hosts 的功能!只不过这个lmhosts 对应的主机名称是 NetBIOS name 喔!不要跟 /etc/hosts 搞混了!由于目前SAMBA 的功能越来越强大,所以通常只要您一启动 SAMBA 时,他就能自己捉到 LAN里面的相关计算机的 NetBIOS name 对应 IP 的信息,因此,这个档案通常可以不用设定了。
/etc/samba/smbpasswd
这个档案预设并不存在。它是SAMBA 预设的使用者密码对应表。当设定的 SAMBA 服务器是较为严密的,需要使用者输入账号与密码后才能登入的状态时,使用者的密码预设就是放置在这里( 当然啰,您可以自行在 smb.conf 里面设定密码放置的地方及密码文件名,不过,我们这里都以预设的状态来说明) 。比较需要注意的是,这个档案因为包含了使用者的密码,所以,当然权限方面要较为注意啦!这个档案的拥有者需要是root ,且权限设定为 600 才行。
安装SAMBA服务
yum -y install linux-client samba-common
配置SAMBA服务
Samba配置文件详细分析
vim /etc/samba/smb.conf
[global] #定义全局策略
workgroup = MYGROUP #定义工作组
server string = Samba Server Version %v #服务器提示字符,默认显示samba版本
log file = /var/log/samba/log.%m #定义日志文件
max log size = 50 #定义日志文件单个文件最大容量为50KB
security = user #security选项将会影响客户端访问方式 #可以设置user、share、server、domain。User代表用户名和密码验证;share代表匿名访问;server代表基于验证身份的访问,账户信息在另一台SMB服务器上;domain:同样基于验证身份验证,账户信息在活动目录中
passdb backend = tdbsam #账户与密码存储方式,smbpasswd使用老的明文格式存储账户及密码;tdbsam代表基于TDB的密文格式存储;ldapsam代表使用LDAP存储账户资料。
load printers = yes #客户端在10分钟内没有打开任何Samba资源,服务器将自动关闭回话。
cups options = raw #打印属性
[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
[common] #共享名称为common
comment = Common share
path = /common #指定共享目录
valid users = tom jerry #有效账户列表
create mask = 0750 #客户端上传文件的默认权限
directorymask = 0775 #客户端创建目录的默认权限
browseable = yes #客户端是否对所有人可见
writable= no #是否允许写入
write list = tom #写权限账户列表
admin users = tom #该共享的管理员,具有完全权限
invalid users = root bin #禁止root与bin访问common共享
guest ok = no #是否允许匿名访问
创建SAMBA共享
创建共享目录
[root@Samba ~]# mkdir /common #创建公共目录common
[root@Samba ~]# chmod777 /common #给common目录授权
[root@Samba ~]# echo "hello world!" > /common/test.txt #创建测试文件test.txt
修改配置文件
[root@Samba ~]# vim /etc/samba/smb.conf
在结尾添加以下内容
[common] //共享名称为common
comment = Common share //共享注释
path = /common //指定共享路径
browseable = yes //所有人可见
guest ok = no //拒绝匿名访问
writeable = yes //支持写入数据
创建访问账号
[root@linux]# useradd -s /sbin/nologin smbuser //创建用户
[root@linux]# smbpasswd -a smbuser //创建密码
Smbpasswd命令
–a添加账户并设置密码;
-x删除SMB账户;
-d禁用SMB账户;
–e 启用SMB账户;
启动服务
最后启动服务,便可以通过SAMBA客户端进行访问了。