LINUX SAMBA共享的问题

LINUX SAMBA共享的问题,第1张

一步一学Linux与Windows 共享文件Samba (正在更新、修订中)
作者:北南南北,正在增加中 需要您的参与;
来自:LinuxSirOrg
简介:本文只是讲一讲我们最常用的Linux与Windows共享文件,主要是为新手指一指路。如何建立最简单的Samba服务器,并讲述遇到问题应该从何处寻找解决方案;正在更新之中,希望您的参加 谢谢;
目录
1 Samba 简介
2 Samba 功能和应用范围
3 Samba 两个服务器相关启动程序、客户端及服务器配置文件等;
31 Samba 有两个服务器,一个是smbd,另一个是nmbd;
32 查看Samba 服务器的端口及防火墙;
33 查看Samba 服务器的配置文件;
34 Samba 在Linux 中的一些工具(服务器端和客户端);
35 在Linux 中的常用工具,Windows查看Linux共享的方法 ;
351 在Linux系统中查看网络中Windows共享文件及Linux中的Samba共享文件;
352 在Windows中访问Linux Samba服务器共享文件的办法;
353 smbfs文件系统的挂载;
4 由最简单的一个例子说起,匿名用户可读可写的实现;
第一步: 更改smbconf
第二步:建立相应目录并授权;
第三步:启动smbd和nmbd服务器;
第四步:查看smbd进程,确认Samba 服务器是否运行起来了;
第五步:访问Samba 服务器的共享;
++++++++++++++++++++++++++++++++++++++++++++++++
正文
++++++++++++++++++++++++++++++++++++++++++++++++
1 Samba 简介
Samba(SMB是其缩写) 是一个网络服务器,用于Linux和Windows共享文件之用;Samba 即可以用于Windows和Linux之间的共享文件,也一样用于Linux和Linux之间的共享文件;不过对于Linux和Linux之间共享文件有更好的网络文件系统NFS,NFS也是需要架设服务器的;
大家知道在Windows 网络中的每台机器即可以是文件共享的服务器,也可以同是客户机;Samba 也一样能行,比如一台Linux的机器,如果架了Samba Server 后,它能充当共享服务器,同时也能做为客户机来访问其它网络中的Windows共享文件系统,或其它Linux的Sabmba 服务器;
我们在Windows网络中,看到共享文件功能知道,我们直接就可以把共享文件夹当做本地硬盘来使用。在Linux的中,就是通过Samba的向网络中的机器提供共享文件系统,也可以把网络中其它机器的共享挂载在本地机上使用;这在一定意义上说和FTP是不一样的。
Samba 用的netbios协议,如果您用Samba 不成功,
Linux与Windows 、Linux 和 Linux
2 Samba 功能和应用范围
Samba 应该范围主要是Windows和Linux 系统共存的网络中使用;如果一个网络环境都是Linux或Unix类的系统,没有必要用Samba,应该用NFS更好一点;
那Samba 能为我们提供点什么服务呢?主要是共享文件和共享打印机;
3 Samba 两个服务器相关启动程序、客户端及服务器配置文件等;
31 Samba 有两个服务器,一个是smb,另一个是nmb;
smb 是Samba 的主要启动服务器,让其它机器能知道此机器共享了什么;如果不打开nmb服务器的话,只能通过IP来访问,比如在Windows的IE浏览器上打入下面的一条来访问;
\\19216815\共享目录
\\19216815\opt
而nmb是解析用的,解析了什么呢?就是把这台Linux机器所共享的工作组及在此工作组下的netbios name解析出来;
一般的情况下,在RPM包的系统,如果是用RPM包安装的Samba ,一般可以通过如下的方式来启动Samba服务器;
[root@localhost ~]# /etc/initd/smb start
启动 SMB 服务: [ 确定 ]
启动 NMB 服务: [ 确定 ]
如果停止呢?就在smb后面加stop ;重启就是restart
[root@localhost ~]# /etc/initd/smb stop
[root@localhost ~]# /etc/initd/smb restart
对于所有系统来说,通用的办法就是直接运行smb 和nmb;当然您要知道smb和nmb所在的目录才行;如果是自己编译的Samba ,您应该知道您把Samba放在哪里了;
[root@localhost ~]# /usr/sbin/smbd
[root@localhost ~]# /usr/sbin/nmbd
查看服务器是否运行起来了,则用下面的命令;
[root@localhost ~]# pgrep smbd
[root@localhost ~]# pgrep nmbd
关掉Samba服务器,也可以用下面的办法,大多是通用的;要root权限来执行;
[root@localhost ~]# pkill smbd
[root@localhost ~]# pkill nmbd
32 查看Samba 服务器的端口及防火墙;
查看这个有何用呢?有时你的防火墙可能会把smbd服务器的端口封掉,所以我们应该smbd服务器所占用的端口;下面查看中,我们知道smbd所占用的端口是139和445 ;
[root@localhost ~]# netstat -tlnp |grep smb
tcp 0 0 0000:139 0000: LISTEN 10639/smbd
tcp 0 0 0000:445 0000: LISTEN 10639/smbd
如果您有防火墙,一定要把这两个端口打开。如果不知道怎么打开。可能你和我一样是新手,还是把防火墙规则清掉也行;
[root@localhost ~]# iptables -F

