使用Samba实现文件共享

时间:2023-01-07 14:08:45

SMB服务消息块协议,指在解决局域网内的文件或打印机等资源的共享问题,这也使得在多个主机之间共享文件变得越来越简单,Samba服务已经成为了,Linux系统与Windows系统之间数据传输的最佳选择.

Samba 服务概述

Samba是SMB的一种实现方法,主要用来实现Linux系统的文件和打印服务。Linux用户通过配置使用Samba服务器可以实现与Windows用户的资源共享。守护进程smbd和nmbd是Samba的核心,在全部时间内运行。nmbd程序使得通过企图计算机可以浏览Linux服务器。

SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。

smb: 实现资源共享、权限验证 -> TCP 139 445 nmb: 实现计算机名解析 -> UDP 137

Samba和FTP的区别

Samba可以实现跨平台的文件传输,并且支持在线修改,这一点是它和FTP服务器的明显区别.

Linux 系统之间的资源共享,我们使用的是NFS协议. Windows 系统之间的资源共享,我们使用的是NetBIOS协议. Linux 和 Windows 之间资源共享我们就要使用SMB协议了.CIFS协议.

Samba的作用

1.共享文件与打印机等资源的服务 2.支持跨平台访问的身份验证和权限设置,支持SSL 3.解析NetBIOS名字:Samba通过nmbd服务可以搭建NBNS(NetBIOS Name Service)服务器,提供名称解析,将 计算机的NetBIOS名解析为IP地址,实现主机之间的访问定位(windows独有). <br>

Samba配置文件解析

[global]						#定义全局策略
workgroup=MYGROUP					#定义工作组
netbios name=MYSERVER					#指定NetBios名称
interfaces=lo 192.168.1.1				#指定samb侦听那个网络接口
hosts allow=127.0.0.1					#指定哪些主机能访问samba服务器
log file=/var/log/samba/log.%m				#定义日志文件
max log size=50						#日志大小
security=user/share					#用户名密码认证/匿名用户认证
map to guest = Bad User					#7系列匿名访问应加入此选项
passdb backend=tdbsam/ldapsam				#加密方式
deadtime=10						#十分钟内不访问自动断开连接
display charset=UTF8					#使用UTF8字符集
max connections=0					#指定链接限制
guest account=nobody					#匿名用户账号为nobody
load printers=no					#是否共享打印机
cups options=raw					#打印属性

[homes]							#共享家目录
comment = Home Directories				#共享名称
browseable = no						#目录是否可被浏览
writable = no						#目录是否可写
valid users = %S
valid users = MYDOMAIN\%S

[printers]						#打印机共享
comment = All Printers
path = /var/spool/samba 				#打印机共享池
browseable = no
guest ok = no
writable = no
printable = yes

[common]						#自定义共享资源名称
comment=LyShark						#共享资源描述
path=/home/samba					#共享目录
valid users=tom lyshark					#有效账户列表
create mask=0750					#上传文件默认权限,默认(0750)
directory mask=0775					#创建目录默认权限,默认(0755)
browseable=yes						#共享目录是否对所有人可见	
writable=yes		
read only=yes						#赋予文件只读权限
write list=admin					#写权限账户列表,这里控制admin有写权限 
write list=@admin					#设置一个组有写权限
admin users=lyshark					#管理员账号,这里设置lyshark为管理员
invalid users=root bin					#禁止root bin 访问common共享目录
guest ok=yes						#是否启用匿名访问

<br>

匿名验证 Samba 配置

匿名Samba的主要作用是,在局域网内编辑共享文件,比如你有一个word文件需要让大家填写,此时我们就可以使用Samb服务将Word文档匿名分享出去,让大家填写文档

配置Samba服务端

1.首先通过yum,来安装samba服务程序,恰巧samba服务名也是samba

[root@localhost ~]# yum install -y samba samba-client
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager.
Package samba-4.7.1-6.el7.x86_64 already installed and latest version
Package samba-client-4.7.1-6.el7.x86_64 already installed and latest version
Nothing to do

