Samba 简介
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。
1、Samba软件包的组成
服务端 Samba
客户端 Samba-client
用于提供服务端和客户端程序的公用组件 Samba-common
用于提供Web接口的图形管理程序软件 Samba-swat
2、Samba服务程序的组件
smbd:监听TCP协议的139端口(SMB协议) 445端口(CIFS协议) 负责为客户机提供服务器中的共享资源(目录和文件等)的访问,
nmbd:监听UDP 137 -138 端口(NetBIOS协议) 负责提供基于NetBIOS协议的主机名称解析
3、主配置文件 smb.conf /etc/samba/smb.conf
mv smb.conf smb.conf.bak
grep -v "#" smb.conf.bak |grep -v "^;"|grep -v "^$" > smb.conf
Samba提供一个配置文件检查工具 testparm ,此程序可以对smb.conf配置文件的正确性进行检查
4、搭建可匿名访问的共享
可匿名访问的共享适用于公开的资源分享,一般只建议提供只读访问,设置smb.conf中两个地方
4.1、默认安全级别修改为share
4.2、配置writable=no
配置文件内容为;
5、搭建需用户验证的共享
5.1建立Samba用户数据库
Samba共享用户账号数据文件默认位于/etc/samba/passdb.tdb 是一个经过加密的文件,使用pdbedit工具可以对共享用户进行管理
如:
pdbedit -a -u song 添加一个song的共享用户 -a表示添加 -u 用于指定用户名称(-u 可省略)
pdbedit -x -u song 删除一个song的共享用户 -x表示删除
useradd song //先添加系统账号
pdbedit -a -u song //在添加共享用户
new passwd: //设置共享用户密码
retype new passwd: //重复输入密码确认
pdbedit -L 可以列出所有的Samba共享用户 可指定用户名 -v 输出更详细的内容
pdbedit -vL song
5.2、设置用户访问授权
若要使用用户验证Samba共享,应讲security安全级别提升为 user 共享目录的用户授权主要由 "valid users"、“write list”配置项指定,多个共享用户用逗号或宫格分隔。 授权组可以使用 @组名 但是要为组内的每个系统用户创建Samba共享用户 pdbedit -a -u XXX
共享目录访问授权 chmod 777 目录
实验
将本地目录 /opt/mytools/发布为共享文件夹,共享名为tools 要求只有共享用户 vanko hunter 能够访问 其中hunter用户具有写入权限
1、创建共享用户vanko hunter 确认共享目录
useradd vanko //创建系统用户 vanko
useradd hunter //创建系统用户 hunter
pdbedit -a -u vanko //创建Samba共享用户 canko
pdbedit -a -u hunter //创建Samba共享用户 hunter
mkdir /opt/mytools //新建本地共享目录
2、修改smb.conf配置文件,添加名为tools的共享目录配置段
3、重新加载smb.cof文件配置
service smb reload
4、确定目录访问授权
在服务器本机中,与共享用户同门的系统用户对共享用户必须有相应的读取、写入权限
chmod -R 777 /opt/mytools/
用户访问tools共享时,所上传的目录默认权限为775 文件默认权限为664可以再【tools】配置段添加以下内容
directory mask=0755
create mask=0664
5、用户映射及地址限制
1.共享账号映射
共享账号映射文件位于/etc/samba/smbusers 文件中的配置记录使用 “共享名=别名1 别名2 别名3 别名4”的格式
vim /etc/samba/smbusers //打开配置文件
song= admin dage songsong administrator //为Samba共享用户song设置别名
设置好别名后若要正常启用账号映射功能,需要修改主配置文件/etc/samba/smb.conf 添加全局配置项 “username map =/etc/samba/smbusers” 然后重新加载配置文件
2、访问地址限制
针对访问Samba的客户机可以通过 “hosts allow” "hosts deny"限制访问。放到全局配置[global]项中
hosts allow =192.168.1.1 //允许访问
hosts deny=192.168.1.2 //拒绝访问
重新加载配置文件
smb.conf 配置文件内容
[global] //全局配置
workgroup = MYGROUP 设置服务器所在的工作组名称
server string = Samba Server Version %v 设置服务器的说明文字,用于描述Samba服务器
; hosts allow = 192.168.1. 192.168.2. 127. //限制可访问此服务的IP范围,默认是全部允许的,要是想设设置去掉前面的";"
security = user 设置服务器的安全级别 share (匿名访问) user (需本服务器验证用户名及密码) server (指定另一台服务器验证用户名密码) domain (由windows域验证用户名和密码)
passdb backend = tdbsam 设置共享账户文件的类型,默认使用tedsam(TDB数据库文件) LDAP=ldapsam 兼容旧版Samba密码文件=smbpasswd
load printers = yes
cups options = raw
[homes] //宿主目录及共享目录
comment = Home Directories //设置对应共享目录的注释说明信息
browseable = no
writable = yes
[printers] //打印机共享
comment = All Printers //设置对应共享目录的注释说明信息
path = /var/spool/samba //设置对应共享目录在服务器的文件夹路径
browseable = no //是否在网络邻居中可见
guest ok = no //是否所有人都可以访问目录 与public 配置项相同作用
writable = no //目录是否可写 与 read only 作用相反
printable = yes
附录:
smb.conf详解
[global] //设置samba服务整体环境
workgroup = hackase //设置工作组名
server string = angel server //服务器名说明
; hosts allow = 192.168.1. 192.168.2. 127. //限制可访问此服务的IP范围,默认是全部允许的,要是想设设置去掉前面的";"
printcap name = /etc/printcap //打印机配置文件
load printers = yes //是否共享打印机
# bsd, sysv, plp, lprng, aix, hpux, qnx, cups
printing = cups //打印机的类型.标准打印机类型包括以上几种.
; guest account = pcguest //pcguest为用户名.可改去掉前边的";"让用户以
pcguest身份匿名登录,但保证/etc/passwd中有此人.
log file = /var/log/samba/%m.log //为登录服务器的用户建立不同的日志文件.
max log size = 0 //日志文件的大小,"0"代表无限制
//以下是smb.conf文件对服务器安全级别的设置
security = share //安全性的级别共四种.share、user、server、domain
; password server = 密码验证服务器.
; password level = 8 //密码级别
; username level = 8
encrypt passwords = yes //用户密码加密,当然也可以不加密
smb passwd file = /etc/samba/smbpasswd //将密码服务器设置为samba server.
需要这个东东来指定验证文件.这个是文件的路径,如果samba server是指定的win
server这个不需要
; ssl CA certFile = /usr/share/ssl/certs/ca-bundle.crt
unix password sync = Yes
passwd program = /usr/bin/passwd %u
passwd chat = *New*password* %n\n *Retype*new*password* %n\n
*passwd:*all*authentication*tokens*updated*successfully*
pam password change = yes
; username map = /etc/samba/smbusers //如果每个windows用户在samba服务器
中有帐户这个可以不设
; include = /etc/samba/smb.conf.%m
obey pam restrictions = yes
; interfaces = 192.168.12.2/24 192.168.13.2/24 如果多网段要在这里列出
; remote announce = 192.168.1.255 192.168.2.44
; local master = no
; os level = 33
; domain master = yes
; preferred master = yes
; domain logons = yes
; logon script = %m.bat
; logon script = %U.bat
; logon path = \\%L\Profiles\%U
; wins support = yes //wins server支持
; wins server = w.x.y.z
; wins proxy = yes //wins 代理设置
dns proxy = no //dns代理设置
; preserve case = no
; short preserve case = no
; default case = lower
; case sensitive = no
#============================ Share Definitions ============================
[homes] //用户访问自已目录的设置
comment = Home Directories //说明(以下同理)
browseable = no//设定目录可不可以别人浏览
writeable = yes//用户写入自己的权限
valid users = %S
create mode = 0664
directory mode = 0775
; [netlogon] //此段域用户登录目录设置
; comment = Network Logon Service
; path = /usr/local/samba/lib/netlogon
; guest ok = yes
; writable = no
; share modes = no
;[Profiles]
; path = /usr/local/samba/profiles
; browseable = no
; guest ok = yes
[printers] //打印机设置
comment = All Printers
path = /var/spool/samba
browseable = no
printable = yes
;[tmp] //用户共享资源设置
; comment = Temporary file space
; path = /tmp //可以自定义目录,去掉前边的";"就OK了
; read only = no //是否只读或可写
; public = yes
;[public] //用户共享资源设置
; comment = Public Stuff
; path = /home/samba
; public = yes
; writable = yes
; printable = no
; write list = @staff
;[fredsprn]
; comment = Fred‘s Printer
; valid users = fred
; path = /home/fred
; printer = freds_printer
; public = no
; writable = no
; printable = yes
;[fredsdir]
; comment = Fred‘s Service
; path = /usr/somewhere/private
; valid users = fred
; public = no
; writable = yes
; printable = no
;[pchome]
; comment = PC Directories
; path = /usr/local/pc/%m
; public = no
; writable = yes
;[public]
; path = /usr/somewhere/else/public
; public = yes
; only guest = yes
; writable = yes
; printable = no
;[myshare]
; comment = Mary‘s and Fred‘s stuff
; path = /usr/somewhere/shared
; valid users = mary fred
; public = no
; writable = yes
; printable = no
; create mask = 0765
[my work] //自己添加的共享资源
comment = is me work
path = /root/my work
valid users angel
public = yes
writeable = yes
了解smb.conf的文件就好办了.我们开始对samba server的四个安全级别分别讲解.
1、share级配置
这个在四个等级中是最低的,方法也是最简单.我们只要对smb.conf文件修改一下就可以了.
workgroup = hackase
server string = angel server
hosts allow = 192.168.1. //限制192.168.1的IP网段可以防问
printcap name = /etc/printcap
load printers = yes //共享打印机
printing = cups //打印机用linux标准的
guest account = angel
log file = /var/log/samba/%m.log
max log size = 20
security = share
===================================================================
其他的设置默认就可以了,也可以像我把所有的注释删除.[tmp]这个字段的";"去掉.
路径可以更改. 重启一下服务 /etc/samba/smb restart //
service smb restart 也可
用testparm测试我们配置的文件是否正确:
===================================================================
[root@localhost root]# testparm //测试时[printers]注释掉了所以这里没有.
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Processing section "[tmp]"
Processing section "[my]"
Loaded services file OK. //如有错误,会在这列出错误的地方.
Press enter to see a dump of your service definitions
==================================================================
用smbclient命令查看网络共享情况
===================================================================
[root@localhost etc]# smbclient -L localhost //本机名为localhost
Password:
Domain=[HACKBASE] OS=[Unix] Server=[Samba 2.2.7a]
Sharename Type Comment
--------- ---- -------
tmp Disk Temporary file space
my Disk is me
IPC$ IPC IPC Service (angel server)
ADMIN$ Disk IPC Service (angel server)
root Printer Home Directories
Server Comment
--------- -------
Workgroup Master
--------- -------
=======================================================================
2、user级配置
user比share级安全级别高一点点,很简单的,可以在share基础上改一下就可以了.
改一下security = share字段为:security = user.在加上如下字段:
guest account = angel //机器上有这个用户名,如果你没有那就建一个吧!
encrypt passwords=yes
smb passwd file=/etc/samba/smbpasswd
(1)生成口令文件.
#cat/etc/passwd | mksmbpasswd.sh>/etc/samba/smbpasswd
本命令将生成口令文件"/etc/samba/smbpasswd" 这个就是我们
刚加上的"smb passwd file=/etc/samba/smbpasswd"
(2)我们知道建账户是建在etc/passwd文件里,我们须要用smbpasswd命令
为刚才建立的账名设置samba server口令. 格式为:smbpasswd angel
(3)重启samba server服务
user级的也OK了,你可以用testparm and smbclient命测试.windows用户想
访问就要输入angel and passwd.这个就不是谁都可以访问你的共享
资源了.
3、server 级配置
server级比user级也高那么一点,只需要user级配置上修改一下就OK了.
(1)security = user字段为:security = server
(2)加上password server = ****** //密码服务器,这个可以是你的windows主域控制器,也可以是别一个samba server服务器(名字无意思)
(3)注释smb passwd file=/etc/samba/smbpasswd
(4)重启samba server服务,你可以用testparm and smbclient 测试.
好了,又完事一个。现在如果一台windows机器登录******(password server =
******设置的)域服务器的时候,也就同登录上了samba server,如果你以是*****主控域的计算机,那你就可以输入你自己的账号密码打开samba server的文件了,但是你要保证*****和sambs server的账号和密码相同.
4、domain级的配置
domain级的配置是samba server中级别最高的他主要就是把samba加入到域中去,
用域服务器作samba server的密码服务器.
其实domain级的配置也很简单,只需要在user级的基础上修改:
(1)加入字段:NETBLOS = main //起一个NETBLOS名,放在smb.conf文件的最上边
password server = ** //用主域控制器**来做密码服务器
(2)security = user字段为:security = domain
workgroup = ***** //*****是主域控制器的域名
(3)注释smb passwd file=/etc/samba/smbpasswd
(4)重启samba server服务,你可以用testparm and smbclient命测试.
终于完事了,好在我的"弹指神功"技术纯熟.这个时候我们就可以和windows系统通信了,
我也要去呼呼了,等等~~~那网络可以共享了,那么我们本机的linux系统和本机的
windows系统怎么通信啊!呵呵.当然有办法,到现在大侠们可以起来活动活动了,
帮我看看我写的有什么错误.好了,打开终端输入:
[root@localhost root]# fdisk -l //查一下windows系统所在的分区.
Disk /dev/hdb: 61.4 GB, 61492838400 bytes
255 heads, 63 sectors/track, 7476 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hdb1 * 1 738 5927953+ 7 HPFS/NTFS
/dev/hdb2 739 7476 54122985 f Win95 Ext‘d (LBA)
/dev/hdb5 739 1480 5960083+ 7 HPFS/NTFS
/dev/hdb6 1481 2383 7253316 b Win95 FAT32
/dev/hdb7 3651 6200 20482843+ b Win95 FAT32
/dev/hdb8 6201 7476 10249438+ b Win95 FAT32
/dev/hdb9 2384 2396 104391 83 Linux
/dev/hdb10 2397 3585 9550611 83 Linux
/dev/hdb11 3586 3650 522081 82 Linux swap
[root@localhost root]# mkdir /mnt/my
//在mnt下建一个叫my的目录(定义到那自己决定)
[root@localhost root]# mount -t auto /dev/hdb7 /mnt/my //不用说了吧!
这样就可以防问windows的分区了,但是系统分区不可以是ntfs格式的.
本文出自 “刘月松Style技术博客” 博客,请务必保留此出处http://lysstyle.blog.51cto.com/7879798/1594940
原文地址:http://lysstyle.blog.51cto.com/7879798/1594940