[root@localhost ~]# /sbin/iptables -F
33、查看Samba 服务器的配置文件;
如果我们是用Linux发行版自带的Samba软件包,一般情况下Samba服务器的配置文件都位于/etc/samba目录中,服务器的主配置文件是smbconf;也有有户配置文件 smbpasswd、smbusers和lmhosts等(最好您查看一下这些文件的内容);还有一个文件是secretstdb,这个文件是Samba 服务器启动手自动生成的;我们慢慢根据教程的进度来适当地增加这些文件的说明吧;一下子都说出来,感觉内容太多;所以只能一点一点的来了;
34、Samba 在Linux 中的一些工具(服务器端和客户端);
smbcacls smbcontrol smbencrypt smbmount smbprint smbstatus smbtree
smbclient smbcquotas smbmnt smbpasswd smbspool smbtar smbumount
smbd nmbd mount
其中服务器端的是smbd、nmbd、smbpasswd ;其它的大多是客户端;这些并不是都需要一定要精通的,但至少得会用几个;比如smbmount(也就是mount 加参数的用法),还用smbclient等;
35 在Linux 中的常用工具mount(smbmount)和smbclient;Windows查看Linux共享的方法 ;
351 在Linux系统中查看网络中Windows共享文件及Linux中的Samba共享文件;
一般的情况下,我们要用到smbclient;常用的用法也无非是下面的;
[root@localhost ~]# smbclient -L //ip地址或计算机名
这个以后慢慢补充吧;
352 在Windows中访问Linux Samba服务器共享文件的办法;
这个简单吧,在网上领居,查看工作组就能看得到,或者在浏览器上输入如下的
\\ip地址或计算机名
这样就能看到这个机器上有什么共享的了,点鼠标 *** 作完成;如果访问不了,不要忘记把Linux的防火墙规划清掉,或让相应的端口通过;
353 smbfs文件系统的挂载;
mount 的用法,加载网络中的共享文件夹到本地机;mount就是用于挂载文件系统的,SMB做为网络文件系统的一种,也能用mount挂载;smbmount说到底也是用mount的一个变种;
mount 挂载smbfs的用法;
mount -t smbfs -o codepage=cp936,username=用户名,password=密码 , -l //ip地址/共享文件夹名 挂载点

mount -t smbfs -o codepage=cp936,username=用户名,password=密码 , -l //计算机名/共享文件夹名 挂载点

