Centos6.4 samba服务器搭建
像NFS,samba服务都是大家所熟知的文件共享服务,nfs也可以实现linux与windows之间的文件共享,但是显然samba做这件事更合适。我们samba服务器主要用于办公的文件共享,这里也记录一下。
一、samba服务的介绍
在NetBIOS出现之后,Microsoft就使用NetBIOS实现了一个网络文件/打印服务系统,这个系统基于NetBIOS设定了一套文件共享协议,Microsoft称之为SMB(Server Message Block)协议。这个协议被Microsoft用于它们Lan Manager和Windows NT服务器系统中,而Windows系统均包括这个协议的客户软件,因而这个协议在局域网系统中影响很大。
随着Internet的流行,Microsoft希望将这个协议扩展到Internet上去,成为Inter net上计算机之间相互共享数据的一种标准。因此它将原有的几乎没有多少技术文档的SMB协议进行整理,重新命名为 CIFS(Common Internet File System),并打算将它与NetBIOS相脱离,试图使它成为Internet上的一个标准协议。因此,为了让Windows和Unix计算机相集成,最好的办法即是在Unix中安装支持SMB/CIFS协议的软件,这样Windows客户就不需要更改设置,就能如同使用Windows NT服务器一样,使用Unix计算机上的资源了。
与其他标准的TCP/IP协议不同,SMB协议是一种复杂的协议,因为随着Windows计算机的开发,越来越多的功能被加入到协议中去了,很难区分哪些概念和功能应该属于Windows操作系统本身,哪些概念应该属于SMB 协议。其他网络协议由于是先有协议,实现相关的软件,因此结构上就清晰简洁一些,而SMB协议一直是与Microsoft 的操作系统混在一起进行开发的,因此协议中就包含了大量的Windows系统中的概念。
samba服务器既可以用于windows与linux之间的资源共享,也可以用于linux与linux之间的资源共享。samba是一个工具套件,由服务器及客户端程序构成。
samba运行两个服务,一个是smb,一个是nmb;smb是samba的核心启动服务,主要负责建立linux samba服务器与samba客户机之间的通信,验证用户身份并提供对文件和打印系统的访问,只有smb服务启动,才能实现文件的共享,监听139/TCP/UDP和445/TCP/UDP端口。nmb服务负责解析,类似于DNS功能, nmb可以把linux系统共享的工作组名称与其IP对应起来,如果nmb服务没有启动,就只能通过IP来访问共享文件,监听137/ucp和138/udp端口。
博文来自:www.51niux.com
二、安装samba服务
# yum install samba samba-client samba-swat #直接yum安装便可以
# rpm -qa|grep samba #安装包说明
samba-winbind-clients-3.6.23-36.el6_8.x86_64 #这个包只含有客户端工具(wbinfo,ntlm_auth)
samba-winbind-3.6.23-36.el6_8.x86_64 #winbind是samba作为windows域成员(AD)的一个中介,包里包含了做映射的服务库(NSS library)和客户端工具
samba-3.6.23-36.el6_8.x86_64 #服务器软件,主要提供samba服务器的守护程序,共享文档,日志的轮替,开机默认选项
samba-client-3.6.23-36.el6_8.x86_64 #客户端软件,主要提供linux主机作为客户端时,所需要的工具指令集。
samba-common-3.6.23-36.el6_8.x86_64 #主要提供samba服务器的设置文件与设置文件语法检验程序testparm
samba-swat-3.6.23-36.el6_8.x86_64 #基于https协议的samba服务器web配置界面
#/etc/init.d/smb start #启动smb服务
# /etc/init.d/nmb start #启动nmb服务(这个服务启动后,我们windows就可以通过网络发现直接发现这台机器,不启动的话就发现不到,看需求,我们一般都不启动,直接通过IP访问的形式来访问)
# netstat -lntup|egrep 'smb|nmb' #查看服务都已经启动(如果没必要的话,就关闭防火墙和selinux)
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 2314/smbd
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 2314/smbd
tcp 0 0 :::445 :::* LISTEN 2314/smbd
tcp 0 0 :::139 :::* LISTEN 2314/smbd
udp 0 0 192.168.1.255:137 0.0.0.0:* 2327/nmbd
udp 0 0 192.168.1.111:137 0.0.0.0:* 2327/nmbd
udp 0 0 0.0.0.0:137 0.0.0.0:* 2327/nmbd
udp 0 0 192.168.1.255:138 0.0.0.0:* 2327/nmbd
udp 0 0 192.168.1.111:138 0.0.0.0:* 2327/nmbd
udp 0 0 0.0.0.0:138 0.0.0.0:* 2327/nmbd
博文来自:www.51niux.com
三、samba配置文件详解
samba的配置文件为/etc/samba/smb.conf,文件分为两大部分,第一部分为全局配置,第二部分是局部配置。
# vi /etc/samba/smb.conf #配置文件中的#开头的是纯注释部分,;开头的是可以去掉注释的选项
[global]
workgroup = MYGROUP #samba的工作组
server string = Samba Server Version %v #samba的说明信息
netbios name = MYSERVER #默认是;注释状态,是你被网络发现时候显示的主机名称。如我们改成:netbios name = nidaye
; interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24 #后面可以跟接口或IP地址,如果服务器不想用默认的IP地址时或想用多个IP地址时设置此项。
; hosts allow = 127. 192.168.12. 192.168.13. #默认注释,表示允许所有主机访问。开启后可以设置IP或者IP段,多个参数空格隔开,IP端上面已经举例了,192.168.12.就代表的192.168.12这个段。
log file = /var/log/samba/log.%m #samba日志文件存放的位置,以及名称,这里是以客户端主机名为log日志的后缀
max log size = 50 #指定日志文件的大小为50KB,0代表无限制
# ----------------------- Standalone Server Options ------------------------
security = user #samba共享安全级别为用户级别,主要用的也是这个级别。
设置Samba共享安全级别:
share: 共享级别,服务器不对客户机进行身份验证。
user: 用户级别,服务器对客户机进行身份验证。
server: 服务器级别,Samba服务器必须通过另一台服务器对客户机进行身份验证。如果设置为此值,需另加一行:password Server = IP才行。
domain: 域级别,Samba服务器要通过windows server的域控制器对客户机进行身份验证,同样,如果设置为此值,需另加一行:password Server = IP才行。
passdb backend = tdbsam #指定samba服务器用户后台为tdbsam,默认便可。
三种方式:
1.smbpasswd:该方式是使用smb自己的工具smbpasswd来给系统用户(真实用户或者虚拟用户)设置一个Samba密码,客户端就用这个密码来访问Samba的资源。smbpasswd文件默认在/etc/samba目录下,不过有时候要手工建立该文件。
2.tdbsam:该方式则是使用一个数据库文件来建立用户数据库。数据库文件叫passdb.tdb,默认在/etc/samba目录下。passdb.tdb用户数据库可以使用smbpasswd –a来建立Samba用户,不过要建立的Samba用户必须先是系统用户。我们也可以使用pdbedit命令来建立Samba账户。
3.ldapsam:该方式则是基于LDAP的账户管理方式来验证用户。首先要建立LDAP服务,然后设置"passdb backend = ldapsam:ldap://LDAP Server"
# ----------------------- Domain Members Options ------------------------ #这下面的参数是关于域的,这里不说明
# ----------------------- Domain Controller Options ------------------------#这下面的参数是关于域的,这里选择默认
# ----------------------- Browser Control Options ----------------------------#浏览器控制选项一般也不设置
; local master = no #如果不想使您的Samba服务器成为局域网内部的主浏览服务器,将此选项设为no
; os level = 33 # OS Level决定了该服务器在局域网内的访问优先权。设定 samba server的os level. os level从 0 到 255 . winNT的os level为33, win95/98的os level 是 1 .若要拿samba server 当LMB或DMB则它的os level至少要大于NT的33以上。
; preferred master = yes #Preferred Master使Samba在启动时选择一个本地浏览器并给它获得选择的较高的机会。设定 samba server 是否要担当PDC角色(PDC会负责追踪网络帐户进行的一切变更),通常无特殊原因设为no,(同一网段内不可有两个PDC,他们会每5分钟抢主控权一次)
#----------------------------- Name Resolution ------------------------------- #选择默认不更改
; wins support = yes #是否支持WINS服务器,Samba可以成为WINS服务器,也可以成为WINS客户端,但不能两者兼得。
; wins server = w.x.y.z #设定samba server 是否要使用别台主机提供的WINS服务,通常无特殊原因设为no。除非所处网络上有一台主机提供WINS服务才要设yes,其他 wins support 和 wins server例:wins server = 192.168.0.1 表示samba server要使用192.168.0.1提供的WINS服务
; wins proxy = yes #表示一个非WINS用户通知Samba响应名称解析,本身不为客户端提供查询。
; dns proxy = yes #表示一个非WINS用户通知Samba响应名称解析,本身不为客户端提供查询。
# --------------------------- Printing Options ----------------------------- #打印选项,这里选择不修改
load printers = yes #允许打印机共享,并加载打印机。
cups options = raw #打印机的使用方式
; printcap name = /etc/printcap #打印机配置文件位置
; printcap name = lpstat
; printing = cups #设置打印系统类型,一般默认。只有在打印系统不是标准系统时才指定。
# --------------------------- Filesystem Options --------------------------- #下面的参数不修改
#============================ Share Definitions ==============================
[homes] #局部配置,【】里面是段名,也就是我们的共享名
comment = Home Directories #共享的说明
browseable = no #不可以网页浏览
writable = yes #共享文件夹可写
; valid users = %S #允许访问该共享的用户,多用户用逗号分开,指定组时要在组名前加@。
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no #不许用guest用户访问
writable = no #文件夹不可写只能读
printable = yes #可以打印
还记得前面%m代表客户端的主机名吗?这是samba定义的宏,宏用百分号后面跟一个字符表示,在具体运作的时候就用实际的参数来代替。下面是samba的宏,灵活地应用宏可以很方便地管理比较复杂的网络。
%S 当前服务器名。
%P 当前服务器的根目录。
%u 当前服务器的用户名。
%g 当前用户所在的主工作组。
%U 当前对话的用户名。
%G 当前对话的用户我主工作组。
%H 当前服务器用户的home目录。
%v Samba服务器的版本号。
%h 运行Samba服务器的主机名。
%m 客户机的NetBios名。
%L 服务器的NetBios名。
%M 客户机的主机名。
%N NIS服务器名。
%p NIS服务器的Home目录。
%R 所采用的服务器等级。
%d 当前服务进程的ID。
%a 客户机和结构。
%I 客户机的IP。
%T 当前日期和时间。
博文来自:www.51niux.com
四、samba服务器配置实例
配置文件我们把最下面关于【home】共享的设置用;分号注释掉,共享/home下面的用户不是我们的目的也不安全。
# vi /etc/samba/smb.conf #在配置文件下面加入下面这段
[smb_test1]
comment = samba test1
path = /samba/test1
browseable = yes
printable yes
hide dot ftles = yes
public = no
guest ok = no
read only = yes
;writable = yes
vaild users = test,hadoop
invalid users = zabbix,@zabbix
write list = hadoop
create mask = 0600
directory mask = 0700
下面为配置文件的解释信息:
comment---------注释说明
path------------分享资源的完整路径名称,除了路径要正确外,目录的权限也要设对
browseable------是yes/否no在浏览资源中显示共享目录,若为否则必须指定共享路径才能存取
printable-------是yes/否no允许打印
hide dot ftles--是yes/否no隐藏隐藏文件
public----------是yes/否no公开共享,若为否则进行身份验证(只有当security = share 时此项才起作用)
guest ok--------是yes/否no公开共享,若为否则进行身份验证(只有当security = share 时此项才起作用)
read only-------是yes/否no以只读方式共享当与writable发生冲突时也writable为准
writable--------是yes/否no不以只读方式共享当与read only发生冲突时,无视read only
vaild users-----设定只有此名单内的用户才能访问共享资源(拒绝优先)(用户名/@组名)
invalid users---设定只有此名单内的用户不能访问共享资源(拒绝优先)(用户名/@组名)
read list-------设定此名单内的成员为只读(用户名/@组名)
write list------若设定为只读时,则只有此设定的名单内的成员才可作写入动作(用户名/@组名)
create mask-----建立文件时所给的权限
directory mask--建立目录时所给的权限
force group-----指定存取资源时须以此设定的群组使用者进入才能存取(用户名/@组名)
force user------指定存取资源时须以此设定的使用者进入才能存取(用户名/@组名)
allow hosts-----设定只有此网段/IP的用户才能访问共享资源
allwo hosts = 网段 except IP
deny hosts------设定只有此网段/IP的用户不能访问共享资源
allow hosts=本网段指定IP指定IP
deny hosts=指定IP本网段指定IP
另外:还有三个字符集的配置,我没有用上,在别的博客里面看到有写,就在这里粘贴一下,记录一下。
dos charset = GB2312 ←将Windows 客户端的文字编码设置为简体中文 GB2312
unix charset =GB2312 ←指定Samba所在的CentOS服务端新建文件或目录时的编码为 GB2312
display charset= GB2312 ←指定使用SWAT(一种通过浏览器控制Samba的工具)时页面的默认文字编码
好了现在我们的环境有test,test2,test3,test4,hadoop,zabbix这六个用户,test2,test3,zabbix都属于zabbix组。
然后用smbpasswd -a 用户名,将这五个用户都加到samba中,samba的用户定义就是系统中必须存在此用户。
我拿test举例演示一下:
# smbpasswd -a test
New SMB password:
Retype new SMB password:
好了那么让我们现在测试一下,windows尽力就不贴图了:
# service smb reload #重新加载smb配置文件,如果重启没关系的话就restart
# service nmb restart
windows的测试:
第一种:可以直接网络邻居发现,因为我们没有把网络邻居发现去掉。
第二种:打开我的电脑在最上方输入:\\IP地址,然后出现我们共享的目录,输入用户名密码登录
第三种:我的电脑=》映射网络驱动器=》选择驱动器盘符号然后文件夹位置输入我们的smb连接\\192.168.1.111/smb_test1=》完成
Linux下的测试:
# mount //192.168.1.111/smb_test1 /mnt/ -o username=test2%654321 #username=用户名,%后面跟的就是密码
mount error(13): Permission denied
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
# mount //192.168.1.111/smb_test1 /mnt/ -o username=zabbix%654321
mount error(13): Permission denied
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
# mount //192.168.1.111/smb_test1 /mnt/ -o username=test3%654321
mount error(13): Permission denied
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
# mount //192.168.1.111/smb_test1 /mnt/ -o username=hadoop%123456
# mount //192.168.1.111/smb_test1 /opt/ -o username=test4%654321
# df -h #通过df -h查看发现有两个挂载,说明我们有两个用户挂载成功了。分别为hadoop用户和test4用户
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 13G 3.9G 77% /
tmpfs 495M 4.0K 495M 1% /dev/shm
/dev/sda1 190M 48M 133M 27% /boot
//192.168.1.111/smb_test1
47G 13G 33G 28% /mnt
//192.168.1.111/smb_test1
47G 13G 33G 28% /opt
好了根据上面的结果说明我们的hadoop用户和test4用户都测试OK了。这里要提一点,我们共享的这个 /samba/test1默认是root用户的属主和属组,755权限。这样的话,我们其他用户就算挂在了samba也不能在根目录创建目录,因为没有权限。那么如何解决呢?
根据自己的需求:
在samba服务器: chmod 777 /samba/test1
不授权777,但是在/samba/test1创建目录然后对用户和用户组进行chown授权。
我这里选择了第一种方法,所以上面我默认是只读模式,但是呢又给特别的用户或者组授予了写权限,结果如何,我们现在/mnt是hadoop用户挂载应该具有写权限,/opt用户是test4用户挂载只拥有只读权限,来看下测试结果。
# cd /mnt/
# mkdir hadoop
# echo 'hadoop ok' >hadoop/testOK
# cat /mnt/hadoop/test #hadoop用户测试OK
hadoop ok
# cd /opt/
# touch test4 #test4用户创建目录失败
touch: cannot touch `test4': Permission denied
注:在共享目录是777权限的情况下,;writable = yes也是放开的,只要能登录都可以在共享目录下面进行写操作的,如果你只想大部分用户只看不写得话,可以参考下我的配置。
好的,到此我们上述的测试,我们samba的搭建以及共享已经完成。
博文来自:www.51niux.com
五、SWAT工具使用
SWAT 是通过浏览器对 Samba 进行管理的工具之一。通过 SWAT ,可以在 Samba 允许访问范围内的客户端,用浏览器对服务端的 Samba 进行控制。在线文档的阅览、smb.conf 的确认和编辑,以及密码的变更、服务的重启等等都可以通过 SWAT 来完成,它的直观让 Samba 变得温和化,对那些不喜欢文本界面管理服务器的朋友来说,是一个强大的工具。
安装swat:
# yum install -y samba-swat
配置swat:
# vi /etc/xinetd.d/swat
disable = no #从默认的yes改为no
only_from = 192.168.1.0 #将自己的网段加上,允许那些网段访问
启动服务:
# /etc/init.d/xinetd restart
通过url页面访问:http://samba服务器的ip:901 #输入root的用户名密码登录
好了swat大家如果有兴趣可以自行摸索。
六、samba的常用命令
关于samba的命令还是有一些的:smbcacls smbcontrol smbencrypt smbmount smbprint smbstatus smbtree
smbclient smbcquotas smbmnt smbpasswd smbspool smbtar smbumount smbd nmbd mount
这里就说一些常用的就得了,samba毕竟更多的是公司内部用,我觉得没必要太深究。
服务器端常用命令:
第一个命令:查看服务器的哪个共享目录被哪些IP然后是什么用户在访问?
#smbstatus #默认是-d选项,如果想就看有哪些ip连接,就加-b
Samba version 3.6.23-36.el6_8
PID Username Group Machine
-------------------------------------------------------------------
3358 hadoop hadoop 192.168.1.108 (192.168.1.108)
3292 hadoop hadoop 192.168.1.112 (192.168.1.112)
Service pid machine Connected at
-------------------------------------------------------
smb_test1 3292 192.168.1.112 Sun Nov 6 16:55:31 2016
IPC$ 3358 192.168.1.108 Sun Nov 6 17:04:26 2016
smb_test1 3358 192.168.1.108 Sun Nov 6 17:04:26 2016
IPC$ 3292 192.168.1.112 Sun Nov 6 16:55:31 2016
选项:
-b :指定只输出简短的内容。
-d :指定以详细方式输出内容。
-L :让smbstatus只列出/var目录中的被锁定项。
-p :用这个参数来列出smbd进程的列表然后退出。对脚编程来说很有用。
-S :让smbstatus只列出共享资源项。
-s configuration file :用这个参数指定一个配置文件。当然在编译时已做好了默认的配置文件。文件中包含了服务需要的详细配置信息。
-u username :用这个参数来查看只与username用户对应的信息。
第二个命令:smbpasswd #samba用户的增删等操作
语法:smbpasswd(选项)(参数) #参数就是你要操作的用户名
选项:
-a:向smbpasswd文件中添加用户;如果存在此用户,就变为了修改用户密码。
-c:指定samba的配置文件;
-x:从smbpasswd文件中删除用户;
-d:在smbpasswd文件中禁用指定的用户;
-e:在smbpasswd文件中激活指定的用户;
-n:将指定的用户的密码置空
第三个命令:samba用户查看命令:pdbedit,这个命令跟上面命令的用途还是有很多相同之处。这里就说一个用户查看用法,其他的可以help查看。
# pdbedit -L #查看samba用户当前已经添加了哪些用户
test:2531:
zabbix:2530:
test3:2533:
hadoop:2527:
test2:2532:
test4:2534:
nagios:2529:
客户端的命令:
第一个命令服务端和客户端都可以用,我们在搭建完samba服务之后总要测试一下是否能连接成功吧?smbclient
smbclient主要是用于linux访问windows的共享文件,或者是访问linux的samba服务器。说白点就是个客户端工具。
语法:
smbclient [网络资源][密码][-EhLN][-B<IP地址>][-d<排错层级>][-i<范围>][-I<IP地址>][-l<记录文件>][-M<NetBIOS名称>][-n<NetBIOS名称>][-O<连接槽选项>][-p<TCP连接端口>][-R<名称解析顺序>][-s<目录>][-t<服务器字码>][-T<tar选项>][-U<用户名称>][-W<工作群组>]
参数:
[网络资源] [网络资源]的格式为//服务器名称/资源分享名称。
[密码] 输入存取网络资源所需的密码。
-B<IP地址> 传送广播数据包时所用的IP地址。
-d<排错层级> 指定记录文件所记载事件的详细程度。
-E 将信息送到标准错误输出设备。
-h 显示帮助。
-i<范围> 设置NetBIOS名称范围。
-I<IP地址> 指定服务器的IP地址。
-l<记录文件> 指定记录文件的名称。
-L 显示服务器端所分享出来的所有资源。
-M<NetBIOS名称> 可利用WinPopup协议,将信息送给选项中所指定的主机。
-n<NetBIOS名称> 指定用户端所要使用的NetBIOS名称。
-N 不用询问密码。
-O<连接槽选项> 设置用户端TCP连接槽的选项。
-p<TCP连接端口> 指定服务器端TCP连接端口编号。
-R<名称解析顺序> 设置NetBIOS名称解析的顺序。
-s<目录> 指定smb.conf所在的目录。
-t<服务器字码> 设置用何种字符码来解析服务器端的文件名称。
-T<tar选项> 备份服务器端分享的全部文件,并打包成tar格式的文件。
-U<用户名称> 指定用户名称。
-W<工作群组> 指定工作群组名称。
别看上面一大坨,但是我们真用不了那么多,一般 就做个测试而已,下面十几个常用用法:
# smbclient -L //192.168.1.111 -U hadoop%123456 #-L 显示共享资源 指定samba服务器 然后-U 用户名%加密码,当然不加%后面写密码,你要不将密码存在历史记录里面也可以,不加%密码就可以了。通过这个命令,我们来测试一下要分享的客户端是否能够访问我们的共享目录。
# smbclient -c "ls" //192.168.1.111/smb_test1 -U hadoop%123456 #我们可以通过-c来指定我们要输入的命令,然后制定共享路径然后加上用户名和密码,这个目录的意思就是查看共享目录下的文件与目录
# smbclient //192.168.1.111/smb_test1 -U hadoop #第三个命令就不常用了,就是通过连接到samba服务然后像ftp那样交互
Enter hadoop's password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-36.el6_8]
smb: \>
命令说明:
?或help [command] 提供关于帮助或某个命令的帮助
![shell command] 执行所用的SHELL命令,或让用户进入 SHELL提示符
cd [目录] 切换到服务器端的指定目录,如未指定,则 smbclient 返回当前本地目录
lcd [目录] 切换到客户端指定的目录;
dir 或ls 列出当前目录下的文件;
exit 或quit 退出smbclient
get file1 file2 从服务器上下载file1,并以文件名file2存在本地机上;如果不想改名,可以把file2省略
mget file1 file2 file3 filen 从服务器上下载多个文件;
md或mkdir 目录 在服务器上创建目录
rd或rmdir 目录 删除服务器上的目录
put file1 [file2] 向服务器上传一个文件file1,传到服务器上改名为file2;
mput file1 file2 filen 向服务器上传多个文件
第二个命令:挂载命令
上面测试的时候已经讲了一种mount挂载,现在用另一个挂载,smbmount这个命令已经不用。smbfs协议改为cifs,现在cifs是官方正式协议。
# mount.cifs //192.168.1.111/smb_test1 /tmp -o username=hadoop%123456 #这条命令的合适就是mount.cifs samba服务器的共享目录 本机的挂载点 -o username=用户名%密码
至此,samba服务器记录就暂时告一段落,日后再补充!