本文一步一步介绍了FreeBSD8.1下的samba的基础配置。SMB协议可以看作是局域网上的共享文件/打印机的一种协议,它可以为网络内部的其它Windows和Linux机器提供文件系统、打印服务或是其他一些信息。而Samba是用来实现SMB的一种软件,由澳大利亚的Andew Tridgell开发,是一种在Linux(Unix)环境下运行的免费软件。通过使用Samba,Linux系统可以实现多种功能。有关Samba服务器更基础的知识,可以参考之前一篇文章:Samba服务器简介与快速配置指南。
作者简介:余洪春(博客),网名抚琴煮酒,英文名Andrew.Yu,武汉某外企高级Linux/Unix系统管理员、项目实施工程师,红帽RHCE讲师,擅长负载均衡高可用和中小型证券类和商务网站架构,目前关注网站架构研究及网络安全。

一、Samba基础

1、 简介

1)SMB协议

SMB(Server MessageBlock,服务信息块)协议可以看作是局域网上的共享文件/打印机的一种协议,它可以为网络内部的其它Windows和Linux机器提供文件系统、打印服务或是其他一些信息。SMB的工作原理是让NetBIOS(Win95网络邻居通信协议)与SMB这两种协议运行在TCP/IP的通信协议上,且使用NetBIOS nameserver让用户的Linux机器可以在Windows的网络邻居里被看到,所以就可以和Win95/NT主机在网络上相互沟通,共享文件与服务了。

2)什么是Samba

Samba是用来实现SMB的一种软件,由澳大利亚的Andew Tridgell开发,是一种在Linux(Unix)环境下运行的免费软件。

通过使用Samba,Linux系统可以实现如下功能:

● 文件服务和打印服务(在Linux和Win95/NT之间系统之间提供打印机和磁盘的共享)

● 登陆服务器,使用Windows客户能注册到网络上

● 作为主要域控制器和域中成员的功能

● WINS服务器以及浏览功能

● 支持SSL(Secure Socket Layer)

● 支持SWAT (Samba Web Administration Tool )

Samba除了支持Linux(Unix)和Win95/NT之外,还支持DOS、IBM OS/2、Macintosh 等操作系统。

2、Samba的记录文件

Samba为smbd、nmbd和访问Samba的客户提供了下列记录文件,分别记录有关smbd、nmbd运行信息和每个客户的访问信息:

记录smbd 信息

/var/log/samba/log.smb记录nmbd信息

/var/log/samba/log.nmb记录客户访问信息

/var/log/samba/log.%m3、在FreeBSD8.1下配置samba34

#cd /usr/ports/net/samba34
#make install clean进行默认配置,不进行任何改动

#cp /usr/local/share/examples/samba34/smb.conf.default /usr/local/etc/smb.conf
#vi /usr/local/etc/smb.conf加入如下东西

[dev]
path = /usr/local/dev
public = yes
only guest = yes
writable = yes
printable = no添加smbpasswd用户

#/usr/local/bin/smbpasswd -a username添加用户名,更具提示信息来进行操作
#vi /etc/rc.conf加入

nmbd_enable=”YES”
smbd_enable=”YES”手动启动就是

#/usr/local/etc/rc.d/samba start二、FreeBSD8.1下Samba配置及使用

1、定制文件/etc/smb.conf

在安装完Samba后,还需要定制它的配置文件smb.conf,才能使Samba正常工作以符合要求。由于SMB是一个非常复杂的协议,所以配置Samba的工作也是比较繁琐的,大约有超过170条配置项出现在smb.conf文件中。

1)smb.conf的语法

smb.conf文件有一个清晰的语法结构,与Windows的*.ini文件十分类似。如下所示:

该文件被分成几部分,每一部分都包括几个参数,用来定义Samba输出的共享及其详细操作。

文件被分隔成若干节,每一节都由一个被方括号括起来的标识开始(例如,[global]、[home]、[printers]),每一个配置参数或是一个全局参数(影响或控制整个服务器),或是一个服务参数(影响或控制服务器提供的某项服务)。

global部分定义的参数用来控制Samba的总特性。除global部分外,每一部分都定义了一个专门的服务。

你可以使用下面的语句来指定一个参数:

name=VALUEname可以是一个单词或者用空格隔开的多个单词。VALUE可以是布尔值(ture或false;yes或no;1或0)、数字或字符串。

注释以分号开头,可以单独一行,也可以跟在一条语句之后。

通过在一行的最后一个字符后加反斜杠"\"可以将一行分成多行。

每一部分的名字和参数都不区分大小写,例如,参数browseable=yes与browseable=YES是完全等价的

2)smb.conf文件的功能

smbd和nmbd这两个守护进程启动时(通常为系统引导时)读配置文件smb.conf,这一配置文件向这两个守护进程说明输出什么共享、共享输出给谁以及如何进行输出等等。因为安全问题是最重要的,所以你必须指定哪些计算机可以访问这一共享,smb.conf文件可以很灵活的明确指定每一服务有哪些用户可以访问。随着Linux网络的增大,这一控制越来越重要。

3)smb.conf文件结构

smb.conf文件主要包括三部分:

● global(全局)参数

● directory shares (目录共享)部分--包括标准的[home]部分

● printer shares(打印共享)部分

其中,global参数用来设置整个系统的规则;[home]部分和[printer]部分是服务的特定例程,services(服务)这一术语是网络客户机共享或输出的目录和打印机的Samba术语。这些服务定义了哪些用户可以访问这些目录和打印机以及如何访问这些目录和打印机。