mount -t smbfs -o codepage=cp936 //ip地址或计算机名/共享文件夹名 挂载点
smbmount的用法:
smbmount -o username=用户名,password=密码 , -l //ip地址或计算机名/共享文件夹名 挂载点
smbmount //ip地址或计算机名/共享文件夹名 挂载点
说明:
如果您的服务器是以share共享的,则无需用户名和密码就能挂载,如果出现要密码的提示,直接回车就行;您也可以用smbmount 来挂载,这样就无需用mount -t smbfs来指定文件系统的类型了;
对于挂载点,我们要自己建立一个文件夹,比如我们可以建在/opt/smbhd,这由您说的算吧;
在mount的命令中,我们发现有这样的一个参数codepage=cp936,这是服务器端文件系统的编码的指定,cp936 就是简体中文,当然您可以用utf8等,尝试一下吧。
如果您挂载了远程的smbfs文件系统出现的是简体中文乱码,就要考虑挂载时要指定编码了;
4、由最简单的一个例子说起,匿名用户可读可写的实现;
第一步: 更改smbconf
我们来实现一个最简单的功能,让所有用户可以读写一个Samba 服务器共享的一个文件夹;我们要改动一下smbconf ;首先您要备份一下smbconf文件;
[root@localhost ~]# cd /etc/samba
[root@localhost samba]# mv smbconf smbconfBAK
然后我们来重新创建一个smbconf文件;
[root@localhost samba]#touch smbconf
然后我们把下面这段写入smbconf中;
[global]
workgroup = LinuxSir
netbios name = LinuxSir05
server string = Linux Samba Server TestServer
security = share
[linuxsir]
path = /opt/linuxsir
writeable = yes
browseable = yes
guest ok = yes
注解:
[global]这段是全局配置,是必段写的。其中有如下的几行;
workgroup 就是Windows中显示的工作组;在这里我设置的是LinuxSir
netbios name 就是在Windows中显示出来的计算机名;
server string 就是Samba服务器说明,可以自己来定义;这个不是什么重要的;
security 这是验证和登录方式,这里我们用了share ;验证方式有好多种,这是其中一种;另外一种常用的是user的验证方式;如果用share呢,就是不用设置用户和密码了;
[linuxsir] 这个在Windows中显示出来是共享的目录;
path = 可以设置要共享的目录放在哪里;
writeable 是否可写,这里我设置为可写;
browseable 是否可以浏览,可以;
guest ok 匿名用户以guest身份是登录;
第二步:建立相应目录并授权;
[root@localhost ~]# mkdir -p /opt/linuxsir
[root@localhost ~]# id nobody
uid=99(nobody) gid=99(nobody) groups=99(nobody)
[root@localhost ~]# chown -R nobody:nobody /opt/linuxsir
注释:关于授权nobody,我们先用id命令查看了nobody用户的信息,发现他的用户组也是nobody,我们要以这个为准。有些系统nobody用户组并非是nobody ;
第三步:启动smbd和nmbd服务器;
[root@localhost ~]# smbd
[root@localhost ~]# nmbd
第四步:查看smbd进程,确认Samba 服务器是否运行起来了;
[root@localhost ~]# pgrep smbd
13564
13568
第五步:访问Samba 服务器的共享;
在Linux 中您可以用下面的命令来访问;
[root@localhost ~]# smbclient -L //LinuxSir05
Password: 注:直接按回车
在Windows中,您可以用下面的办法来访问;
//LinuxSir05/

