给Windows客户提供文件服务是通过samba实现的,而samba也是一套基于UNIX类系统、实现SMB/CIFS协议的软件,作为UNIX的克隆,Linux也可以运行这套软件。samba的文件服务功能效率很高,借助Linux本身,可以实现用户磁盘空间限制功能。本文基于Linux介绍Samba的配置和使用。
主要内容:
一、关于配置文件
二、关于配置和使用
三、其它
samba通过配置文件来进行各种控制,关于配置文件,下面给出一个大致的介绍。
samba的最重要配置文件就是"/etc/samba/smb.conf",它有三个重要的节:[global],[homes],[public]。一般来说本地的这个文件中都有对其内容的详细注释,这里列出一个完整的配置文件内容,并解释如下。具体信息参见"man smb.conf"的输出。
用于用户映射的文件/etc/samba/smbuser内容大致如下:
乱码情况:
为了防止共享时出现中文目录乱码的情况,可能需要为smb.conf的[global]段添加如下几行:
这里,其中根据你的local,UTF-8 有可能需要改成 cp936。
这里介绍如何配置samba服务以及使用它,为便于查阅,先给出一个最简的配置方式,后面会给出关于配置和使用相对具体的内容。 以下内容,都是在CentOS release 5.5 (Final)上面实践的结果,并假定配置samba的机器ip地址是10.1.2.213。
这里,如果只是想要搭建一个可以工作的samba服务器,那么可以按照如下步骤配置:
这样,我们可以看到机器上面已经安装了samba,可以进行后面的配置了。如果你的机器上面没有相应的软件包,那么需要使用"yum install samba.i386"之类的命令安装,默认来说系统都将这个服务安装了的。
编辑之后的文件内容如下:
这里需要注意,不要将mysamba目录设置到 /home 下的某个子用户目录中,这样会导致目录无法通过其他的机器访问到。
这样,外部就可以访问这个目录了。注意首先在本地机器上将这个目录的读写权限打开,这样外面才能访问。
这样刚才的配置可以生效。
在文件浏览器的位置栏输入: smb://10.1.2.213
这样,将看到一个目录"public1"就是那个smb.conf中设置的"[public1]"组名,进入"public1"就可以看到内容了,内容实际就是服务器上面的/home/mysamba路径下面的内容。
在文件浏览器的位置栏输入: \\10.1.2.213
这样,将看到一个目录"public1"就是那个smb.conf中设置的"[public1]"组名,进入"public1"就可以看到内容了,内容实际就是服务器上面的/home/mysamba路径下面的内容。
总之两步,一个是修改"/etc/samba/smb.conf"设置共享目录,一个是运行"/etc/init.d/smb restart"让设置生效。
配置samba可以控制哪些目录可以访问,以及谁可以访问,以什么权限访问等等。我们可以使用图形化的工具配置,方法是运行"#system-config-samba"命令或者通过菜单"系统-系统管理-Samba",方法很简单就不多说了。还可以通过修改配置文件进行配置,这里重点介绍修改配置文件的方法,如下。
修改配置文件如下:
这里,workgroup表示工作组名server string表示服务器名(名称自定)netbios name是对服务器的描述hosts allow填入顺序访问的ip段,用空格分开,如果不设置则使用[global]中的,如果[global]中也没有,就表示允许任何ip访问security表示访问权限,访问权限由低到高有三种:share、user和server。其中share安全级别最低,user模式要求连接时输入用户名和口令。具体支持的字段,以及每个字段的含义在配置文件的注释中都有详细的说明,或者可以查看"man smb.conf"文档说明。
以上配置可知,设置了个共享目录:public1,public2,public3,且public3共享目录只有quietheart和lv-k用户可以访问。
配置之后,重新启动samba:
这样刚才的配置可以生效。
这里,添加帐号和修改密码都用这个smbpasswd命令。如果想要添加samba的网络访问帐户,首先必须保证系统中有相应的帐户名称,如果没有则需要使用"#useradd quietheart"建立一个,否则使用这个smbpasswd添加用户的时候,会出错误。 要注意,虽然samba的用户必须是本地机器的用户,但是samba的登录密码可以和本机登录密码可以不一样,上面只是为系统增加了quietheart这个用户,却没有给用户赋予本机登录密码,因为我们只用这个用户来远程samba访问,不想用它来做为一个本地登陆帐号,所以这个用户将只能从远程经过samba访问,不能从远程登录本机。
这个功能没太大必要,因为samba中的帐户,一定就是系统中的某个帐户,虽然密码不一样,所以可以查看/etc/passwd来得知所有系统帐号进而知道samba可能包含的用户帐号。
这里,删除命令就是将前面添加命令的-a改成-x了。
通过smbclient工具,可以实现在命令行下访问samba的目的,使用smbclient登陆samba之后,可以像ftp服务那样进行各种命令 *** 作。
参考资料:
在嵌入式系统开发应用平台中,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/smb.conf
这是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/{passdb.tdb,secrets.tdb}
管理 Samba 的用户账号/密码时,会用到的数据库档案;
/usr/share/doc/samba-<版本>
这个目录包含了 SAMBA 的所有相关的技术手册喔!也就是说,当你安装好了 SAMBA 之后,你的系统里面就已经含有相当丰富而完整的 SAMBA 使用手册了!值得高兴吧! ^_^,所以,赶紧自行参考喔!
至于常用的脚本文件案方面,若分为服务器与客户端功能,则主要有底下这几个数据:
/usr/sbin/{smbd,nmbd}:服务器功能,就是最重要的权限管理 (smbd) 以及 NetBIOS name 查询 (nmbd) 两个重要的服务程序;
/usr/bin/{tdbdump,tdbtool}:服务器功能,在 Samba 3.0 以后的版本中,用户的账号与密码参数已经转为使用数据库了!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:服务器功能,这个指令主要在检验配置文件 smb.conf 的语法正确与否,当你编辑过 smb.conf 时,请务必使用这个指令来检查一次,避免因为打字错误引起的困扰啊!
/sbin/mount.cifs:客户端功能,在 Windows 上面我们可以设定『网络驱动器机』来连接到自己的主机上面。在 Linux 上面,我们则是透过 mount (mount.cifs) 来将远程主机分享的档案与目录挂载到自己的 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-3.0.25b-0.el5.4.i386.rpm
rpm samba-client-3.0.25b-0.el5.4.i386.rpm
rpm samba-commons-3.0.25b-0.el5.4.i386.rpm
安装完之后,再使用命令验证一下是否安装完成:
[root@localhost ~]# rpm -qa | grep samba
配置Samba
修改配置文件
samba服务器最主要的配置文件其实只有一个,就是/etc/samba/samba.conf,这个配置文件可以分为两个部分,一个部分是全局参数,一部分是共享资源相关参数。
#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/init.d/smb restart
如果这段命令无法运行,就是Samba没有正确安装的原因。
登录Samba
在Windows和Linux网络都畅通的情况下,在Windows下登录Samba服务器。使用命令查看Samba的IP地址:
[root@localhost ~]# ifconfig
在Windows的运行,输入\\223.3.119.170(Samba对应的IP地址):
这个时候会d出登录界面,直接输入之前设置的登录账号和密码就行了。
问题汇总及补充
之前Samba的安装和配置都是一步一步来的,没有什么问题。但是很多情况下,就是最后在Windows的运行中,输入了\\IP地址之后,没有任何反应。这是最麻烦的地方,因为完全不知道是什么原因导致的。下面提供几个可能出问题的地方:
网络选择
在配置Samba服务器的时候,网络选择为bridge桥连接。
这是因为:要保证Linux下的IP和Windows下的IP处于同一网段中,并且保证相互可以ping通。
怎么验证?
在Windows的命令行中,输入命令ipconfig:
同时在Linux中输入命令ifconfig(两个命令不一样,需要注意):
可以看到:两个IP地址223.3.119.239和223.3.119.170之间前3个都是一样的,只有最后一个不同,这就保证了在同一网段。如果前3位不同,可在Linux中使用命令:
[root@localhost ~]# ifconfig eth0 223.3.119.130
只需要保证只有最后一个不同即可。
接下来验证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键)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)