Samba
协议基础
自从出现 NetBIOS 协议, Microsoft 用它实现了网络文件 / 打印服务,即大家熟知的打印与共享服务,它是基于 SMB ( Server Message Block )协议,实现不同计算机之间共享打印机、串行口和通讯抽象(如命名管道、邮件插槽等)。
随着 Internet 的流行, Microsoft 希望将这个协议扩展到 Internet 上去,成为 Internet 上计算机之间相互共享数据的一种标准。因此它将原有的几乎没有多少技术文档的 SMB 协议进行整理,重新命名为 CIFS ( Common Internet File System ),并打算将它与 NetBIOS 相脱离,试图使它成为 Internet 上的一个标准协议。
为了让 Windows 和 UNIX 主机实现资源共享,可行的一种方法就是在 UNIX 计算机中安装支持 SMB/CIFS 协议的软件,这样 Windows 客户就不需要更改设置,同对待 Windows 主机一样,能用 UNIX 计算机上的资源了。 Samba 是用来实现 SMB 的一种软件,它的工作原理是让 NetBIOS ( Network Basic Input/Output System )和 SMB 这两个协议运行于 TCP/IP 协议之上,并且使用 Windows 的 NetBEUI(Net BIOS Enhanced User Interface) 协议,让类 UNIX 主机可以在网络邻居上被 Windows 主机看到。它的功能有:
n 实现 Linux 主机之间和 Linux 主机与 Windows 主机之间的文件共享
n 实现 Linux 主机之间和 Linux 主机与 Windows 主机之间的打印机共享
2 . Samba 的配置
(1) 安装 Samba
检查是否已经安装了 Samba:
#rpm -qa | grep samba
samba-swat-3.0.7-1.3E.1 --Samba 的 web 管理工具,端口为 901
samba-3.0.7-1.3E.1 --Samba 的核心文件
redhat-config-samba-1.0.16-2 --Samba 的可视化配置工具
samba-common-3.0.7-1.3E.1 --Samba 通用文件
samba-client-3.0.7-1.3E.1 --Samba 客户端工具
如果没有安装,则可以通过光盘或 NFS (后面讲解)安装。安装文件的具体光盘位置,请查看光盘下 RedHat/RPMS 下的内容。安装的方法如下:
#rpm -ivh *samba*.rpm -- 可以一次完成所有安装
(2) 启动 Samba 服务器和 web 管理服务
#chkconfig smb on -- 将服务添加到服务管理器中
#service smb start -- 启动共享服务,但修改后仍需要重启动
#chkconfig swat on -- 取消 swat 在 xinetd 服务中的不启动限制
#service xinetd restart -- 通过重新启动 xinetd 服务启动 swat 服务
(3) 配置 Samba
(1) 方法 1 :利用 system-config-samba 进行配置 , 方法如下 :
# system-config-samba
这里你可以对 samba 服务器进行一些基本的设置里 , 应该说比较简单了 , 我看没有必要介绍了 , 配置好之后 , 记住重新启动服务 .
重新启动的方法有两种 :
#service smb start 或 restart
#/etc/rc.d/init.d/smb start
(2) 方法 2 :利用 samba-swat
swat 文件在 /etc/xinetd.d/ 下,文件名就是 swat
首先 , 你要修改 swat 的配置文件 , 默认的情况下是关闭的
service swat
{
port = 901 (swat 用到的端口是 901)
socket_type = stream( 类似 tcp 协议的东西 , 呵呵这是我自己的理解 )
wait = no
only_from = 127.0.0.1( 只从这个启动 swat, 关键 !)
user = root( 启动 swat 用到的名子 )
server = /usr/sbin/swat
log_on_failure += USERID
disable = yes ( 一定要把 yes 改成 no)
}
修改过之后 , 启动 xinetd 就可以了
启动方法跟刚才我说的一样
然后在浏览器里些上 :http://127.0.0.1:901/ 回车,你成功了 !( 注意 , 这个 IP 地址要跟你在 SWAT 配置文件里的 IP 地址一样才形 , 切记 !)
至于如何使用 swat, 自己摸索一下应该不成问题了 , 配置完成以后 , 记得重新启动服务就可以了 . 对了 , 为了使得 samba 和 swat 在每次开机的时候启动 , 你可以这样 :
#setup, 然后找到 system service, 在 SMB 和 SWAT 前搞个 *, 也可以 #ntsysv, 同样的效果 .
3) 方法 3 :修改 smb.conf 文件
Samba 的配置文件为 /etc/samba/smb.conf ,该文件的初始内容很多,其实很多都是注释,但这些注释往往对我们的后续配置很有帮助,建议读者仔细阅读。
Samba 的配置可以分为三部分:全局部分 ( 由 [global] 标识 ) 、打印机部分 ( 由 [printers] 标识 ) 和共享部分 ( 由 [homes] 标识和自己设定的其他标识 ) 。全局部分的配置影响到其它所有部分,打印机部分用于设置打印机的共享,而其余部分则是提供一般共享的部分。所以, Samba 配置的一般方法就很明确了,配置 global 部分,设置全局参数,配置打印机部分则可以实现打印机共享,其它共享部分的配置则是提供特殊共享服务,配置 [homes] 部分可以让本地用户的目录也加入共享。
a) 全局设置
workgroup = syd168Group
设置该 Samba 服务器所在的工作组或者域(如下面的 security=domain 的话)。
server string = syd168’s Samba Server %v
设定 Samba 服务器的显示名。还可以包含特定变量。常用的包括:
变量 含 义
%S 当前服务名(如果有的话)
%P 当前服务的根目录(如果有的话)
%u 当前服务的用户名(如果有的话)
%U 当前对话的用户名
%H 当前服务的用户的 Home 目录
%v Samba 服务的版本号
%h 运行 Samba 服务机器的主机名
%m 客户机的 NETBIOS 名称
%L 服务器的 NETBIOS 名称
%M 客户机的主机名
%I 客户机的 IP
%T 当前日期和时间
表 2-1
hosts allow = 172.12.0 EXCEPT 172.12.0.8 123.0.0.1 .syd164.com
可以设置允许访问的网络和主机 IP ,比如允许 192.164.1.0/24 和 192.164.2.1/32 访问,就用 hosts allow = 192.164.1. 192.164.2.1 123.0.0.1 注意后面加 “.” 号,各个项目间用空格隔开,注意要把本机也加进去,否则本地也将无法测试。
printcap name = /etc/printcap
存放打印机描述信息的文件,一般是 /etc/printcap 。
load printers = yes|no
设定是否自动共享打印机而不用设置 [printers] 部分
printing = lprng
定义打印系统的类型,缺省是 lprng ,可选项有: bsd , sysv , plp , lprng , aix , hpux , qnx 。
guest account = guest
定义游客帐号,而且该账号必须已经存在于 /etc/passwd 中,不然它就用缺省的 nobody
log file = /var/log/samba/%m.log
定义记录文件的位置 LogFileName (一般是用 /var/log/samba/%m.log )
max log size =100
定义记录文件的大小 size (单位是 KB ,如果是 0 的话就不限大小)
security = security_level
定义 Samba 的安全级别,按从低到高分为四级: share , user , server , domain 。它们对应的验证方式:
Ø share :任何用户无需用户名和口令即可访问服务器上的资源。
user : samba 的默认配置,在访问共享资源之前必须通过本地用户验证。 Ø
Ø Server :验证是通过另一台服务器进行的,如果失败,就退到 user 级。
Ø domain :验证通过网络上的 Windows 的主域控制器进行。
后面三种安全级都要求 “ 用户 ” 在提供共享的 Linux 主机上要有帐户。
password server = <NT-Server-Name>
设置验证服务器的服务器名。当 security 设为 server 或者 domain 的时候才有必要。
encrypt passwords = yes|no
设置是否对密码进行加密, samba 本身有一个密码文件 /etc/samba/smbpasswd ,如果不对密码进行加密则在验证会话期间客户机和服务器之间传递的是明文密码, samba 直接把这个密码和 Linux 里的 /etc/samba/smbpasswd 密码文件进行验证。但是在 Windows 95 OS/2 以后的版本和 Windows NT SP3 以后的版本缺省都不传送明文密码,要让这些系统能传送明文密码必须在其注册表里更改,比较麻烦,好的方法就是把这里的这个开关设置为 yes 。
smb passwd file = /etc/samba/smbpasswd
设置存放 samba 用户密码的文件 smbPasswordFile( 一般是 /etc/samba/smbpasswd) 。
ssl CA certFile = sslFile
当 samba 编译为支持 SSL 的时候,需要指定 SSL 的证书的位置(一般在 /usr/share/ssl/certs/ca-bundle.crt )。
UNIX password sync = yes|no
passwd program = /usr/bin/passwd %u
passwd chat =*New*UNIX*password* %n/n *ReType*new*UNIX*password* %n/n *passwd:*all*authentication*tokens*updated*successfully*
这三项设置能否从 Windows 的应用程序修改 UNIX 系统的用户密码
username map =/etc/samba/smbusers
指定用户映射文件(一般是 /etc/samba/smbusers ),当我们在里面指定一行 root = administrator admin 的时候,当客户机以用户 admin 或者 administrator 连接时会被当作用户 root 看待。
include = MachineConfFile
指定对不同机器的连接采用不同的配置文件 MachineConfFile (一般为了灵活管理设置为 /etc/samba/smb.conf.%m ,由于采用了 samba 的变量,把配置文件和客户机的 NETBIOS 名称关联起来,能很容易地控制这些客户机的权限和设置)。
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
这个是网络 socket 方面的一些参数,能实现最好的文件传输性能。相关的选项还有 SO_KEEPALIVE 、 SO_REUSEADDR 、 SO_BROADCAST 、 IPTOS_LOWDELAY 、 IPTOS_THROUGHPUT 、 SO_SNDLOWAT ( * )、 SO_RCVLOWAT ( * )等,带 * 号的要指定数值。本地网络,就只用 IPTOS_LOWDELAY ,如果是广域网络,就试试 IPTOS_THROUGHPUT 。
interfaces = interface1 interface2
如果有多个网络接口,就必须在这里指定。如 interface = 192.164.12.2/24 192.164.13.2/24
remote browse sync = host(subnet)
这里指定浏览列表同步信息从哪里取得, 如用 host (比如 192.164.3.25 )或者整个子网( 192.164.1.255 )。
remote announce = 192.164.2.255/SERVERS 192.164.4.255/STAFF
指定这些机器向网络宣告自己,从而在 “ 网络邻居 ” 中可以看到该机器。
local master = yes|no
这个参数指定 nmbd 是否试图成为本地主浏览器,默认值是 yes ,如果设为 no 则 samba 服务器就永远都不会成为本地主浏览器。但即使设置了 yes ,也不等于 samba 服务器就会成为本地主浏览器。只是参与本地主浏览器选择。
os level = n
n 的值是个整数,决定了 nmbd 是否有机会成为本地广播区域的工作组里的本地主浏览器,默认值是零,零则意味着 nmbd 失去浏览选择。如果要 nmbd 更有机会成为本地主浏览器的话,可以设为 65 。
domain master = yes|no
这个参数让 nmbd 成为一个域浏览器,取得各本地主浏览器的浏览列表,并将整个域的浏览列表递交给各本地主浏览器。
preferred master = yes|no
这个参数指定 nmbd 是否是工作组里的主浏览器,如果指定为 yes , nmbd 在启动的时候就强制一个浏览选择。
preserve case = yes|no
short preserve case = yes|no
指定拷贝 DOS 文件的时候保持大小写,缺省是 no
default case = lower|upper
所有的 DOS 文件的缺省是大写还是小写
case sensitive = yes|no
大小写敏感,一般是 no ,不然会出现一些问题。
b) 共享设置:
每个 SMB 服务器能对外提供文件或打印服务,每个共享资源需要被给予一个共享名,这个名字将显示在这个服务器的资源列表中。共享名必须放在 [] 中,如 [homes] 。如果一个资源的名字的最后一个字母为 $ ,则这个共享就为隐藏共享,不能直接出现在浏览列表中,而只能通过直接访问这个名字来进行访问。
[homes] 段 这是 samba 共享中比较奇怪的一个段,专门用于提供用户目录共享的。这个段一般不需要设置共享资源的路径,其实路径就是每个用户的主目录。当客户机发出服务请求时,首先查找由 smb.conf 文件的其它配置部分设定的共享服务,如果没有发现,并且配置了 homes 段,则通过搜索 /etc/passwd 得到用户的 home 目录。通过 homes 段, Samba 可以得到用户的 home 目录并使之共享。下面是这个段的最基本的几个设置。
[homes]
comment=Home Directory
browseable=no
writable=yes
其它共享段。其它共享段是提供特殊共享的段,每个共享继承 [global] 中的设置,但如果该段中再次设置了参数,则覆盖 [global] 中的设置参数。下面是一个显示为 share1 的共享的配置:
=========================== 共享的建立 ============================
[share1] -- 共享名
comment =comment -- 共享说明
path = /home/grind -- 共享文件位置
allow hosts = host(subnet) -- 允许共享访问的设置,同 [global] 中设置方法
deny hosts = host(subnet) -- 不允许访问共享的限制,方法同上
writable = yes|no -- 共享是否可以写入
valid users = user(@group) -- 允许访问的用户和组
invalid users = user(@group) -- 不允许访问的用户和组
read list = user(@group) -- 只允许读取的用户和组
write list = user(@group) -- 总是允许读写的用户和组
admin list = user(@group) -- 能管理该共享(读写和权限修改等)的用户和组
guest ok = yes|no -- 是否允许游客访问,即无需密码访问
guest account = nobody -- 游客访问帐号,必须在 /etc/passwd 中存在
hide dot files = yes|no -- 是否不显示隐含文件
create mode = 0755 -- 新建立的文件的属性,一般是 0755
directory mode = 0755 -- 新建立的目录的属性,一般是 0755
sync always = yes|no -- 对该共享资源进行写操作后是否进行同步操作
case sensitive = yes|no -- 是否区分大小写,一般选 no ,不然可能引起错误
force user = grind
如果一个目录,让 guest 可以写,那么 guest 就可以删除,如果用 force user= grind 强制建立文件的属主是 grind ,同时限制 create mask = 0755 ,这样 guest 就不能删除了。
wide links = yes|no
上面设置确定是否允许共享外符号连接,比如共享资源里面有个连接指向非共享资源里面的文件或者目录,如果设置 wide links = no 将使该连接不可用。
max connections = 100 -- 同时连接最大数
read only = yes|no -- 共享为只读方式
=========================== 共享的建立 ============================
通过上面的方法,我们可以实现多个不同的共享设置,只要各个共享的显示名不同就可以了。但如果想把光驱、移动硬盘等 “ 动态 ” 设备共享,就需要注意,这些设备可能不是常 “ 在线 ” 的,所以,需要动态建立共享。下面我们就以光驱的共享为例,看看如何实现 “ 动态 ” 资源的共享。
=========================== 光驱的共享 ===========================
[cdrom]
comment = syd168’s DVDROM
path = /mnt/cdrom
public = yes
browseable = yes
root preexec = /bin/mount -t iso9660 -0 iocharset=cp936 /dev/cd0 /mnt/cdrom
root postexec = /bin/umount /mnt/cdrom
=========================== 光驱的共享 ===========================
这里 root preexec 指明了连接时用 root 的身份运行 mount 命令,而 root postexec 则指明了断开时用 root 身份运行 umount ,有效实现了对光驱的共享。
c) 打印机共享的设置:
========================== 打印机的共享 ===========================
[printers]
path = /var/spool/samba
writeable = no
guest ok = yes
printable = yes
printer driver = HP LaserJet 5L
========================== 打印机的共享 ===========================
这里 printable 指明该打印机可以打印, guest ok 说明游客也能打印, path 指明打印的文件队列暂时放到 /var/spool/samba 目录下。 printer driver 的作用是指明该打印机的类型,这样我们在安装网络打印机的时候可以直接自动安装驱动而不必选择。
d) Samba 用户管理:
需要注意的是,如果 Samba 的 security 配置为 user ,则将由 Samba 服务器负责用户的认证。所有要访问 Samba 的本地用户帐号必须包含在 smb passwd file 参数指定的文件中,默认是 /etc/samba/smbpasswd 。要将系统用户添加到 smbpasswd 中,使用 smbpaswd 命令即可实现, smbpasswd 的命令格式如下:
smbpasswd 参数 用户
具体参数见下表:
变量 含 义 举例
-a 添加用户 #smbpasswd -a syd1
-x 删除用户 #smbpasswd -x syd168
-d 禁用帐号 #smbpasswd -d guest
-e 取消禁用 #smbpasswd -e guest
-n 清除密码 #smbpasswd -a syd1
表 2-2
上面主要介绍了 Samba 服务端的设置,一般应用中使用上面的配置就可以满足需要了,对于一些不常用的配置就省略了,详细的信息可以用 man smb.conf 参考。
e) Linux 下访问 Samba 服务
1 )列出可共享的网络资源:
smbclient -L IP 或 NETBIOS 名
作用是显示某台提供 samba 服务的服务器上的共享资源。命令执行效果如下:
#smbclient –L 172.12.0.3
该命令的执行结果如下:
======================== 下面是共享的信息 ========================
共享名 共享类型 说明
--------- ---- -------
Homes Disk Home Directories
Var Dis var
IPC$ IPC syd168's samba server v3.0.7-1.3E.1
ADMIN$ IPC syd168's samba server v3.0.7-1.3E.1
sydlinuxp1 Printer Created by redhat-config-printer 0.2.x
================ 下面是共享服务器的信息 ========================
服务器 说明
--------- -------
SYDLINUX syd168's samba server v3.0.7-1.3E.1
===================== 下面是 Mast 机器的信息 =====================
工作组 主服务器
--------- -------
SYD168-RHAS3 SYDLINUX
上面第一段列举了该机器 172.12.0.3 上面的共享资源,第二段列举了 172.12.0.3 所在的工作组里面所有提供 samba 服务的机器,第三段列举了其他工作组提供 Browse 服务的 Master 机器信息。
2 )使用网络资源:
smbclient //IP 或 NETBIOS 名 / 共享名 [-U 用户名 ]
命令执行效果如下:
#smbclient //172.12.0.3/syd1
added interface IP=172.12.0.3 bcast=172.12.251.255 nmask=251.251.0.0
got a positive name query response from 172.12.0.3 (172.12.0.3)
Password:
Domain=[BLUESUN] OS=[Windows 1.0] Server=[Windows 2000 LAN Manager]
smb: >
接着的操作和 ftp 的命令一样,用 get 下载文件,用 put 上传文件,用 help 命令查看帮助。
另一种使用共享的方法就是将共享挂载在文件系统下,象访问本地目录一样访问。挂载的方法如下:
smbmount //IP 或 NETBIOS 名 / 共享名 / 本地挂接点 [-o option]
常用的 option 有 username=< 用户名 > , password=< 密码 > , guest (指定为用 guest 访问,不用提供密码,但 username=guest 也会要求输入密码), ro (有时候为了系统安全要指定为只读模式), rw 为可读写,如有多个 option ,之间用逗号隔开。
或者可以用如下命令实现同样的功能:
mount -t smbfs [-o option] //IP 或 NETBIOS 名 / 共享名 / 本地挂接点
例子如下:
#smbmount /172.12.0.3/syd1 /mnt/test1 -o guest
或
#mount -t smbfs -o guest iocharset=cp936 //172.12.0.3/syd1 /mnt/test1
然后就能通过访问 /test 来使用网络上的资源了。
如果不再需要,可以简单地使用如下的命令卸载连接:
smbumount /mnt/test1 或 umount /mnt/test1
f) Windows 下访问 Linux 的共享
要在 Windows 下访问 Linux 中提供的共享,和使用一般的 Windows 共享一样,可以有多种方法:
1 ) 在 Windows 搜索 Linux 服务器
2 ) 在使用 Windows 提供的网络邻居功能
3 ) 在地址栏输入 //samba 服务器 IP/ 共享名
该介绍的我都介绍完了 , 重新启动服务 !
或许您会发现客户端无法连接 , 奶奶的 , 真让人生气 , 忙了这么久 , 还是不能访问 ,why?
1) 客户端应安装 tcp/ip netbios ipx( 这个东东不太懂 )
2lmhosts, IP 地址和 netbios 名子对应 .
3)iptables( 这个东西最坏 , 就是因为他 , 我浪费了两天时间 ! 我得出一个小小的结论 , 做各种配置前把 iptables 给关闭 !)
由于我对 iptables 不太懂 , 我的解决方式有两种 :
1:#setup 然后选择防火墙 , 然后关闭
2. 修改 /etc/sysconfig/iptables
-A INPUT -j RH-Lokkit-0-50-INPUT
-A FORWARD -j RH-Lokkit-0-50-INPUT
-A RH-Lokkit-0-50-INPUT -i lo -j ACCEPT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 0:1023 --syn -j ACCEPT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 2049 --syn -j REJECT
-A RH-Lokkit-0-50-INPUT -p udp -m udp --dport 0:1023 -j ACCEPT
-A RH-Lokkit-0-50-INPUT -p udp -m udp --dport 2049 -j REJECT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 6000:6009 --syn -j REJECT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 7100 --syn -j REJECT
COMMIT
把 0:1023 的两行的 REJECT 改成 ACCEPT
重新启动防火墙就可以了
#service iptables start
这样应该可以了 , 建议多实践 , 由于自己是个新手 , 可能有很多地方让您见笑了
samba 中文乱码问题
vi /etc/samba/smb.conf
根据 locales 的设置,修改该文件:
1. 如果 locale 是 zh_CN.UTF-8 ,做如下设置:
display charset = UTF-8
unix charset = UTF-8
dos charset = UTF-8
2. 如果 locale 是 zh_CN.GBK 或 zh_CN.gb2312 ,做如下设置:
display charset = cp936
unix charset = cp936
dos charset = cp936
重启 samba:
service samba restart
则无论从 windows 的网上邻居,还是直接用 securecrt 登陆,均可显示正常中文
自从出现 NetBIOS 协议, Microsoft 用它实现了网络文件 / 打印服务,即大家熟知的打印与共享服务,它是基于 SMB ( Server Message Block )协议,实现不同计算机之间共享打印机、串行口和通讯抽象(如命名管道、邮件插槽等)。
随着 Internet 的流行, Microsoft 希望将这个协议扩展到 Internet 上去,成为 Internet 上计算机之间相互共享数据的一种标准。因此它将原有的几乎没有多少技术文档的 SMB 协议进行整理,重新命名为 CIFS ( Common Internet File System ),并打算将它与 NetBIOS 相脱离,试图使它成为 Internet 上的一个标准协议。
为了让 Windows 和 UNIX 主机实现资源共享,可行的一种方法就是在 UNIX 计算机中安装支持 SMB/CIFS 协议的软件,这样 Windows 客户就不需要更改设置,同对待 Windows 主机一样,能用 UNIX 计算机上的资源了。 Samba 是用来实现 SMB 的一种软件,它的工作原理是让 NetBIOS ( Network Basic Input/Output System )和 SMB 这两个协议运行于 TCP/IP 协议之上,并且使用 Windows 的 NetBEUI(Net BIOS Enhanced User Interface) 协议,让类 UNIX 主机可以在网络邻居上被 Windows 主机看到。它的功能有:
n 实现 Linux 主机之间和 Linux 主机与 Windows 主机之间的文件共享
n 实现 Linux 主机之间和 Linux 主机与 Windows 主机之间的打印机共享
2 . Samba 的配置
(1) 安装 Samba
检查是否已经安装了 Samba:
#rpm -qa | grep samba
samba-swat-3.0.7-1.3E.1 --Samba 的 web 管理工具,端口为 901
samba-3.0.7-1.3E.1 --Samba 的核心文件
redhat-config-samba-1.0.16-2 --Samba 的可视化配置工具
samba-common-3.0.7-1.3E.1 --Samba 通用文件
samba-client-3.0.7-1.3E.1 --Samba 客户端工具
如果没有安装,则可以通过光盘或 NFS (后面讲解)安装。安装文件的具体光盘位置,请查看光盘下 RedHat/RPMS 下的内容。安装的方法如下:
#rpm -ivh *samba*.rpm -- 可以一次完成所有安装
(2) 启动 Samba 服务器和 web 管理服务
#chkconfig smb on -- 将服务添加到服务管理器中
#service smb start -- 启动共享服务,但修改后仍需要重启动
#chkconfig swat on -- 取消 swat 在 xinetd 服务中的不启动限制
#service xinetd restart -- 通过重新启动 xinetd 服务启动 swat 服务
(3) 配置 Samba
(1) 方法 1 :利用 system-config-samba 进行配置 , 方法如下 :
# system-config-samba
这里你可以对 samba 服务器进行一些基本的设置里 , 应该说比较简单了 , 我看没有必要介绍了 , 配置好之后 , 记住重新启动服务 .
重新启动的方法有两种 :
#service smb start 或 restart
#/etc/rc.d/init.d/smb start
(2) 方法 2 :利用 samba-swat
swat 文件在 /etc/xinetd.d/ 下,文件名就是 swat
首先 , 你要修改 swat 的配置文件 , 默认的情况下是关闭的
service swat
{
port = 901 (swat 用到的端口是 901)
socket_type = stream( 类似 tcp 协议的东西 , 呵呵这是我自己的理解 )
wait = no
only_from = 127.0.0.1( 只从这个启动 swat, 关键 !)
user = root( 启动 swat 用到的名子 )
server = /usr/sbin/swat
log_on_failure += USERID
disable = yes ( 一定要把 yes 改成 no)
}
修改过之后 , 启动 xinetd 就可以了
启动方法跟刚才我说的一样
然后在浏览器里些上 :http://127.0.0.1:901/ 回车,你成功了 !( 注意 , 这个 IP 地址要跟你在 SWAT 配置文件里的 IP 地址一样才形 , 切记 !)
至于如何使用 swat, 自己摸索一下应该不成问题了 , 配置完成以后 , 记得重新启动服务就可以了 . 对了 , 为了使得 samba 和 swat 在每次开机的时候启动 , 你可以这样 :
#setup, 然后找到 system service, 在 SMB 和 SWAT 前搞个 *, 也可以 #ntsysv, 同样的效果 .
3) 方法 3 :修改 smb.conf 文件
Samba 的配置文件为 /etc/samba/smb.conf ,该文件的初始内容很多,其实很多都是注释,但这些注释往往对我们的后续配置很有帮助,建议读者仔细阅读。
Samba 的配置可以分为三部分:全局部分 ( 由 [global] 标识 ) 、打印机部分 ( 由 [printers] 标识 ) 和共享部分 ( 由 [homes] 标识和自己设定的其他标识 ) 。全局部分的配置影响到其它所有部分,打印机部分用于设置打印机的共享,而其余部分则是提供一般共享的部分。所以, Samba 配置的一般方法就很明确了,配置 global 部分,设置全局参数,配置打印机部分则可以实现打印机共享,其它共享部分的配置则是提供特殊共享服务,配置 [homes] 部分可以让本地用户的目录也加入共享。
a) 全局设置
workgroup = syd168Group
设置该 Samba 服务器所在的工作组或者域(如下面的 security=domain 的话)。
server string = syd168’s Samba Server %v
设定 Samba 服务器的显示名。还可以包含特定变量。常用的包括:
变量 含 义
%S 当前服务名(如果有的话)
%P 当前服务的根目录(如果有的话)
%u 当前服务的用户名(如果有的话)
%U 当前对话的用户名
%H 当前服务的用户的 Home 目录
%v Samba 服务的版本号
%h 运行 Samba 服务机器的主机名
%m 客户机的 NETBIOS 名称
%L 服务器的 NETBIOS 名称
%M 客户机的主机名
%I 客户机的 IP
%T 当前日期和时间
表 2-1
hosts allow = 172.12.0 EXCEPT 172.12.0.8 123.0.0.1 .syd164.com
可以设置允许访问的网络和主机 IP ,比如允许 192.164.1.0/24 和 192.164.2.1/32 访问,就用 hosts allow = 192.164.1. 192.164.2.1 123.0.0.1 注意后面加 “.” 号,各个项目间用空格隔开,注意要把本机也加进去,否则本地也将无法测试。
printcap name = /etc/printcap
存放打印机描述信息的文件,一般是 /etc/printcap 。
load printers = yes|no
设定是否自动共享打印机而不用设置 [printers] 部分
printing = lprng
定义打印系统的类型,缺省是 lprng ,可选项有: bsd , sysv , plp , lprng , aix , hpux , qnx 。
guest account = guest
定义游客帐号,而且该账号必须已经存在于 /etc/passwd 中,不然它就用缺省的 nobody
log file = /var/log/samba/%m.log
定义记录文件的位置 LogFileName (一般是用 /var/log/samba/%m.log )
max log size =100
定义记录文件的大小 size (单位是 KB ,如果是 0 的话就不限大小)
security = security_level
定义 Samba 的安全级别,按从低到高分为四级: share , user , server , domain 。它们对应的验证方式:
Ø share :任何用户无需用户名和口令即可访问服务器上的资源。
user : samba 的默认配置,在访问共享资源之前必须通过本地用户验证。 Ø
Ø Server :验证是通过另一台服务器进行的,如果失败,就退到 user 级。
Ø domain :验证通过网络上的 Windows 的主域控制器进行。
后面三种安全级都要求 “ 用户 ” 在提供共享的 Linux 主机上要有帐户。
password server = <NT-Server-Name>
设置验证服务器的服务器名。当 security 设为 server 或者 domain 的时候才有必要。
encrypt passwords = yes|no
设置是否对密码进行加密, samba 本身有一个密码文件 /etc/samba/smbpasswd ,如果不对密码进行加密则在验证会话期间客户机和服务器之间传递的是明文密码, samba 直接把这个密码和 Linux 里的 /etc/samba/smbpasswd 密码文件进行验证。但是在 Windows 95 OS/2 以后的版本和 Windows NT SP3 以后的版本缺省都不传送明文密码,要让这些系统能传送明文密码必须在其注册表里更改,比较麻烦,好的方法就是把这里的这个开关设置为 yes 。
smb passwd file = /etc/samba/smbpasswd
设置存放 samba 用户密码的文件 smbPasswordFile( 一般是 /etc/samba/smbpasswd) 。
ssl CA certFile = sslFile
当 samba 编译为支持 SSL 的时候,需要指定 SSL 的证书的位置(一般在 /usr/share/ssl/certs/ca-bundle.crt )。
UNIX password sync = yes|no
passwd program = /usr/bin/passwd %u
passwd chat =*New*UNIX*password* %n/n *ReType*new*UNIX*password* %n/n *passwd:*all*authentication*tokens*updated*successfully*
这三项设置能否从 Windows 的应用程序修改 UNIX 系统的用户密码
username map =/etc/samba/smbusers
指定用户映射文件(一般是 /etc/samba/smbusers ),当我们在里面指定一行 root = administrator admin 的时候,当客户机以用户 admin 或者 administrator 连接时会被当作用户 root 看待。
include = MachineConfFile
指定对不同机器的连接采用不同的配置文件 MachineConfFile (一般为了灵活管理设置为 /etc/samba/smb.conf.%m ,由于采用了 samba 的变量,把配置文件和客户机的 NETBIOS 名称关联起来,能很容易地控制这些客户机的权限和设置)。
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
这个是网络 socket 方面的一些参数,能实现最好的文件传输性能。相关的选项还有 SO_KEEPALIVE 、 SO_REUSEADDR 、 SO_BROADCAST 、 IPTOS_LOWDELAY 、 IPTOS_THROUGHPUT 、 SO_SNDLOWAT ( * )、 SO_RCVLOWAT ( * )等,带 * 号的要指定数值。本地网络,就只用 IPTOS_LOWDELAY ,如果是广域网络,就试试 IPTOS_THROUGHPUT 。
interfaces = interface1 interface2
如果有多个网络接口,就必须在这里指定。如 interface = 192.164.12.2/24 192.164.13.2/24
remote browse sync = host(subnet)
这里指定浏览列表同步信息从哪里取得, 如用 host (比如 192.164.3.25 )或者整个子网( 192.164.1.255 )。
remote announce = 192.164.2.255/SERVERS 192.164.4.255/STAFF
指定这些机器向网络宣告自己,从而在 “ 网络邻居 ” 中可以看到该机器。
local master = yes|no
这个参数指定 nmbd 是否试图成为本地主浏览器,默认值是 yes ,如果设为 no 则 samba 服务器就永远都不会成为本地主浏览器。但即使设置了 yes ,也不等于 samba 服务器就会成为本地主浏览器。只是参与本地主浏览器选择。
os level = n
n 的值是个整数,决定了 nmbd 是否有机会成为本地广播区域的工作组里的本地主浏览器,默认值是零,零则意味着 nmbd 失去浏览选择。如果要 nmbd 更有机会成为本地主浏览器的话,可以设为 65 。
domain master = yes|no
这个参数让 nmbd 成为一个域浏览器,取得各本地主浏览器的浏览列表,并将整个域的浏览列表递交给各本地主浏览器。
preferred master = yes|no
这个参数指定 nmbd 是否是工作组里的主浏览器,如果指定为 yes , nmbd 在启动的时候就强制一个浏览选择。
preserve case = yes|no
short preserve case = yes|no
指定拷贝 DOS 文件的时候保持大小写,缺省是 no
default case = lower|upper
所有的 DOS 文件的缺省是大写还是小写
case sensitive = yes|no
大小写敏感,一般是 no ,不然会出现一些问题。
b) 共享设置:
每个 SMB 服务器能对外提供文件或打印服务,每个共享资源需要被给予一个共享名,这个名字将显示在这个服务器的资源列表中。共享名必须放在 [] 中,如 [homes] 。如果一个资源的名字的最后一个字母为 $ ,则这个共享就为隐藏共享,不能直接出现在浏览列表中,而只能通过直接访问这个名字来进行访问。
[homes] 段 这是 samba 共享中比较奇怪的一个段,专门用于提供用户目录共享的。这个段一般不需要设置共享资源的路径,其实路径就是每个用户的主目录。当客户机发出服务请求时,首先查找由 smb.conf 文件的其它配置部分设定的共享服务,如果没有发现,并且配置了 homes 段,则通过搜索 /etc/passwd 得到用户的 home 目录。通过 homes 段, Samba 可以得到用户的 home 目录并使之共享。下面是这个段的最基本的几个设置。
[homes]
comment=Home Directory
browseable=no
writable=yes
其它共享段。其它共享段是提供特殊共享的段,每个共享继承 [global] 中的设置,但如果该段中再次设置了参数,则覆盖 [global] 中的设置参数。下面是一个显示为 share1 的共享的配置:
=========================== 共享的建立 ============================
[share1] -- 共享名
comment =comment -- 共享说明
path = /home/grind -- 共享文件位置
allow hosts = host(subnet) -- 允许共享访问的设置,同 [global] 中设置方法
deny hosts = host(subnet) -- 不允许访问共享的限制,方法同上
writable = yes|no -- 共享是否可以写入
valid users = user(@group) -- 允许访问的用户和组
invalid users = user(@group) -- 不允许访问的用户和组
read list = user(@group) -- 只允许读取的用户和组
write list = user(@group) -- 总是允许读写的用户和组
admin list = user(@group) -- 能管理该共享(读写和权限修改等)的用户和组
guest ok = yes|no -- 是否允许游客访问,即无需密码访问
guest account = nobody -- 游客访问帐号,必须在 /etc/passwd 中存在
hide dot files = yes|no -- 是否不显示隐含文件
create mode = 0755 -- 新建立的文件的属性,一般是 0755
directory mode = 0755 -- 新建立的目录的属性,一般是 0755
sync always = yes|no -- 对该共享资源进行写操作后是否进行同步操作
case sensitive = yes|no -- 是否区分大小写,一般选 no ,不然可能引起错误
force user = grind
如果一个目录,让 guest 可以写,那么 guest 就可以删除,如果用 force user= grind 强制建立文件的属主是 grind ,同时限制 create mask = 0755 ,这样 guest 就不能删除了。
wide links = yes|no
上面设置确定是否允许共享外符号连接,比如共享资源里面有个连接指向非共享资源里面的文件或者目录,如果设置 wide links = no 将使该连接不可用。
max connections = 100 -- 同时连接最大数
read only = yes|no -- 共享为只读方式
=========================== 共享的建立 ============================
通过上面的方法,我们可以实现多个不同的共享设置,只要各个共享的显示名不同就可以了。但如果想把光驱、移动硬盘等 “ 动态 ” 设备共享,就需要注意,这些设备可能不是常 “ 在线 ” 的,所以,需要动态建立共享。下面我们就以光驱的共享为例,看看如何实现 “ 动态 ” 资源的共享。
=========================== 光驱的共享 ===========================
[cdrom]
comment = syd168’s DVDROM
path = /mnt/cdrom
public = yes
browseable = yes
root preexec = /bin/mount -t iso9660 -0 iocharset=cp936 /dev/cd0 /mnt/cdrom
root postexec = /bin/umount /mnt/cdrom
=========================== 光驱的共享 ===========================
这里 root preexec 指明了连接时用 root 的身份运行 mount 命令,而 root postexec 则指明了断开时用 root 身份运行 umount ,有效实现了对光驱的共享。
c) 打印机共享的设置:
========================== 打印机的共享 ===========================
[printers]
path = /var/spool/samba
writeable = no
guest ok = yes
printable = yes
printer driver = HP LaserJet 5L
========================== 打印机的共享 ===========================
这里 printable 指明该打印机可以打印, guest ok 说明游客也能打印, path 指明打印的文件队列暂时放到 /var/spool/samba 目录下。 printer driver 的作用是指明该打印机的类型,这样我们在安装网络打印机的时候可以直接自动安装驱动而不必选择。
d) Samba 用户管理:
需要注意的是,如果 Samba 的 security 配置为 user ,则将由 Samba 服务器负责用户的认证。所有要访问 Samba 的本地用户帐号必须包含在 smb passwd file 参数指定的文件中,默认是 /etc/samba/smbpasswd 。要将系统用户添加到 smbpasswd 中,使用 smbpaswd 命令即可实现, smbpasswd 的命令格式如下:
smbpasswd 参数 用户
具体参数见下表:
变量 含 义 举例
-a 添加用户 #smbpasswd -a syd1
-x 删除用户 #smbpasswd -x syd168
-d 禁用帐号 #smbpasswd -d guest
-e 取消禁用 #smbpasswd -e guest
-n 清除密码 #smbpasswd -a syd1
表 2-2
上面主要介绍了 Samba 服务端的设置,一般应用中使用上面的配置就可以满足需要了,对于一些不常用的配置就省略了,详细的信息可以用 man smb.conf 参考。
e) Linux 下访问 Samba 服务
1 )列出可共享的网络资源:
smbclient -L IP 或 NETBIOS 名
作用是显示某台提供 samba 服务的服务器上的共享资源。命令执行效果如下:
#smbclient –L 172.12.0.3
该命令的执行结果如下:
======================== 下面是共享的信息 ========================
共享名 共享类型 说明
--------- ---- -------
Homes Disk Home Directories
Var Dis var
IPC$ IPC syd168's samba server v3.0.7-1.3E.1
ADMIN$ IPC syd168's samba server v3.0.7-1.3E.1
sydlinuxp1 Printer Created by redhat-config-printer 0.2.x
================ 下面是共享服务器的信息 ========================
服务器 说明
--------- -------
SYDLINUX syd168's samba server v3.0.7-1.3E.1
===================== 下面是 Mast 机器的信息 =====================
工作组 主服务器
--------- -------
SYD168-RHAS3 SYDLINUX
上面第一段列举了该机器 172.12.0.3 上面的共享资源,第二段列举了 172.12.0.3 所在的工作组里面所有提供 samba 服务的机器,第三段列举了其他工作组提供 Browse 服务的 Master 机器信息。
2 )使用网络资源:
smbclient //IP 或 NETBIOS 名 / 共享名 [-U 用户名 ]
命令执行效果如下:
#smbclient //172.12.0.3/syd1
added interface IP=172.12.0.3 bcast=172.12.251.255 nmask=251.251.0.0
got a positive name query response from 172.12.0.3 (172.12.0.3)
Password:
Domain=[BLUESUN] OS=[Windows 1.0] Server=[Windows 2000 LAN Manager]
smb: >
接着的操作和 ftp 的命令一样,用 get 下载文件,用 put 上传文件,用 help 命令查看帮助。
另一种使用共享的方法就是将共享挂载在文件系统下,象访问本地目录一样访问。挂载的方法如下:
smbmount //IP 或 NETBIOS 名 / 共享名 / 本地挂接点 [-o option]
常用的 option 有 username=< 用户名 > , password=< 密码 > , guest (指定为用 guest 访问,不用提供密码,但 username=guest 也会要求输入密码), ro (有时候为了系统安全要指定为只读模式), rw 为可读写,如有多个 option ,之间用逗号隔开。
或者可以用如下命令实现同样的功能:
mount -t smbfs [-o option] //IP 或 NETBIOS 名 / 共享名 / 本地挂接点
例子如下:
#smbmount /172.12.0.3/syd1 /mnt/test1 -o guest
或
#mount -t smbfs -o guest iocharset=cp936 //172.12.0.3/syd1 /mnt/test1
然后就能通过访问 /test 来使用网络上的资源了。
如果不再需要,可以简单地使用如下的命令卸载连接:
smbumount /mnt/test1 或 umount /mnt/test1
f) Windows 下访问 Linux 的共享
要在 Windows 下访问 Linux 中提供的共享,和使用一般的 Windows 共享一样,可以有多种方法:
1 ) 在 Windows 搜索 Linux 服务器
2 ) 在使用 Windows 提供的网络邻居功能
3 ) 在地址栏输入 //samba 服务器 IP/ 共享名
该介绍的我都介绍完了 , 重新启动服务 !
或许您会发现客户端无法连接 , 奶奶的 , 真让人生气 , 忙了这么久 , 还是不能访问 ,why?
1) 客户端应安装 tcp/ip netbios ipx( 这个东东不太懂 )
2lmhosts, IP 地址和 netbios 名子对应 .
3)iptables( 这个东西最坏 , 就是因为他 , 我浪费了两天时间 ! 我得出一个小小的结论 , 做各种配置前把 iptables 给关闭 !)
由于我对 iptables 不太懂 , 我的解决方式有两种 :
1:#setup 然后选择防火墙 , 然后关闭
2. 修改 /etc/sysconfig/iptables
-A INPUT -j RH-Lokkit-0-50-INPUT
-A FORWARD -j RH-Lokkit-0-50-INPUT
-A RH-Lokkit-0-50-INPUT -i lo -j ACCEPT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 0:1023 --syn -j ACCEPT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 2049 --syn -j REJECT
-A RH-Lokkit-0-50-INPUT -p udp -m udp --dport 0:1023 -j ACCEPT
-A RH-Lokkit-0-50-INPUT -p udp -m udp --dport 2049 -j REJECT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 6000:6009 --syn -j REJECT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 7100 --syn -j REJECT
COMMIT
把 0:1023 的两行的 REJECT 改成 ACCEPT
重新启动防火墙就可以了
#service iptables start
这样应该可以了 , 建议多实践 , 由于自己是个新手 , 可能有很多地方让您见笑了
samba 中文乱码问题
vi /etc/samba/smb.conf
根据 locales 的设置,修改该文件:
1. 如果 locale 是 zh_CN.UTF-8 ,做如下设置:
display charset = UTF-8
unix charset = UTF-8
dos charset = UTF-8
2. 如果 locale 是 zh_CN.GBK 或 zh_CN.gb2312 ,做如下设置:
display charset = cp936
unix charset = cp936
dos charset = cp936
重启 samba:
service samba restart
则无论从 windows 的网上邻居,还是直接用 securecrt 登陆,均可显示正常中文