在嵌入式系统开发应用平台中,tftp、nfs和samba服务器是最常用的文件传输工具,本文详细的介绍一下Linux Samba服务器安装配置,感兴趣的可以了解一下
在嵌入式系统开发应用平台中,tftp、nfs和samba服务器是最常用的文件传输工具,tftp和nfs是在嵌入式Linux开发环境中经常使用的传输工具,samba则是Linux和Windows之间的文件传输工具。
samba是模仿Windows网上邻居的SMB的通讯协议,将Linux *** 作系统“假装成”Windows *** 作系统,通过网上邻居的方式来进行文件传输的。
虚拟机版本:VMware10
Linux *** 作系统版本:Red Hat Enterprise Linux 5
Samba服务器介绍
Samba是在Linux系统上实现SMB(Session MessageBlock)协议的一个免费软件,以实现文件共享和打印机服务共享。
Samba服务器组件
samba有两个主要的进程smbd和nmbd。smbd进程提供了文件和打印服务,而nmbd则提供了NetBIOS名称服务和浏览支持,帮助SMB客户定位服务器,处理所有基于UDP的协议。
Samba服务器相关的配置文件
/etc/samba/smbconf
这是samba的主要配置文件,基本上仅有这个文件,而且这个配置文件本身的说明非常详细。主要的设置包括服务器全局设置,如工作组、NetBIOS名称和密码等级,以及共享目录的相关设置,如实际目录、共享资源名称和权限等两大部分。
/etc/samba/lmhosts
早期的 NetBIOS name 需额外设定,因此需要这个 lmhosts 的 NetBIOS name 对应的 IP 档。 事实上它有点像是 /etc/hosts 的功能!只不过这个 lmhosts 对应的主机名是 NetBIOS name 喔!不要跟 /etc/hosts 搞混了!目前 Samba 预设会去使用你的本机名称 (hostname) 作为你的 NetBIOS name,因此这个档案不设定也无所谓。
/etc/sysconfig/samba
提供启动 smbd, nmbd 时,你还想要加入的相关服务参数。
/etc/samba/smbusers
由于 Windows 与 Linux 在管理员与访客的账号名称不一致,例如: administrator (windows) 及 root(linux), 为了对应这两者之间的账号关系,可使用这个档案来设定
/var/lib/samba/private/{passdbtdb,secretstdb}
管理 Samba 的用户账号/密码时,会用到的数据库档案;
/usr/share/doc/samba-<版本>
这个目录包含了 SAMBA 的所有相关的技术手册喔!也就是说,当你安装好了 SAMBA 之后,你的系统里面就已经含有相当丰富而完整的 SAMBA 使用手册了!值得高兴吧! ^_^,所以,赶紧自行参考喔!
至于常用的脚本文件案方面,若分为服务器与客户端功能,则主要有底下这几个数据:
/usr/sbin/{smbd,nmbd}:服务器功能,就是最重要的权限管理 (smbd) 以及 NetBIOS name 查询 (nmbd) 两个重要的服务程序;
/usr/bin/{tdbdump,tdbtool}:服务器功能,在 Samba 30 以后的版本中,用户的账号与密码参数已经转为使用数据库了!Samba 使用的数据库名称为 TDB (Trivial DataBase)。 既然是使用数据库,当然要使用数据库的控制指令来处理啰。tdbdump 可以察看数据库的内容,tdbtool 则可以进入数据库 *** 作接口直接手动修改帐密参数。不过,你得要安装 tdb-tools 这个软件才行;
/usr/bin/smbstatus:服务器功能,可以列出目前 Samba 的联机状况, 包括每一条 Samba 联机的 PID, 分享的资源,使用的用户来源等等,让你轻松管理 Samba 啦;
/usr/bin/{smbpasswd,pdbedit}:服务器功能,在管理 Samba 的用户账号密码时, 早期是使用 smbpasswd 这个指令,不过因为后来使用 TDB 数据库了,因此建议使用新的 pdbedit 指令来管理用户数据;
/usr/bin/testparm:服务器功能,这个指令主要在检验配置文件 smbconf 的语法正确与否,当你编辑过 smbconf 时,请务必使用这个指令来检查一次,避免因为打字错误引起的困扰啊!
/sbin/mountcifs:客户端功能,在 Windows 上面我们可以设定『网络驱动器机』来连接到自己的主机上面。在 Linux 上面,我们则是透过 mount (mountcifs) 来将远程主机分享的档案与目录挂载到自己的 Linux 主机上面哪!
/usr/bin/smbclient:客户端功能,当你的 Linux主机想要藉由『网络上的芳邻』的功能来查看别台计算机所分享出来的目录与装置时,就可以使用 smbclient来查看啦!这个指令也可以使用在自己的 SAMBA 主机上面,用来查看是否设定成功哩!
/usr/bin/nmblookup:客户端功能,有点类似 nslookup 啦!重点在查出 NetBIOS name 就是了
/usr/bin/smbtree:客户端功能,这玩意就有点像 Windows 系统的网络上的芳邻显示的结果,可以显示类似『靠近我的计算机』之类的数据, 能够查到工作组与计算机名称的树状目录分布图!
安装Samba
首先确认一下自己的Linux是否安装了Samba,使用命令:
[root@localhost ~]# rpm -qa | grep samba