2.然后创建一个共享目录,这个目录主要用来存储一些文件,后期要共享出去

[root@localhost ~]# mkdir /smb_file
[root@localhost ~]#
[root@localhost ~]# chmod 755 -R /smb_file/
[root@localhost ~]#

3.编辑Samba主配置文件,在配置文件最下面创建匿名共享区域,如果有多个匿名区域可以继续往下写配置

[root@localhost ~]# vim /etc/samba/smb.conf

  6 [global]
  7         workgroup = SAMBA
  8         security = user
  9         map to guest=Bad User   #添加此项,开启免密码认证

 .....
 38
 39 [smb_file]                       #共享目录显示的名称
 40         comment=hello guest      #描述信息(可以自定义)
 41         path=/smb_file           #共享的目录
 42         browseable=yes           #共享目录是否对所有人可见
 43         guest ok=yes             #允许匿名用户访问
 44         writable=yes             #匿名用户可写
 45         public=yes               #所有人可见

4.重启SMB服务,并设置开机自启动

[root@localhost ~]# systemctl restart smb
[root@localhost ~]# systemctl enable smb

配置Linux客户端

1.首先想要使用Samba资源,需要在Linxu客户端安装一个Samba的客户端工具,下面就开始安装吧

[root@localhost ~]# yum install -y samba-client
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager.
Package samba-client-4.7.1-6.el7.x86_64 already installed and latest version
Nothing to do

2.匿名用户访问,我们可以直接使用下面的命令无需输入密码直接扫描资源,并使用

[root@localhost ~]# smbclient -L //服务器IP	             #查看smaba共享目录

Enter SAMBA root s password:

        Sharename       Type      Comment
        ---------       ----      -------
        print$          Disk      Printer Drivers
        smb_file        Disk      hello guest
        IPC$            IPC       IPC Service (Samba 4.7.1)
Reconnecting with SMB1 for workgroup listing.

        Server               Comment
        ---------            -------

        Workgroup            Master
        ---------            -------

[root@localhost ~]# smbclient //服务器IP/共享名			#查看共享文件

Enter SAMBA root s password:
Try "help" to get a list of possible commands.
smb: \> ls
  .                                  DR        0  Mon Nov  5 04:53:30 2018
  ..                                 DR        0  Mon Nov  5 04:45:11 2018
                17811456 blocks of size 1024. 16582792 blocks available
smb: \>

配置Windows客户端

运行CMD(Win+R) > 输入:\\服务器IP\	共享资源名			#访问目录

C:\Users\LyShark>net use * /del               #清理windows目录缓存
你有以下的远程连接:

                    \\192.168.1.20\smb_file
继续运行会取消连接。

你想继续此操作吗? (Y/N) [N]: y
命令成功完成。

<br>

密码验证 Samba 配置

基于密码验证的Samba的常用作用是,在局域网内,实现加密访问,只有知道相应密码的人才能访问指定资源

配置Samba服务端

1.首先通过yum,来安装samba服务程序,恰巧samba服务名也是samba

[root@localhost ~]# yum install -y samba samba-client
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager.
Package samba-4.7.1-6.el7.x86_64 already installed and latest version
Package samba-client-4.7.1-6.el7.x86_64 already installed and latest version
Nothing to do

2.然后创建一个共享目录,这个目录主要用来存储一些文件,后期要共享出去

[root@localhost ~]# mkdir /smb_file
[root@localhost ~]#
[root@localhost ~]# chmod 755 -R /smb_file/
[root@localhost ~]#

3.编辑Samba主配置文件,在配置文件最下面创建共享区域,如果有多个区域可以继续往下写配置

[root@localhost ~]# vim /etc/samba/smb.conf

 39 [smb_file]                       #共享目录显示的名称
 40         comment=hello admin      #描述信息(可以自定义)
 41         path=/smb_file           #共享的目录
 42         browseable=yes           #共享目录是否对所有人可见
 43         guest ok=no              #允许匿名用户访问
 44         writable=yes             #可写

4.通过命令管理,创建一个系统用户,并转换为Samba用户

