一、samba服务简介。
在早期网络世界当中,数据在不同主机之间的传输大多是使用 FTP 来进行传送。不过,使用FTP 传输却有个小小的问题,即无法直接修改主机上面的数据!也就是说您想要更改Linux 主机上的某个文件时,必需要由 Server 端将该档文件下载到 Client端后才能修改,也因此该文件在 Server 与 Client 端都会存在。如果有一天修改了某个文件,却忘记将数据上传回主机,那么等过了一阵子之后,如何知道那个文件才是最新的?
组成Samba运行的有两个服务,一个是SMB,另一个是NMB;SMB是Samba 的核心启动服务,主要负责建立 Linux Samba服务器与Samba客户机之间的对话, 验证用户身份并提供对文件和打印系统的访问,只有SMB服务启动,才能实现文件的共享,监听139 TCP端口。而NMB服务是负责解析用的,类似与DNS实现的功能,NMB可以把Linux系统共享的工作组名称与其IP对应起来,如果NMB服务没有启动,就只能通过IP来访问共享文件,监听137和138 UDP端口。
二、samba服务的安装与配置
1、先确定是否已经安装了samba服务
rpm -qa | grep samba
如果已经安装则会显示安装的版本和包,未安装则不显示。
2、安装samba服务
如果没有安装samba服务,使用yum安装samba工具:#yum -y install samba
另外一种安装方式:sudo apt-get install samba
3、启动samba服务
systemctl start smb nmb
4、查看samba服务进程和相关信息
#ps -ef | grep -E 'smb|nmb'
root 4935 1 0 14:55 ? 00:00:00 /usr/sbin/smbd --foreground --no-process-group
root 4937 4935 0 14:55 ? 00:00:00 /usr/sbin/smbd --foreground --no-process-group
root 4938 4935 0 14:55 ? 00:00:00 /usr/sbin/smbd --foreground --no-process-group
root 4941 4935 0 14:55 ? 00:00:00 /usr/sbin/smbd --foreground --no-process-group
root 6098 4935 0 15:47 ? 00:00:00 /usr/sbin/smbd --foreground --no-process-group
root 6979 6056 0 16:52 pts/3 00:00:00 grep --color=auto -E smb|nmb
查看Samba应用服务端口: netstat -tunlp | grep -E 'smbd|nmbd'
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 4935/smbd
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 4935/smbd
tcp6 0 0 :::445 :::* LISTEN 4935/smbd
tcp6 0 0 :::139 :::* LISTEN 4935/smbd
Samba由两个主要程序组成,它们是smbd和nmbd。smbd应用进程主要监听139和445端口, nmbd应用进程主要监听137与138端口。这两个守护进程在服务器启动到停止期间持续运行,功能各异。Smbd和nmbd使用的全部配置信息全都保存在smb.conf文件中。Smb.conf向smbd和nmbd两个守护进程说明输出什么以便共享,共享输出给谁及如何进行输出。
三、samba服务的配置
Samba服务器的工作原理是:客户端向Samba服务器发起请求,请求访问共享目录,Samba服务器接收请求,查询smb.conf文件,查看共享目录是否存在,以及来访者的访问权限,如果来访者具有相应的权限,则允许客户端访问,最后将访问过程中系统的信息以及采集的用户访问行为信息存放在日志文件中。
Samba的默认配置文件一般存放在/etc/samba目录中,主配置文件名为smb.conf,文件中记录着大量的规则和共享信息,所以是samba服务非常重要的核心配置文件,完成samba服务器搭建的大部分主要配置都在该文件中进行。
注意:在修改配置文件之前,务必先进行保存。以便出现错误后的恢复。 cd /etc/samba ; mv smb.conf smb_back.conf 或 cp smb.conf ./smb_back.conf
或cp /etc/samba/smb.conf /etc/samba/smb_back.conf
1 # See smb.conf.example for a more detailed config file or 2 # read the smb.conf manpage. 3 # Run 'testparm' to verify the config is correct after 4 # you modified it. 5 6 [global] 7 #workgroup = SAMBA 8 workgroup = WORKGROUP 9 security = user 10 11 passdb backend = tdbsam 12 13 printing = cups 14 printcap name = cups 15 load printers = yes 16 cups options = raw 17 18 [homes] 19 comment = Home Directories 20 valid users = %S, %D%w%S 21 browseable = No 22 read only = No 23 inherit acls = Yes 24 25 [printers] 26 comment = All Printers 27 path = /var/tmp #文件共享路径 28 printable = Yes 29 create mask = 0600 30 browseable = No 31 32 [print$] 33 comment = Printer Drivers 34 path = /var/lib/samba/drivers 35 write list = @printadmin root 36 force group = @printadmin 37 create mask = 0664 38 directory mask = 0775
1、全局参数 [global].
workgroup用来定义工作组。一般情况下,需要我们把这里改成”WORKGROUP”(windows默认的工作组名字)。
security = user #这里指定samba的安全等级。关于安全等级有四种:share:用户不需要账户及密码即可登录samba服务器,(非常不安全)
user:由提供服务的samba服务器负责检查账户及密码(默认)
server:检查账户及密码的工作由另一台windows或samba服务器负责
domain:指定windows域控制服务器来验证用户的账户及密码。
passdb backend = tdbsam # passdb backend (用户后台),samba有三种用户后台:smbpasswd, tdbsam和ldapsam。
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用户列表,读取passdb.tdb数据库文件。 -pdbedit –Lv:列出Samba用户列表详细信息。 -pdbedit –c “[D]” –u username:暂停该Samba用户账号。 -pdbedit –c “[]” –u username:恢复该Samba用户账号。
ldapsam:基于LDAP账户管理方式验证用户。首先要建立LDAP服务,设置“passdb backend = ldapsam:ldap://LDAP Server” load printers 和 cups options 两个参数用来设置打印机相关。除了这些参数外,还有几个参数需要了解:
netbios name = MYSERVER # 设置出现在“网上邻居”中的主机名
hosts allow = 127. 192.168.12. 192.168.13. # 用来设置允许的主机(表示允许连接到Samba Server的客户端),如果在前面加”;”则表示允许所有主机。多个参数以空格隔开。可以用一个IP表示,也可以用一个网段表示。hosts deny 与hosts allow 刚好相反。例如: 表示容许来自172.17.2.*.*的主机连接,但排除172.17.2.50 hosts allow=172.17.2.EXCEPT172.17.2.50 # 表示容许来自172.17.2.0/255.255.0.0子网中的所有主机连接 hosts allow=172.17.2.0/255.255.0.0 # 表示容许来自M1和M2两台计算机连接 hosts allow=M1,M2 # 表示容许来自SC域的所有计算机连接 hosts allow=@SC。
interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24 #设置Samba Server监听哪些网卡,可以写网卡名,也可以写该网卡的IP地址。
log file = /var/log/samba/%m.log #定义samba的日志,这里的%m是上面的netbios name
max log size = 50 # 指定日志的最大容量,单位是K。
config file = /usr/local/samba/lib/smb.conf.%m #config file可以让你使用另一个配置文件来覆盖缺省的配置文件。如果文件 不存在,则该项无效。这个参数很有用,可以使得samba配置更灵活,可以让一台samba服务器模拟多台不同配置的服务器。比如,你想让PC1(主机名)这台电脑在访问Samba Server时使用它自己的配置文件,那么先在/etc/samba/host/下为PC1配置一个名为smb.conf.pc1的文件,然后在smb.conf中加入:config file=/etc/samba/host/smb.conf.%m。这样当PC1请求连接Samba Server时,smb.conf.%m就被替换成smb.conf.pc1。这样,对于PC1来说,它所使用的Samba服务就是由smb.conf.pc1定义的,而其他机器访问Samba Server则还是应用smb.conf。
server string = Samba Server Version %v #设定 Samba Server 的注释,可以是任何字符串,也可以不填。宏%v表示显示Samba的版本号。
2、[homes]
该部分内容共享用户自己的home目录,也就是说,当用户登录到samba服务器上时实际上是进入到了该用户的home目录,用户登陆后,共享名不是homes而是用户自己的标识符,对于单纯的文件共享的环境来说,这部分可以注视掉。
3、[printers]
该部分内容设置打印机共享。
4、修改配置文件comment = My share
path = /home/gzd/gzd_share
valid users = xxxx
writable = yes
browseable = yes
create mask = 0664
# force create mask = 0644
directory mask = 0775
# force directory mode = 0755
四、测试samba服务
1、设置完samba服务后,需要重启,同时可以设置为开机自启。systemctl resatrt smb ; systemctl enable smb
2、创建smb账号。
//新建/etc/samba/smbpasswd文件:
sudo touch /etc/samba/smbpasswd
// 根据2.3设置的valid users,设置用户密码
// gzdaijie 替换为你在2.3中设置的用户名
sudo smbpasswd -a xxxxx
//输入两次密码后,会提示 Added user gzd. 表示设置成功
// 若用户名非当前登录系统的用户名,可能会提示Failed
3、win10下测试
按下win+R按键,输入\192.168.xx.xxx\,再输入用户名和密码即可。
五、其他的一些相关命令
#service smb start
#service smb stop
#service smb restart
#service smb status
注:使用时候如果打不开文件夹,可能是因为防火墙的原因。关闭防火墙即可:systemctl stop firewalld.service 和setenforce 0