下面的清单给出了smb.conf文件的一个简单的例子。

[global]
workgroup = MYGROUP
server string = Samba Server
security = user
printing = lprng
log file = /var/log/samba
lock directory = /var/lock/samba
[homes]
comment = Home Directory
browseable = no
read only = no
[printers]
browseable = no
guest ok = yes
printable = yes在 [global] 段中设置了主机名称, 主机所在的工作组名称和浏览时可看到的对本机的描述。安全参数告诉 Samba使用"用户级别"的安全保护方式。 SMB 有两种安全模式: 共享级别, 将资源加密码控制;用户级别, 可以使用某一用户的所有资源。

这里不能详细解释两种方式的微妙差别, 但大部分情况下, 你会想用用户级别安全控制。

[global] 段中还定义了日志文件目录和锁定文件的位置。日志文件在解决故障和完善系统时是很有用的,锁定文件可以阻止多个用户同时修改相同的文件。

[homes] 段中的设置控制了每一个用主目录的共享权限。comment 参数指定的字符串在你浏览本机资源时出现在指定资源的旁边。

browseable 参数控制一项服务是否能够出现在网络资源浏览表中。这里是一些非直觉的东西, browseable = no意味着这个目录将在浏览时显示为要验证的用户名称。 举例来说, 指定 browseable = no, 当我浏览这个 Samba 服务器时,我将看到一个名称为 cuckoo 的共享目录。当指定 browseable = yes 时, 我将看到一个名为 homes 和 cuckoo的共享目录。设置 read only = no 将允许通过验证的用户对主目录有写入的权限。 但是, 如果他们的主目录的 UNIX 权限 不允许写入,那么他们就没有写的权限。 无论 UNIX 的权限怎样, 设置 read only = yes 后, 他们的主目录是只读的。

printing 命令描述了本地打印系统类型, 这可以让 Samba 知道怎样提交打印任务, 显示打印队列, 删除打印任务和其它操作。

如果打印系统是 Samba 所不知道的, 你必须在每次执行打印操作时指明命令。

清单中[printing]一段配置允许任何能够登录到 Samba 服务器的用户使用 printcap 中出现的 每一台打印机。 正常情况下,如果使用用户级别安全控制, guest ok = yes 并不能授权每一个用户(使用系统)。 每一个打印服务必须定义为 printable =yes。

三、在window xp下共享samba比较实用的办法

FreeBSD8.1安装完samba34后,如果将实际用户添加进samba用户库中,则FreeBSD机器本身的用户就是samba用户,他可以默认对自己的/home/用户目录进行读写,我们可以用磁盘映射的办法来做;这样windows机器默认启动后,就有一个远程的磁盘可以读写,这样方例自己工作,截图如下:

 

 

 
 

 

 

四、windows下更换用户访问Samba服务器

在Windodows客户机访问Samba服务器时,常出现的一种现象是:在建立了访问Samba服务器的连接之后,再次访问该服务器时,不再出现身份认 证对话框,这样便无法更换用户身份,很多同学喜欢用注销来解决这个问题,这样很麻烦而且也浪费时间;其实造成这一现象的原因是Windows本身的机制问 题更确切地说这是SMB服务的问题,由于NETBIOS服务是面向连接的,当客户与Samba服务器建立连接后,此连接在一段时间内始终是活跃的,所以当 用户再次访问该服务器时,便采用了前面的身份而无需再次验证身份解法方法:net use \\samba文件服务器IP地址\IPC$ /delete,在成功删除共享连接后即可更换用户身份访问Samba服务器。

五、关于samba服务使用的端口

实验过程中,发现samba服务虽然监听了四个端口,但仅仅使用445端口用来传输数据,为了验证此说明,特地开了防火墙及抓包工具来验证,及INPUT和OUTPUT默认为DROP,然后加上

iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 445 -j ACCEPTsamba服务就能与客户端正常通讯及提供数据了,特地用抓包工具wireshark抓了下包,证实了此说法。很多教材上面说还要采用137、138、139等端口,这种说法也是成立的,这是由于将samba作了WINS服务 器的原因,即UDP138、UDP139是进行NETBIOS解析的;如果不进行NETBIOS解析的话,445端口够用了。签于目前RHEL5教材只用 445端口,大家在建samba服务器时也可采取这种做法。

六、通过主机名称和IP地址列表控制Samba访问

vi /etc/samba/smb.conf ,在[global]中添加:

hosts allow=192.168.1.0/24 127.0.0.1即指示服务器只接受网络192.168.1.0中的主机和本地主机接受主机访问,也可以使用主机名代替IP地址,如果无此项的话,即默认允许所有主机访问,加入此项后,就默认禁止192.168.1.0和本机以外的主机访问samba服务器

hosts allow=mail.test.com当然,如果禁止的只是少数机子,可以用下列语法来实现

hosts allow=test.com EXCEPT mail.test.com在实际工作中,推荐写在点分十进制方便记忆:即hosts allow =192.168.1.0/255.255.255.0;如果在现实中,要同时实现用户服务和主机的访问控制,可采用PAM(可插入认证模块),即 samba+PAM,它实现的功能是允许特定用户通过特定主机访问samba服务器。

 

文章转载自网管之家:http://www.bitscn.com/os/linux/201101/192697.html

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