[root@localhost ~]# useradd -M -s /sbin/nologin admin      #创建一个系统用户
[root@localhost ~]# smbpasswd -a admin                     #将系统用户转化成Samba用户
-----------------------------------------------------------------
[参数说明]

smbpasswd [选项] 账户名称

  -a        #添加账户并设置密码
  -x        #删除SMB账户
  -d        #禁用SMB账户
  -e        #启用SMB账户
-----------------------------------------------------------------

[root@localhost ~]# useradd -M -s /sbin/nologin guest      #创建一个系统用户
[root@localhost ~]# pdbedit -a guest                       #将系统用户转化成Samba用户
new password:
retype new password:
Unix username:        guest
NT username:
Account Flags:        [U          ]
User SID:             S-1-5-21-2500030998-3215874083-1041928306-1001
Primary Group SID:    S-1-5-21-2500030998-3215874083-1041928306-513
Full Name:
Home Directory:       \\localhost\guest
HomeDir Drive:
Logon Script:
Profile Path:         \\localhost\guest\profile
Domain:               LOCALHOST
Account desc:
Workstations:
Munged dial:
Logon time:           0
Logoff time:          Wed, 06 Feb 2036 10:06:39 EST
Kickoff time:         Wed, 06 Feb 2036 10:06:39 EST
Password last set:    Mon, 05 Nov 2018 06:23:37 EST
Password can change:  Mon, 05 Nov 2018 06:23:37 EST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF


[root@localhost ~]# pdbedit -L                             #列出所有Samba用户
admin:1001:
guest:1002:

5.重启SMB服务,并设置开机自启动

[root@localhost ~]# systemctl restart smb
[root@localhost ~]# systemctl enable smb

配置Linux客户端

1.首先想要使用Samba资源,需要在Linxu客户端安装一个Samba的客户端工具,下面就开始安装吧

[root@localhost ~]# yum install -y samba-client
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager.
Package samba-client-4.7.1-6.el7.x86_64 already installed and latest version
Nothing to do

2.用户访问,我们可以直接使用下面的命令输入密码扫描资源,并使用

[root@localhost ~]# smbclient -U 用户名 -L //服务器IP               #查看共享目录
Enter SAMBA dmin s password:

        Sharename       Type      Comment
        ---------       ----      -------
        print$          Disk      Printer Drivers
        smb_file        Disk      hello admin
        IPC$            IPC       IPC Service (Samba 4.7.1)
        admin           Disk      Home Directories
Reconnecting with SMB1 for workgroup listing.

        Server               Comment
        ---------            -------

        Workgroup            Master
        ---------            -------

[root@localhost ~]# smbclient -U 用户名 //服务器IP/共享文件名      #查看共享文件
Enter SAMBA dmins password:
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Mon Nov  5 06:30:02 2018
  ..                                 DR        0  Mon Nov  5 06:17:37 2018
  lyshark                             N      988  Mon Nov  5 06:23:28 2018

                17811456 blocks of size 1024. 16584148 blocks available

Linux挂载Samba

1.将远程的smb_file共享目录,挂载到本地的/mnt下,我们可以执行以下命令

[文件格式]  [/smb_file共享目录][挂载到/mnt] [username=smb用户名][password=smb密码]

[root@localhost ~]# mount -t cifs //192.168.1.20/smb_file /mnt -o username=admin,password=123123
[root@localhost ~]#
[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/rhel-root     17G  1.2G   16G   7% /
//192.168.1.20/smb_file   17G  1.2G   16G   7% /mnt

<br>

Samba ACL权限控制

允许单个IP拒绝所有

[common]

comment=Common Share 
hosts allow =  IP地址
hosts deny =  IP地址

允许单个网段,拒绝所有

[common]

path =/common 
hosts allow =127.0.0.0/24  example
hosts deny =127.0.0.0/24  example

<br>

Samba 给用户取别名

1.修改主配置文件

vim /etc/samba/smbusers

用户名=别名1 别名2

lyshark= wang rui

2.主配置文件加入以下内容

vim /etc/samba/smb.conf

username map = /etc/samba/smbusers