|
摘自:http://puxiuer1982.spaces.live.c ... !131.entry#category
什么是samba?
samba是一个工具套件,在Unix上实现SMB(Session Message Block)协议,或者称之为NETBIOS/LanManager 协议.SMB协议通常是被瘟都死系列用来实现磁盘和打印机共享.需要注意的是,NetBIOS是基于以太网广播 机制的,没有透明网桥是不能跨越网段的,也许用WINS和LMHOSTS可以,但我没试过.我感觉samba是把SMB绑 定到TCP/IP上实现的,samba只在IP子网内广播(很多时候我不得不指定IP地址:-().所以在win95上与samba 通讯既要装NetBEUI协议,也要装tcp/ip协议!!
samba的主要部分有:
两个守护程序: smbd 和 nmbd(对客户端提供NetBIOS名服务)
配置文件: /etc/smb.conf
使用工具: smbclient,smbstatus,smbmount,smbumount,smbprint,smbprint.sysv,smbrun
samba的启动脚本在/etc/rc.d/init.d/smb
BTW,不要把smb与smp(对称多处理器)搞混了,更不要把NetBIOS名与DNS里的主机名搞混淆了!
samba缺省 是把主机名设置成NetBIOS名,这样通常会超出NetBIOS名的长度限制(16个字符).
SAMBA的 安 装
SAMBA是 跑 在 TCP/IP协 议 之 上 , 所 以 要 先 安 装 Linux和 Win 95的 TCP/IP协 议 。 并 用 PING 指 令 测 试 互 相 之 间 协 议 已 经 建 立 。
SAMBA的 程 式 , 一 般 的 Slackware CD-ROM已 包 含 。
你 可 以 在 /contrib目 录 之 下 找 到 /cdrom/contrib/samba-1.9.15p8.tgz, 若 在 CD-ROM找 不 到 , 可 以 FTP上 Download: ftp:// nimbus.anu.edu.au/pub/tridge/samba/samba-1.9.15p8.tgz。
要 用 root使 用 者 登 录 , 要 解 压 缩 之 前 , 要 将 当 前 所 在 目 录 换 到 根 目 录 。
cd /
tar -zxvf /cdrom/contrib/samba-1.9.15p8.tgz
./
etc/
etc/smb.conf-sample
usr/
usr/sbin/
usr/sbin/smbd
usr/sbin/nmbd
usr/sbin/testparm
usr/sbin/testprns
usr/sbin/smbrun
usr/sbin/smbstatus
usr/sbin/addtosmbpass
usr/sbin/nmblookup
usr/sbin/smbtar
usr/man/
usr/man/man1/
usr/man/man1/smbclient.1.gz
usr/man/man1/smbrun.1.gz
usr/man/man1/smbstatus.1.gz
usr/man/man1/smbtar.1.gz
usr/man/man1/testparm.1.gz
usr/man/man1/testprns.1.gz
usr/man/man5/
usr/man/man5/smb.conf.5.gz
usr/man/man7/
usr/man/man7/samba.7.gz
usr/man/man8/
usr/man/man8/nmbd.8.gz
usr/man/man8/smbd.8.gz
usr/doc/
usr/doc/samba/
.....
.....
usr/bin/
usr/bin/smbclient
配 置 档 参 数 设 置 : /etc/smb.conf
在 /etc之 下 已 有 一 个 基 本 配 置 例 子 smb. conf-sample。 我 们 稍 加 修 改 简 化 如 下 :
; Configuration file for smbd.
;==============================================
; For the format of this file and comprehensive descriptions of all the
; configuration option, please refer to the man page for smb.conf(5).
[global]
printing = bsd
printcap name = /etc/printcap
load printers = yes
guest account = guest
log file = /usr/local/samba/log.%m
lock directory = /usr/local/samba/var/locks
share modes = yes
[homes]
comment = Home Directories
browseable = yes
read only = no
create mode = 0750
[printers]
comment = All Printers
browseable = no printable = yes
public = no writable = no
create mode = 0700
[Win95]
comment = Temporary file space
path = /Win95
writeable = yes
public = yes
guest ok = yes
这 个 简 化 配 置 , 可 以 让 Win 95使 用 者 , 使 用 他 在 Linux上 的 HOME目 录 , 共 享 目 录 Win 95和 共 享 的 Printers。 在 Linux上 要 确 定 有 一 个 guest的 帐 号 , 基 本 Linux已 具 备 , 不 用 担 心 。 另 外 , 要 在 Linux上 (mkdir /Win95; chmod 777 Win95)要 建 立 一 个 共 享 目 录 /Win 95。 共 享 Printers的 设 定 , 在 原 有 Printers配 置 档 /etc/printcap。
SAMBA 配 置 档 参 数 设 置 测 试
SAMBA提 供 一 个 参 数 设 置 测 试 程 式 :
/usr/sbin/testparm
Load smb config files from /etc/smb.conf
Pocessing configuration file “ /etc/smb.conf”
Pocessing section “ [homes]”
Pocessing section “ [printers]”
No path in service printers - using /tmp
Processing section “ [Win95]”
Loaded services file OK.
Press enter to see a dump of your service definitions
若 发 现 任 何 错 误 信 息 , 可 参 考 mansmb.conf。 这 是 个 3500行 的 配 置 参 数 资 料 , 亦 可 提 供 将 来 做 复 杂 配 置 的 参 考 。
SAMBA 的 启 动 与 使 用
Samba的 启 动 有 二 种 方 式 , 一 种 是 以 Daemon的 形 式 , 另 一 种 为 Inetd的 形 式 。 先 谈 Daemon的 形 式 , 建 一 个 起 动 档 rc.samba。
vi /etc/rc.d/rc.samba
smbd -D -d1
nmbd -D -d1 -G 95-wg -n linux-devp
?mbd的 -D参 数 代 表 要 以 Daemon方 式 运 行 , - d1除 错 记 录 级 别 。 釴mbd的 -D参 数 代 表 要 以 Daemon方 式 运 行 , -d1 除 错 记 录 级 别 。 峰G後 面 是 与 Win 95相 同 Workgroup名 , 在 此 我 用 95-wg为 Workgroup名 。 峰n後 面 是 Linux在 Workgroup之 内 的 电 脑 名 , 在 此 我 用 linux-devp为 电 脑 名 。
接 着 就 是 执 行 rc.samba, 现 在 你 可 以 用 ps-aux, 看 到 两 个 Daemons在 背 後 进 行 。
再 谈 用 Inetd的 形 式 启 动 , 有 些 人 喜 欢 以 Inetd的 方 式 , 因 为 它 比 较 省 电 脑 资 源 。 一 旦 一 个 程 式 以 Daemons方 式 运 行 , 反 应 速 度 较 快 , 但 Daemons将 随 时 占 有 系 统 资 源 。 若 电 脑 没 有 资 源 分 配 的 问 题 , 我 比 较 喜 欢 Daemons的 方 式 , 较 易 安 装 使 用 。 要 使 用 Inetd的 形 式 运 行 , 要 确 定 以 下 设 置 :
/etc/services
netbios-ssn 139/tcp
netbios-ns 137/udp
/etc/inetd.conf
netbios-ssn stream tcp nowait root /usr/sbin/smbd smbd
netbios-ns dgram udp wait root /usr/sbin/nmbd nmbd
若 有 问 题 可 参 考 mansmbd 和 mannmbd。
若 以 上 配 置 均 正 确 , Samba已 经 在 Linux与 Win 95之 间 连 网 成 功 。 我 们 到 Win 95的 电 脑 , 看 看 Network Neighborhood,
若 你 要 把 Linux当 做 Win 95之 下 的 某 个 Logic Hard Drive, 只 要 在 Win 95的 Dos Prompt: C:> net g: \\\\linux-devp\\Win95 如 此 一 来 , Win 95电 脑 的 G Drive即 等 於 Linux上 的 /Win95目 录 。
我 把 SAMBA装 在 家 中 和 公 司 。 我 很 明 显 增 加 工 作 效 率 。 其 功 能 犹 如 加 了 一 台 免 费 的 Novell Server在 Win 95与 Win 95和 Linux之 间 共 享 Files & Printers。 若 行 有 馀 力 , 尚 可 把 Linux安 装 设 置 为 Mail Server, 利 用 Linux原 有 的 SMTP & POP Server, 如 此 一 来 , 办 公 自 动 化 , 似 乎 不 用 花 半 毛 钱 , 即 可 达 成 。 有 这 麽 好 的 事 , 忍 不 住 赶 快 写 此 文 章 告 知 读 者 , 嘉 惠 同 好 。
( 作 者 为 Master CNE和 Microsoft Certified System Engineer现 任 职 Texcom Inc.总 工 程 师 , 可 连 络 E-Mail:champion@texcom.com)
如何实现linux和win95的资源共享,配置为:redhat5.1,安 装时选择了全部;win98安装了tcp/ip和ipx/spx协议.
有一个叫做Samba的著名软件,可以运行在包括Linux在内的各种UNIX上,它支持运行于TCP/IP协议上的SMB协议,可以把UNIX主机仿真成Windows NT服务器。 RedHat 5.1里已经包括了 samba 1.9.18p5 版,只需要按照需要修改/etc/smb.conf文件,运行smbd和nmbd就可以了。
我在LINUX下用SMB设置了一个所有人共享的目录,但WIN95客户机上只能读出 文件内容,无法修改、删除
看看你的/home/share目录的属性,是不是所有人都能写? chmod a+w /home/share
对照着SMB-HOWTO弄了半天,终于能够实现95和linux的共享了, 不过好象还有些问题,我在运行smbclient的时候,老是有一些错误提示,但还能用,请你帮我看一下,是怎么回事儿?
[root@kaifenginfo]#/usr/bin/smbclient \\\\\\\\wangdi\\\\html
load_client_codepage:filename
/etc/codepages/codepages.850 does not exist.
Added interface
ip=202.102.238.149
bcast=202.102.238.151
nmask=255.255.255.248
startlmhosts:Can't open lmhosts file
/etc/lmhosts. Error was No such file or directory
这两个文件我在SMB-HOWTO里都没看见,到底是怎么回事? RedHat5.1 现在还有别的问题,我在98中找到了我的linux服务器,但当我双击它时它要求输入密码, 请Q这是什么密码,在哪里设置才能登录到我的linux服务器上?
用 smbclient //wangdi/html 好象更方便一些?
>>/etc/codepages/codepages.850 does not
这个嘛, 问题不大, 你看看/usr/lib/codepages 这个目录有没有? 若有,符号连接到/etc/codepages就可以了。
>>这两个文件我在SMB-HOWTO里都没看见,到底是怎么回事 1.9.18p4以后的版本在查询客户机地址时多了一个根据lmhosts文件的功能, 对于一般 用户来讲实在没必要, 在/etc/smb.conf里加一句: name resolve order = host wins dns 就搞定了.
或者更简单, 建一个空文件/etc/lmhosts, 里面什么也没有, 骗骗他. :-)
如果在smb.conf 里设置的是 security = user 那么,你就输入在linux box上的口令.
如果 security = SERVER , 就输入在Windows NT域上的口令.
如果对安全性要求不高的话,可以把共享设成SHARE-LEVEL, 在smb.conf中把security = user 改成 security = share 不过这样就只有win95级别的安全性了.
拨号用户如何使用局域网上的Linux Samba 服务器?
目的: 公司局域网上有一台Samba server,并设置为PPP 服务器,拨号用户 拨入后可以把Samba服务器上的共享资源映射为一个盘符来访问。
前提: 假设局域网上一台Samba server正常工作,并设为共享级安全模式 (security=share), workgroup设置为ISD,同时也设置为PPP服务 器可供windows拨号用户成功拨入。
实现方法:
1. 假设Samba server 的IP address 为 192.168.11.3,主机名为 sh3 , 其中一共享名为 pub, 工作组为: ISD.
2. 假设 Windows 默认安装目录为 c:\\windows ,编辑 c:\\windows\\lmhosts 为:192.168.11.3 sh3 #PRE #DOM:isd 然后在DOS提示符下执行命令:nbtstat -R 去enable it.(不需要重新启动windows)
3. 你的windows PC必须登录,可以以一个新的用户名进行 windows logon, 提示密码时键入两次回车即可 。
4. 登录后在DOS窗口提示符下键入 net use m: \\\\sh3\\pub 即可。
注意:
1. 有些IBM机型预装的windows有bug,正常情况下不能以windows login, 你必须在第一次正常启动后再次选择 “关闭windows并以其他用户 身份登录”,也可从IBM网站下下载一补丁程序进行修补。
2. 若是下载单个的文件,你也可以不用映射盘符,就把你的Samba服务器 也设成http server,并在浏览器中以 http://sh3/pub 去访问。具体 做法参考其他书籍。
> 在win95网络邻居看不到Linux box?
注意/etc/smb.conf文件里以下几项的设置:
guest account = pcguest(不要照着写,添实际的名字,你要去创建一个pcguest帐号)
null password = yes (这一点很重要!)
browseable = yes
public = yes
另外把security改为share试试. 仔细读一读\"man smb.conf\".
再说瘟95那个破东西,网络邻居运行一百遍才可能会出来你想要的.
用这个方法试一试:先用smbmount 瘟95的一个共享目录,用\"网络监视器\"查看一下,然后再用网络邻居看. > smbmount怎么用?
不能用man smbmount看看吗?
大致是: smbmount //win95-name/share-dir /mount-point [-I ip地址或主机名] [-c 本机客户名] []表示可选项, 本机客户名可以随便取.
Samuel Leo补充道: 标准的smbmount使用格式是 smbmount //server/share -c \"mount /mnt -u uid -g gid\" (注:好象不对吧)
我编译了一个修改版的smbmount, 使用格式为 smbmount //server/share /mnt [passwd] [-Uusername] [-9] ftp://202.103.190.5/incoming/smbmount.gz (binary) 如果你用redhat, 也可以试试最新出的smbwrapper ftp://202.103.190.5/incoming/smbwrapper.so.gz
设置一下环境变量
LD_PRELOAD=/anywhere/smbwrapper.so
SMBW_USER=username
SMBW_PASSWORD=passsword
SMBW_WORKGROUP=workgroup #optional
SMBW_DEBUG=4 #optional
SMBW_LOGFILE=smbw.log #optional, default to stderr
SMBW_PREFIX=/smb #optional, default to /smb
export PWD SMBW_USER SMBW_PASSWORD SMBW_WORKGROUP
export SMBW_DEBUG SMBW_LOGFILE SMBW_PREFIX
然后你就可以\"ls /smb\"看到同组的所有机器名. \"ls /smb/server\"看该机的共享清单. 缺点就是太慢, 10.10版对execle,execve,...等指定envp的exec仍有bug 不能下执行/smb下的文件, 不能mmap /smb下的文件.
> 先谢谢各位!
> 我的Pwin95现在可以看到linux了,我保证什么也未修改过。
> 现在,我从linux上执行:
> smbclient //sjj2/nes(pwin95机器),可看到文件并显示:
> smb:\\>
> smbclient -L sjj2,可看到sjj0(linux)和sjj2(pwin95)。
> 但是我不能从pwin95上访问linux(sjj0),双击总显示:
> 找不到机器名或共享名,请确认输入正确,然后重试。
> 我对smbmount不会用,也找不到能看明白的帮助,因为
> 我不理解mount-point的含义,请指导;linux上的
> smbd和nmbd当然是运行的。
> 再谢各位!请继续帮忙。Smb.conf在前面的贴子中。
Win95的网络邻居问题太多,别说跟Linux多不去,就是几台Win95之间连个小网,只要没有NT服务器, 他们就经常互相找不到。
所以,一定要把samba的WINS服务器功能打开,(wins support = yes), 然后把95的WINS服务器指向他。
也许还要加入: name resolv order = wins hosts bcast 这样做的话最好让Linux先于瘟95启动起来!
>我在REDHAT 5.1里可以共享WIN98的服务,在WIN98的网上邻居里 >可以看到LINUX的机子,但提示\\\\linux\\IPC$ 需要口令,输入口令总 >不正确,不知该如何设置?
此问题好象不单linux有,NT也有,原因是连接时没有用户名的信息,不要直接点击图 标,用磁盘映射:\\\\linux\\username 的格式 WIN98使用加密的口令认证,而RedHat的SMB缺省使用明文认证,所以口令总是不正确。 可以在smb.conf中加入 encrypt passwords = yes 并使用smbpasswd 维护用户口令 Win98 上选 开始 -> 注销 ,用 Linux 机器上的用户名和口令登录, 然后不用输入口令就可以访问 Linux 的资源了。这和 NT 上是一样的。 或者 Linux 机器上的 /etc/smb.conf 里改成 security = share, guest account = username (username 改成你机器上的一个用户帐号)。 这样如果 Win98 不是用 Linux 系统上的用户帐号登录的,也可以直接 访问 Linux ,其权限等于 guest account 指定的用户的权限。Linux 作出改动后要重启。 注:完全不必重新启动,可以到/etc/rc.d/init.d下去执行smbd stop,然后再smbd start 就可以了(这是在Redhat中).在Linux下要学会尽量不重启的基本技巧!
> 如何让win98发送明文密码呢?
如果你用win98或打过很多补丁的win95. 如果samba不提供口令加密是不能登录的.
1. 执行Win95_PlainPassword.reg允许win95发送明文口令 运行REGEDIT,添加: [HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\VxD\\VNETSUP] \"EnablePlainTextPassword\"=dword:00000001
2. 升级到最新的samba, 打开口令加密开关. > BTW:哪一版SMABA可设加密校验,如何设?
我的 samba 1.9.18p10 就已经可以了. 在 smb.conf 里面找到
# You may wish to use password encryption. Please read
# ENCRYPTION.txt, Win95.txt and WinNT.txt in the Samba documentation.
# Do not enable this option unless you have read those documents
encrypt passwords = yes
smb passwd file = /usr/private/smbpasswd 这一段就可以了. > 为什么smbclient \\\\NetBIOS-name\\share-dir 总是不对?
这是shell的原因,应该用smbclient \\\\\\\\name\\\\share-dir或者是smbclient '\\\\name\\share-dir' shell不处理两个单引号之间的内容.
如果你熟悉C语言,应该很清楚为什么了! 或者使用smbclient //NetBios-name/share-dir 就不存在这个问题。 > 我在我的Linux机器上设好了smb.conf如下(删去了所有注释),为什么NT不认samba?
把 security = user
改成: security = server
samba 1.9.18以前的版本还不完全支持NT的所谓\"域\",
2.0.0版正在开发中,对此有不小的进步. >我在安装时碰到了问题。我选择了shadow,no pam,
> 还选了disk quota,结果出现
> quotas.c:38:sys/quota.h:No such file or director
> 这以后再不能编译了。我把选择该为 shadow no pam ,no quota,有编译,出现:
> cc:internal compoler error:program cc1 got fatal signal 6
> make :*** [smbpass.o] Error!
> 我再把shadow ,pam quota 等选项选来选去,总是这个错误都不变化了。好象以前编译
> 通过的就不编了只编译后面的。我怎样才能让它重新编译?
> slackware 3.4 kernel 2.0.30
> Thanks!
如果你用的是Slackware 3.4的话, 应该是shadow, no pam , no quota 大概从1.9.18p4开始就无法正常编译了,到了smbpass.o必定出这个错.
解决方法有几个:
1. 直接下载编译好的文件
2. 升级GCC到2.8.1, 或者 egcs-1.0.2 3. 升级到Slackware 3.5 > 本人单位财务部门需要装一台文件服务器,我安装了Redhat 5.1,用 samba
> 作为文件服务器,客户端使用的是win95,现在win95已可以在网络邻居中找到
> 服务器,我将共享目录映射为F:盘,经过试验,大幅度地拷贝文件都没问题.
> 但是,因为财务软件是dos方式下的,当我执行F:\\下的帐务程序时,一次、两次、
> 甚至数次都没问题,但是若干次后每个客户端都出现死机现象。我将samba
> stop一下,再start就可以了,请问这是怎么一回事?以前用NT做服务器并没有
> 这样的现象。
俺原来用RH 4.2, kernel 2.0.30+ samba 1.9.16p11也有同样的问题update后就ok了,
现在俺用的是kernel 2.0.35 + samba 1.9.18p8 在Linux Box里共享Win上的打印机
共享Linux上打印机的问题
补充几个SMB的工具软件:
KDE里面带了个kcmsamba,类似于“网络监视器”的东西。
qnetmon/knetmon: 类似于\"网络邻居/网络监视器\"的东西,用qt写的,带k的表示KDE。
GtkSamba: 嘿嘿,gtk的爱好者与qt的爱好者对着干,真好!
tkSmb: 用tcl/tk写的前端图形界面.
Samba的配置还可以用webmin来做,这个软件允许你通过浏览器来配置Linux(Linuxconf 也是可以的),但webmin只允许你用浏览器来配置。
关于2.1.xxx的新内核,好象samba 1.9.18p5工作不正常,耐心等待samba 2.0吧!
题外话,前些天我在freshmeat.net上看到一个软件LinPopup,可以和winpopup互相chat, 也是基于samba的.
在Everthing Linux里看到一篇\"Win95 Connectivity Using Samba/SMB\"。 |
|