其中:samba、samba-common、samba-client三个程序是必须的。
如果没有安装,有两种方式可以安装:
第一种方式:yum安装
yum是一个集与查找,安装,更新和删除程序的Linux软件。它运行在RPM包兼容的Linux发行版本上,如:RedHat、Fedora、SUSE、CentOS、Mandriva。
yum install -y samba
第二种方式:安装包安装
安装包都在光盘里,首先需要挂载:
[root@localhost ~]# mount /dev/cdrom /mnt
这个时候,会出现一个问题:
mount: block device /dev/sr0 is write-protected, mounting read-only
提示信息说,虚拟机挂着光驱光驱时提示只读。用以下命令可解决该报错:
mount -o remount,rw /dev/cdrom /mnt
此时,我们会发现,原本空的文件夹/mnt现在多了很多的文件。

在/mnt/Server文件夹中,会能找到关于Samba的安装包:

找到安装包之后,就是安装Samba了(只需要安装自己没有的那个就行了)。使用命令:
rpm samba-3025b-0el54i386rpm
rpm samba-client-3025b-0el54i386rpm
rpm samba-commons-3025b-0el54i386rpm
安装完之后,再使用命令验证一下是否安装完成:
[root@localhost ~]# rpm -qa | grep samba
配置Samba
修改配置文件
samba服务器最主要的配置文件其实只有一个,就是/etc/samba/sambaconf,这个配置文件可以分为两个部分,一个部分是全局参数,一部分是共享资源相关参数。
#1全局部分参数设置:
[global]
#与主机名相关的设置
workgroup = zkhouse <==工作组名称
netbios name = zkserver <==主机名称,跟hostname不是一个概念,在同一个组中,netbios name必须唯一
serverstring = this is a test samba server <==说明性文字,内容无关紧要
#与登录文件有关的设置
log file = /var/log/samba/log%m <==日志文件的存储文件名,%m代表的是client端Internet主机名,就是hostname
max log size = 50 <==日志文件最大的大小为50Kb
#与密码相关的设置
security = share <==表示不需要密码,可设置的值为share、user和server
passdb backend = tdbsam
#打印机加载方式
load printer = no <==不加载打印机
-----------------------------------------------------------
#2共享资源设置方面:将旧的注释掉,加入新的
#先取消[homes]、[printers]的项目,添加[temp]项目如下
[temp] <==共享资源名称
comment = Temporary file space <==简单的解释,内容无关紧要
path = /tmp <==实际的共享目录
writable = yes <==设置为可写入
browseable = yes <==可以被所有用户浏览到资源名称,
guest ok = yes <==可以让用户随意登录
也就是说,将上面“#2共享资源设置方面”加入到配置文件的最后即可。
添加用户并设置密码
设置账号用于登录samba服务器,同时并设置密码。具体命令:
[root@localhost ~]# useradd sambauser
[root@localhost ~]# smbpasswd -a sambauser
New SMB password:
Retype new SMB password:
重启Samba服务器
[root@localhost ~]# /etc/initd/smb restart
如果这段命令无法运行,就是Samba没有正确安装的原因。

登录Samba
在Windows和Linux网络都畅通的情况下,在Windows下登录Samba服务器。使用命令查看Samba的IP地址:
[root@localhost ~]# ifconfig

在Windows的运行,输入\\2233119170(Samba对应的IP地址):

这个时候会d出登录界面,直接输入之前设置的登录账号和密码就行了。

问题汇总及补充
之前Samba的安装和配置都是一步一步来的,没有什么问题。但是很多情况下,就是最后在Windows的运行中,输入了\\IP地址之后,没有任何反应。这是最麻烦的地方,因为完全不知道是什么原因导致的。下面提供几个可能出问题的地方:
网络选择
在配置Samba服务器的时候,网络选择为bridge桥连接。

这是因为:要保证Linux下的IP和Windows下的IP处于同一网段中,并且保证相互可以ping通。
怎么验证?
在Windows的命令行中,输入命令ipconfig:

同时在Linux中输入命令ifconfig(两个命令不一样,需要注意):

