![15e3005fa05aef8d8c4acd8e90122861.png](https://i-blog.csdnimg.cn/blog_migrate/1c4791c78d73bda9ee9082ee4f1c3475.jpeg)
一、samba 软件简介
SMB(Server Messages Block,信息服务块)是基于NetBIOS(Network Basic Input/Output System)通讯协议开发的一种在局域网上共享文件和打印机的通信协议,主要用于 Windows 系统与类 Unix 系统之间进行数据共享服务,由服务器与客户端程序构成。由于NetBl0S是一种局域网通讯协议,所以SMB无法跨路由使用(Router/Gateway),但是可以通过设置“NetBIOS over TCP/IP”使得SMB不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。另外,SMB软件的作者在申请商标时,因为SMB没有实际意义,所以更名为samba。
samba程序主要应用于以下方面:
- 文件共享
- 共享打印机
- Samba登陆时身份验证
- 可以进行Windows的主机名解析
- 可共享如CDROM等外围设备。
二、samba 服务的安装
目前在CentOS 6系统中主要是samba 3.x的版本,在RHEL 7或CentOS 7系统中主要是samba 4.x的版本。
1、samba 程序包说明
samba 3.x的版本
- samba #主服务程序
- samba-client #linux samba客户端程序
- samba-common #主服务程序与客户端程序共用文件
- samba-winbind #Windows域映射服务程序
- samba-winbind-clients #Windows域映射客户端程序
samba 4.x
- samba #主服务程序
- samba-libs #主服务程序库文件
- samba-client #linux samba客户端程序
- samba-client-libs #linux samba客户端程序库文件
- samba-common #主服务程序与客户端程序共用文件
- samba-common-libs #主服务程序与客户端程序共用库文件
- samba-common-tools #主服务程序与客户端程序共用工具文件
- samba-winbind #Windows域映射服务程序
- samba-winbind-clients #Windows域映射客户端程序
- samba-winbind-modules #Windows域映射模块
2、 安装 samba 程序
CentOS6 系统
yum install -y samba samba-client
RHEL7或CentOS7系统
yum install -y samba samba-client samba-winbind samba-winbind-clients
三、 samba 服务的启动与端口说明
samba 服务是通过以下两个守护进程来控制共享的,分别是:
- smbd:这个守护进程主要用来管理samba服务器对文件、打印资源的共享访问,利用TCP协议来传输数据,开放的端口为139和445。
- nmbd:这个守护进程主要用来管理samba服务器工作组、NetBIOS主机名的解析,主要利用UDP协议开启137,138端口来负责名称解析的任务。
所以启动 samba 服务需要启动这两个守护进程。
设置 samba 服务开机自启,并启动服务。
CentOS6 系统
- chkconfig smb on #设置开机自启
- chkconfig nmb on #设置开机自启
- chkconfig --list | grep -E 'smb|nmb' #查看自启状态
- service smb start #启动服务
- service nmb start #启动服务
![ebd854ec0e57f77fe431f88dcf9c1f81.png](https://i-blog.csdnimg.cn/blog_migrate/b939af32d77e4b1179157c2c9e8dba64.jpeg)
RHEL7或CentOS7系统
- systemctl enable smb.service #设置开机自启
- systemctl enable nmb.service #设置开机自启
- systemctl list-unit-files | grep -E 'smb|nmb' #查看自启状态
- systemctl start smb.service #启动服务
- systemctl start nmb.service #启动服务
![f2e639b79834b12445c28982d5554a3b.png](https://i-blog.csdnimg.cn/blog_migrate/af7eb4bb6f1a68be51da1278c6964172.jpeg)
四、与 samba 服务的相关文件说明
1. /etc/samba/smb.conf
samba服务的主配置文件,主要用于samba服务器全局及共享资源的相关设置。
a、 配置文件结构
#Global Settings全局设置
[global] 全局设置
设置项
#Share Definitions共享定义
[homes] 用户家目录共享设置
设置项
[myshare] 自定义共享目录设置
设置项
[printers]:打印机共享设置
设置项
设置项格式为:name = value
b、[global] 全局设置项参数
workgroup = MYGROUP
用于设定samba服务器所要加入的工作组名或域名。
server string = Samba Server Version %v
用于设定samba服务器的注释,可以不填。%v表示samba的版本。
netbios name = MYSERVER
用于设置samba服务器的NetBIOS名称,每台 samba 服务器需设置设为不同的名称。netbios name和workgroup名称需不相同。
interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24
用于设置samba服务器对那块网卡进行监听,可以写网卡名,也可以写该网卡的IP地址,多个参数用空格分开。
hosts allow = 127. 192.168.12. 192.168.13.
用于设置允许连接samba服务器的客户端,多个参数以空格隔开。表示方法见以下说明。
hosts deny = name1,name2
用于设置禁止连接samba服务器的客户端,多个参数以空格隔开。表示方法见以下说明。
【表示方法说明】
用完整IP地址表示:如192.168.1.100
用IP网段表示:如127. 192.168.0.
用EXCEPT进行排除表示:如 192.168.1.EXCEPT 192.168.1.100
用机器名表示:name1,name2
max connections = 0
用于设置连接samba服务器的最大连接数,如果超过这个连接数,则新的连接请求将被拒绝。0表示不限制。
deadtime = 10
用于设置samba服务器与客户端在多长时间内没有任何打开文件操作就断开连接的时间。单位是分钟,0代表不自动切断任何连接。
log file = /var/log/samba/log.%m
用于设置samba服务器日志文件的存储位置以及日志文件名称,%m表示客户端的NetBIOS主机名
max log size = 50
用于设置samba服务器日志文件的最大容量,单位为kB,0代表不限制。
security = user
用于设置用户访问samba服务器的验证方式,共有四种验证方式。
- share
用户访问samba服务器不需要提供账号和密码,安全性能较低。
注意:新版本的samba security = share已经不能用了,要换成
security = user
map to guest = Bad User
如果继续使用share,就会导致系统服务起不来。
- user
用户访问samba服务器需要使用账号和密码,而且身份验证由samba服务器负责,账号和密码需在samba服务器中建立。
- server
用户访问samba服务器需要使用账号和密码,可指定其他Windows服务器或另一台samba服务器来作身份验证。如果认证失败,samba服务器将使用user安全模式作为替代的认证方式。
- domain
用户访问samba服务器需要使用账号和密码,使用Windows域控制器(PDC)来完成认证。
passdb backend = tdbsam
passdb backend 就是用户后台的意思。目前有三种后台:smbpasswd、tdbsam和ldapsam。sam应该是security account manager(安全账户管理)的简写。
- smbpasswd
该方式是使用smb自己的工具smbpasswd来给系统用户(真实用户或者虚拟用户)设置一个samba密码,客户端就用这个密码来访问samba的资源。smbpasswd文件默认在/etc/samba目录下,不过有时候需要手工建立该文件。
- tdbsam
该方式则是使用一个数据库文件来建立用户数据库。数据库文件名为passdb.tdb,默认在/etc/samba目录下。passdb.tdb用户数据库可以使用smbpasswd –a来建立samba用户,不过要建立的samba用户必须先是系统用户。还可以使用pdbedit命令来建立samba用户。pdbedit命令主要使用方法如下:
pdbedit –a username #新建samba用户。
pdbedit –x username# #删除samba用户。
pdbedit –L #显示samba用户列表。
pdbedit –Lv #显示samba用户列表的详细信息。
pdbedit –c “[D]” –u username #暂停该用户的账号。
pdbedit –c “[]” –u username #恢复该用户的账号。
- ldapsam
该方式则是基于LDAP的账户管理方式来验证用户。首先要建立LDAP服务,然后设置“passdb backend = ldapsam:ldap://LDAP Server”
encrypt passwords = yes/no
用于设置是否将认证密码加密。因为现在windows操作系统都是使用加密密码,所以一般要开启此项。不过配置文件默认已开启。
password server =
用于在security = server时,指定某台服务器作为用户认证服务器。
smb passwd file = /etc/samba/smbpasswd
用于定义samba用户的密码文件存放位置及名称,习惯设置为/etc/samba/smbpasswd 。
username map = /etc/samba/smbusers
用于定义用户名映射文件存放位置及名称,习惯设置为/etc/samba/smbusers。此文件用于设置Windows系统用户名与Linux系统用户名的映射关系,如 root = administrator admin,这样就可以用administrator或admin这两个用户来代替root用户登陆samba服务器,更贴近windows用户的习惯。
guest account = nobody
用于设置samba服务器用guest用户登录时,所对应的Linux系统用户名,默认为nobody用户。
smb ports = 445 139
用于指定服务器应该侦听哪些端口以获取SMB流量,默认为139 445端口。
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
用于设置服务器和客户端之间会话的Socket选项,可以优化传输速度。
domain master = yes/no
用于设置samba服务器是否要成为samba网络主浏览器,samba网络主浏览器可以管理跨子网域的浏览服务。
local master = yes/no
用于指定samba服务器是否试图成为本地samba网络的主浏览器。如果设为no,则永远不会成为主浏览器。但是即使设置为yes,也不等于该samba服务器就能成为主浏览器,还需要参加选举。
preferred master = yes/no
用于设置samba服务器开机就强迫进行主浏览器选举,可以提高samba服务器成为本地samba网络主浏览器的机会。如果该参数指定为yes时,最好把domain master也指定为yes。使用该参数时要注意:如果在本samba服务器所在的子网有其他的机器(不论是windows NT,还是其他samba服务器)也指定为首要主浏览器时,那么这些机器将会因为争夺主浏览器而在网络上大发广播,影响网络性能。
如果同一个区域内有多台samba服务器,将上面三个参数设定在一台服务器即可。
os level = 200
用于设置samba服务器的os level值。该参数决定samba服务器是否有机会成为本地samba网络的主浏览器。os level从0到255,WINNT的os level是32,win95/98的os level是1。Windows 2000的os level是64。如果设置为0,则意味着samba服务器将失去浏览选择。如果想让samba服务器成为PDC,需将它os level值设置大些。
domain logons = yes/no
用于设置samba服务器是否要作为本地域控制器。主域控制器和备份域控制器都需要开启此项。
wins support = yes/no
用于设置samba服务器是否提供wins服务。
wins server = Windows服务器IP地址
用于设置samba 服务器是否使用别的Windows服务器提供wins服务。
wins proxy = yes/no
用于设置samba 服务器是否开启wins代理服务。
dns proxy = yes/no
用于设置samba 服务器是否开启dns代理服务。
load printers = yes/no
用于设置是否在启动samba时就共享打印机。
printcap name = cups
用于设置共享打印机的配置文件。
printing = cups
用于设置samba共享打印机的类型。现在支持的打印系统有:bsd, sysv, plp, lprng, aix, hpux, qnx
c、[share name] 共享参数
comment = 任意字符串
用于设置对该共享资源的描述,可以是任意字符串。
path = 共享目录路径
用于指定共享目录的路径。可以用%u、%m这样的宏来代替路径里的unix用户和客户机的NetBIOS name,用宏表示主要用于[homes]共享域。例如:如果我们不打算用home段作为客户的共享,而是在/home/share/下为每个Linux用户以他的用户名建个目录,作为他的共享目录,这样path就可以写成:path = /home/share/%u; 。用户在连接到这共享时具体的路径会被他的用户名代替,要注意这个用户名路径一定要存在,否则,客户机在访问时会找不到网络路径。同样,如果我们不是以用户来划分目录,而是以客户机来划分目录,为网络上每台可以访问samba的机器都各自建个以它的netbios name的路径,作为不同机器的共享资源,就可以这样写:path = /home/share/%m 。
browseable = yes/no
用于指定该共享资源是否浏览可见。
read only = yes/no
用于指定该共享资源是否只读
writable = yes/no
用于指定该共享资源是否可写。
directory mask = 0755
用于设置用户新建目录的权限。默认值为directory mask = 0755
create mask = 0744
用于设置用户新建文件的权限。默认值为create mask = 0744
available = yes/no
用于指定该共享资源是否可用。
admin users = 该共享的管理者
用于指定该共享的管理员(对该共享具有完全控制权限)。在samba 3.0中,如果用户验证方式设置成“security=share”时,此项无效。
例如:admin users = name1,name2(多个用户中间用逗号隔开)。
valid users = 允许访问该共享的用户
用于指定允许访问该共享资源的用户。例如:valid users = name1,@name1,@name2(多个用户或者组中间用逗号隔开,如果要加入一个组就用“@+组名”表示。)
invalid users = 禁止访问该共享的用户
用于指定禁止访问该共享资源的用户。例如:invalid users = root,@name1(多个用户或组中间用逗号隔开。)
write list = 允许写入该共享的用户
用于指定可以在该共享下写入文件的用户。例如:write list = name1,@name2
guest ok = yes/no
用于指定该共享是否允许guest账户访问。
public = yes/no
同guest参数。
d、在配置文件中常用的变量
- %d samba服务器的进程号。
- %D 当前用户的域或工作组的名称。
- %g 当前登陆的用户组名。
- %h samba主机的HOSTNAME。
- %H 用户的家目录。
- %l client端的IP地址。
- %L 服务器端的NetBIOS主机名。
- %m client端的NetBIOS主机名。
- %M client端的lnternet 主机名,就是HOSTNAME。
- %S 当前服务的名称,表示任何可登入的使用者都能登录。
- %T 目前的日期与时间。
- %u 当前登陆的用户名。
- %v samba的版本号。
- %w winbind分隔符。
2、 /etc/samba/Imhosts
NetBIOS name 与IP地址的对应关系文件,一般samba会自动搜索(只对本机生效)。目前Samba预设会去使用本机名称(hostname)作为NetBl0S name,因此不需要设定也可以。
3、 /etc/sysconfig/samba
提供启动smbd和nmbd服务时,要加入的相关服务参数。
4、/etc/samba/smbusers
用来设置Windows系统与Linux系统管理员与访客用户名之间的对应关系,需要配置文件中“username map”选项支持。如在Windows系统中管理员为administrator,Linux系统中为root。可在此文件中进行如下设置。
root = administrator admin
nobody = guest pcguest smbguest
5、/var/lib/samba/private/passdb.tdb,secrets.tdb
管理samba的用户账号和密码的数据库文件。
6、/usr/share/doc/samba-
samba相关的所有技术文档。
五、samba管理常用命令
- testparm(/usr/bin/testparm)
服务器端命令,用于检验samba服务配置文件smb.conf的语法是否正确。当编辑过smb.conf文件需要使用这个命令来进行检查。
- smbstatus(/usr/bin/smbstatus)
服务器端命令,显示samba服务器的联机状态,包括samba服务器联机的PlD,分享的资源,正在使用的用户等信息。
- smbpasswd,pdbedit(/usr/bin/smbpasswd or pdbedit)
服务器端命令,用于管理samba服务的用户账号和密码,早期使用smbpasswd命令, 后因使用TDB数据库文件来保存samba用户信息,改为pdbedit 命令来管理用户数据。
- tdbdump(/usr/bin/tdbdump)
服务器端命令,用于查看samba用户信息数据库文件的内容。需安装tdb-tools软件包。
- tdbtool(/usr/bin/tdbtool)
服务器端命令,可直接进入数据库文件手动修改samba用户的账号与密码。需安装tdb-tools软件包。
- mount.cifs(/sbin/mount.cifs)
客户端命令,在Linux系统上,可使用mount(mount.cifs)命令将远程主机分享的资源挂载到Linux主机上。
- nmblookup(/usr/bin/nmblookup)
客户端命令,主要用于查出NetB10S name。
- smbtree(/usr/bin/smbtree)
客户端命令,以工作组与计算机名方式,树形显示samba服务的共享资源列表。
- smbclient(/usr/bin/smbclient)
客户端命令,来查看其他计算机所分享出来的共享资源信息。
以上是我在学习Linux系统中整理的一些学习要点,肯定会有不对的地方,希望各位大侠给与指正,我们共同学习!谢谢!
下篇:Linux服务器配置-samba服务配置(二)
将介绍samba服务的防火墙配置,并通过实例说明samba共享资源无需密码访问的配置。