快速配置 Samba 将 Linux 目录映射为 Windows 驱动器,用于跨平台编程

一、局域网内的 Linux 服务器上操作步骤:

  1、安装samba(CentOS Linux):

yum install samba system-config-samba samba-client samba-common



  2、创建www账号

/usr/sbin/groupadd www
/usr/sbin/useradd -g www www

mkdir -p /data0/knose/
chmod 777 /data0/knose/

mkdir -p /data0/htdocs/
chown -R www:www /data0/htdocs/
chmod 777 /data0/htdocs/

cat /etc/passwd | mksmbpasswd.sh> /etc/samba/smbpasswd



  3、创建samba配置文件

mv -f /etc/samba/smb.conf /etc/samba/smb.conf.bak
vi /etc/samba/smb.conf


  输入以下内容:

引用
[global]
server string = Samba Server
security = user
encrypt passwords = yes 
smb passwd file = /etc/samba/smbpasswd

[knose]
workgroup = root
netbios name = root
path = /data0/knose
browseable = yes
writeable = yes

[web]
workgroup = www
netbios name = www
path = /data0/htdocs
browseable = yes
writeable = yes



  4、为samba用户www、root设立一个密码:

smbpasswd -a www
smbpasswd -a root



  5、启动samba:

/sbin/service smb start




  二、局域网内的 Windows 服务器上操作步骤:

  1、Windows 上访问 samba,在“我的电脑”中输入:

\\xxx.xxx.xxx.xxx\



  2、Windows 断开 samba 共享连接,在【开始】→【运行】→【cmd】回车中输入:

net use * /del



  3、将 samba 共享的 Linux 目录,映射成 Windows 的一个驱动器盘符:

  快速配置 Samba 将 Linux 目录映射为 Windows 驱动器,用于跨平台编程_第1张图片

  快速配置 Samba 将 Linux 目录映射为 Windows 驱动器,用于跨平台编程_第2张图片

  快速配置 Samba 将 Linux 目录映射为 Windows 驱动器,用于跨平台编程_第3张图片



  三、跨平台C/C++代码编译、调试:

  用 Windows 下的编辑器编写、修改跨平台的C/C++代码,保存后,无需复制到其他地方,即可同时用 Windows 下的 Visual Studio,Linux 下的 g++、gcc、gdb,编译、调试程序了。

  快速配置 Samba 将 Linux 目录映射为 Windows 驱动器,用于跨平台编程_第4张图片

  快速配置 Samba 将 Linux 目录映射为 Windows 驱动器,用于跨平台编程_第5张图片

  注意:在samba共享的驱动器上执行“.bat”批处理脚本,会导致 Windows 蓝屏,这一点需要注意。

 

 

 

简介

  samba是一个工具套件,在Unix上实现SMB(Server Message Block)协议,或者称之为NETBIOS/LanManager协议。SMB协议通常是被windows系列用来实现磁盘和打印机共享。需要注意的 是,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个字符).

编辑本段使用中的问题

在Win95网上邻居看不到Linux box?

  注意/etc/smb.conf文件里以下几项的设置:   guest account = pcguest(不要照着写,添实际的名字,你要去创建一个pcguest帐号)   null password = yes (这一点很重要!)   browseable = yes   public = yes   另外把security改为share试试.   仔细读一读"man smb.conf".   再说Win95那个破东西,网上邻居运行一百遍才可能会出来你想要的.   用这个方法试一试:先用smbmount Win95的一个共享目录,用"网络监视器"查看一下,然后再用网上邻居看.

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/    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先于Win95启动起来!

密码问题

  >我在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:哪一版Samba可设加密校验,如何设?   我的 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 相关

  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

你可能感兴趣的:(windows)