可以看到:两个IP地址2233119239和2233119170之间前3个都是一样的,只有最后一个不同,这就保证了在同一网段。如果前3位不同,可在Linux中使用命令:
[root@localhost ~]# ifconfig eth0 2233119130
只需要保证只有最后一个不同即可。
接下来验证Windows和Linux之间的ping通,在Windows命令行中输入ping Linux的IP地址:

结果如果不是timeout,就代表两者之间ping通。
防火墙问题
如果防火墙不关闭,Windows和Samba之间的连通可能会被阻挡。
Windows上关闭防火墙:控制面板->系统和安全->Windows防火墙->打开或关闭Windows防火墙;
Linux上关闭防火墙:
[root@localhost ~]# setenforce 0
[root@localhost ~]# service iptables stop

记得要重启Samba服务器。
权限问题
可能会出现权限不够的问题,修改你想要的那个文件的权限。
[root@localhost ~]# chmod 777 /home
无法访问
如果用windows访问samba,跳出以下对话框的错误:
无法访问。您可能没有权限使用网络资源。请与这台服务器的管理员联系以查明您是否有访问权限。
不允许一个用户使用一个以上用户名与一个服务器或共享资源的多重连接。中断与此服务器或共享资源的所有连接,然后再试一次……或者直接重启Windows。
怎么断开连接(即退出Samba服务器)呢?
在Windows的命令行中输入:
net use /delete /y
自动连接
使每次打开Linux自动运行smba服务器:
在终端中输入setup->system service->找到smb,按下空格,便可选中->退出完成(注意切换用tab键)。

smbconf 添加
pam password change = no
passwd chat = NEWUNIXpassword %n\n RetypenewUNIXpassword %n\n successfully
passwd program = LANG=en_US /usr/bin/passwd %u
unix password sync = yes
/configure --enable-cgidir=/var/>linux端的配置:
1 关闭防火墙,或开启防火墙中samba服务需要的端口(打开配置界面会看到的)
2 从新启动smb和nmb服务(root用户下 *** 作):
/etc/initd/smb stop
/etc/initd/smb start
/etc/initd/nmb stop
/etc/initd/nmb start
看服务是否启动:
pgrep smbd
pgrep nmbd
打开samba配置界面,首选项-》服务器设置-》基本,工作组写MSHOME,描述请便,
安全性为“共享”,加密密码“是”,来宾账号设为你现在正在用的登录用户,
首选项-》Samba用户添加用户: 设为你现在正在用的登录用户,windows用户名和samba密码任意。
文件-》添加共享-》基本:选个文件夹即可。
-》访问:允许所有用户访问。
看windows电脑可用
mount -t smbfs //19216811/test /mnt/net -o username=XXXXX

mount -t cifs -o username=xxx,password=xxx //hostname/dir /mnt/dir

smbclient 相关 *** 作

位置-》网络-》windows网络-》MSHOME查看

到此结束!
Windows XP 端:
1 启用来宾账户
2 开启netbios服务等(一般情况下是开的,不用管)
3 瑞星(或其他)防火墙的安全级别设为中级,关闭系统自带的防火墙等,如果不行干脆先关掉试试
4 网上邻居-》配置家庭或办公小型网络(启用打印机和共享文件服务),工作组MSHOME
5 查看工作组中的计算机或搜索IP等,看看正常否。
附录: smbclient用法
1,列出某个IP地址所提供的共享文件夹
smbclient -L 19816801 -U username%password

2,像FTP客户端一样使用smbclient
smbclient //19216801/tmp -U username%password

执行smbclient命令成功后,进入smbclient环境,出现提示符: smb:\>
这里有许多命令和ftp命令相似,如cd
、lcd、get、megt、put、mput等。通过这些命令,我们可以访问远程主机的共享资源。

3,直接一次性使用smbclient命令
smbclient -c "ls" //19216801/tmp -U username%password

smbclient //19216801/tmp -U username%password
smb:\>ls
功能一样的

例,创建一个共享文件夹
smbclient -c "mkdir share1" //19216801/tmp -U username%password
如果用户共享//19216801/tmp的方式是只读的,会提示
NT_STATUS_ACCESS_DENIED making remote directory \share1


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10641072.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存