Samba服务概述、配置、及其搭建


这里是一段防爬虫文本,请读者忽略。
本文原创首发于CSDN,作者IDYS
博客首页:https://blog.csdn.net/weixin_41633902/
本文链接:https://blog.csdn.net/weixin_41633902/article/details/105887470


写在开头的话

  • 请记住:实践是掌握知识的最快方法
  • 如果你只是怀着看看的态度去快速浏览文章,而不去认认真真的把文章里面讲的任何一个知识点去实践一遍,那么你永远也掌握不了它
  • 生命不息,折腾不止!

Samba 概述

  • SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同操作系统的计算机之间提供文件及打印机等资源的共享服务。SMB 协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。如图:

在这里插入图片描述

Windows上可使用 Serv-U软件使Windows成为FTP服务器端


Samba与FTP的区别

ftp 的优缺点:

  • 优点:文件传输、应用层协议、可跨平台(能通过外网进行传输)
  • 缺点:只能实现文件传输,无法实现文件系统挂载(就是无法将服务端共享文件的位置映射到本地磁盘);无法直接修改服务器端文件(只能通过修改ftp的配置文件让ftp服务器端可以被修改,然后先将文件下载至本地,在本地修改完文件后,再上传至ftp服务器端,实现服务器端文件的修改)

Samba 的特性:

  • 使用 smb/cifs 协议、可跨平台(Windows、Unix、Linux都可以使用)、可实现文件系统挂载、可实现服务器端修改文件(通过将共享文件映射到本地磁盘,可以实现文件在本地的实时修改,而不必先将文件下载,然后修改上传去实现服务器端文件的修改)

smb 协议和 cifs 之间的关系

  • 随着 Internet 的流行,Microsoft 希望将这个协议扩展到 Internet 上去,成为 Internet 上计算机之间相互共享 数据的一种标准。因此它将原有的几乎没有多少技术文档的 SMB 协议进行整理,重新命名为CIFS(Common Internet File System),它使程序可以访问远程 Internet 计算机上的文件并要求此计算机提供服务。客户程序请求远在服务器上的 服务器程序为它提供服务。服务器获得请求并返回响应。CIFS 是公共的或开放的 SMB 协议版本,并由 Microsoft 使用。 SMB 协议在局域网上用于服务器文件访问和打印的协议。(cifs使其能够在互联网传输)

Samba 服务详解

Samba 软件相关信息

  1. 协议:SMB/CIFS
  2. 服务: smb 实现资源共享、权限验证
    其TCP端口号为 139 445
  3. 配置文件(/etc/samba/
    smb.conf 主配置文件
    smbusers 别名配置文件

登录验证模式(安全级别)

  • share 匿名验证
  • user 本地用户验证(Samba服务器默认的安全级别,用户在访问共享资源之前必须提供用户名和密码进行验证)

拓展:tdbsam:该方式是使用一个数据库文件来验证。数据库文件叫passdb.tdb。可以通过pdbedit -a 向数据库中添加新用户(并且设置samba用户的密码),不过要建立的Samba用户必须先是系统用户。也可以理解为我们使用pdbedit -a 将系统用户转化为了samba 用户。pdbedit命令的参数很多,列出几个主要的。

  • pdbedit -a username:新建Samba账户(将系统用户转化为samba用户,并设置密码)
  • pdbedit -x username:删除Samba账户
  • pdbedit -L:列出Samba用户列表,读取passdb.tdb数据库文件。
  • pdbedit -c “[D]” -u username:暂停该Samba用户账号
  • pdbedit -c “[]” -u username:恢复该Samba用户账号。
  • pdbedit -Lv:列出Samba用户列表详细信息

注意:samba用户的密码存储于 passdb.tdb中,而系统用户的密码储存于/etc/shadow中,所以samba的密码并不是系统用户的密码,但是samba服务本地用户验证方式所建立的用户必须是系统中存在的用户,可以理解为samba和系统共用 /etc/passwd这个用户文件

  • 别名用户访问(虚拟用户)

Samba服务搭建

  • 本次实验采用Linux作为Samba服务的服务器端,Windows作为Samba服务的客户端

Windows安装Samba client服务

  • 因为Windows默认是没有安装Samba服务的,所以在做实验之前我们应该先安装上Samba服务的客户端,以下为Windows安装Samba服务的步骤
  1. 输入快捷键 【Win+R】 召唤出一个窗口,然后在窗口里面输入control

在这里插入图片描述

  1. 点击【程序

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WOmwel9l-1588386456617)(.\images\程序.png)]

  1. 点击【启用或者关闭Windows功能

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sX3XngKS-1588386456619)(.\images\启用或者关闭windows功能.png)]

  1. 开启【Samba Client功能

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1cmPjT7d-1588386456621)(.\images\smaba_client.png)]

  1. 重启

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xqM3WQdk-1588386456623)(.\images\重启.png)]

现在就完成了Windows添加Samba client服务功能了


Linux安装配置Samba服务

  1. 利用yum安装Samba服务
[root@dayuanshuai ~]# yum -y install samba
  1. 开启Samba服务
[root@dayuanshuai ~]# service smb start  
启动 SMB 服务:                                            [确定]
  1. 采用本地用户验证方式】:Linux上创建一个用户,使其不能登录Linux系统(此用户为Samba服务验证登录而创建),然后为该用户设置Samba用户密码
# 添加系统用户
[root@dayuanshuai ~]# useradd -s /sbin/nologin test1

# 添加Samba用户密码
[root@dayuanshuai ~]# pdbedit -a test1
new password:
retype new password:
Unix username:        IDYS
NT username:          
Account Flags:        [U          ]
User SID:             *********************************************
Primary Group SID:    *********************************************

查看Linux网卡地址
[root@dayuanshuai ~]# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr *****************  
          inet addr:192.168.200.135  Bcast:192.168.200.255  Mask:255.255.255.0

# 关闭防火墙
[root@dayuanshuai /]# service iptables stop
iptables:将链设置为政策 ACCEPT:filter                    [确定]
iptables:清除防火墙规则:                                 [确定]
iptables:正在卸载模块:                                   [确定]

# 查看SElinux的状态
[root@dayuanshuai /]# getenforce 
Enforcing

# 将SELinux状态设置为permissive
[root@dayuanshuai /]# setenforce 0

# 再次查看状态
[root@dayuanshuai /]# getenforce 
Permissive

注意:因为我们现在是在做实验,不是在生产环境中,所以为了防止不必要的干扰,请关闭防火墙和SELinux


报错解决

  • 关于使用Windows访问Smaba时,提示:您没有权限访问YOUR_IP_ADDRESS,请与管理员联系,请求访问权限的问题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N1B6J20z-1588386456624)(.\images\没有权限防火提示.png)]

  1. 关闭防火墙,SELinux
# 关闭防火墙
[root@dayuanshuai /]# service iptables stop
iptables:将链设置为政策 ACCEPT:filter                    [确定]
iptables:清除防火墙规则:                                 [确定]
iptables:正在卸载模块:                                   [确定]

# 查看SElinux的状态
[root@dayuanshuai /]# getenforce 
Enforcing

# 将SELinux状态设置为permissive
[root@dayuanshuai /]# setenforce 0

# 再次查看状态
[root@dayuanshuai /]# getenforce 
Permissive
  1. 因为当用户使用用户名和密码访问Samba服务器端后,Windows会保存此账户密码信息,以至于下次再次登陆Samba服务器端时,不需要再次输入账户密码。直接使用之前保存的账户名和密码。而如果你在服务器端里面将原来Windows访问samba服务端时对应的账户名密码删除了,而Windows还是使用之前保存的用户名和密码进行登录,所以会提示没有权限访问(因为samba服务端已经删除了对应的用户名和密码,所以找不到Windows发来的账户密码信息,然后就会拒绝访问)。这时Windows需要清除原来保存的信息。
  • 覆盘演示过程,首先Windows是可以直接访问Linux的Samba服务的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hrsj25BC-1588386456625)(.\images\现在显示可以登录.png)]

  • 然后我在Linux上删除该系统用户,同时也在samba用户里面删除
# 删除Smaba用户
[root@dayuanshuai /]#     pdbedit -x test1

# 删除该用户时,提示该用户正在9115号进程运行
[root@dayuanshuai /]# userdel -r test1
userdel: user test1 is currently used by process 9115

# 强制终止该经常
[root@dayuanshuai /]# kill -9 9115

# 继续删除该用户
[root@dayuanshuai /]# userdel -r test1

# 查看该用户是否删除
[root@dayuanshuai /]# cat /etc/passwd | grep test1
  • 继续在Windows上访问该smaba服务器,可以看到此时提示没有权限访问

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QJeItY71-1588386456627)(.\images\2.提示没有权限访问.png)]

  • 在Linux上添加Samba用户
# 添加系统用户
[root@dayuanshuai /]# useradd -s /sbin/nologin test2

# 添加Smaba用户,并设置密码
[root@dayuanshuai /]# pdbedit -a test2
new password:
retype new password:
Unix username:        test2
NT username:          
.......... #下面显示的信息省略

-【 Win+R】输入cmd,然后在Windows上清空保存的samba用户信息,输入net use * /del/y即可清空

先 【Win+R】然后输入cmd,进入命令行界面

# 输入net use * /del/y
C:\Users\dayuanshuai>net use * /del /y
你有以下的远程连接:

                    \\192.168.200.135\IPC$
继续运行会取消连接。

命令成功完成。
  • 之后【Win+e】,再次在上面的显示框里输入\\192.168.200.135,然后就会要求你输入用户名密码,输入之后可以进入了samba服务器端了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hmombt4A-1588386456629)(.\images\3.输入ip地址.png)]

输入用户名密码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0fDYecDX-1588386456630)(.\images\4.输入用户名及其密码.png)]

登录成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j91lPYg5-1588386456631)(D:\Users\dayuanshuai\Desktop\学习\linux服务\samba服务概述、配置、及其搭建\images\5.登录成功.png)]

Windows建立磁盘映射

  1. Windows右击【此电脑】图标,选择【映射网络驱动器】.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YFCEyP6D-1588466446900)(.\images\6.映射网络驱动器.png)]

  1. 填写Smaba服务器端的IP地址加上Samba用户名

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k5wyJiGw-1588466446904)(.\images\7.填写格式.png)]

  1. Win+E】查看Samba网络磁盘

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tN6dy9wi-1588466446906)(.\images\8.成功.png)]


Smaba参数配置

[global]

[global]用于定义Samba服务器的总体特性,其配置项对所有共享资源生效

  1. workgroup = WORKGROUP:设定 Samba Server 所要加入的工作组或者域

  2. server string = Samba Server Version %v:设定 Samba Server 的注释,可以是任何字符串,也可以不填。宏%v表示显示Samba的版本号。

  3. interfaces = lo eth0 192.168.12.2/24:设置Samba Server监听哪些网卡,可以写网卡名,也可以写该网卡的IP地址。

  4. hosts allow = 127. 192.168.1. 192.168.10.1 :表示允许连接到Samba Server的客户端,多个参数以空格隔开。可以用一个IP表示,也可以用一个网段表示。 hosts denyhosts allow 刚好相反(只能二选其一)。

例如:hosts allow=172.17.2. EXCEPT172.17.2.50 表示容许来自172.17.2.*的主机连接,但排除172.17.2.50hosts allow=172.17.2.0/255.255.0.0 表示容许来自172.17.2.0/255.255.0.0子网中的所有主机连接

  1. log file = /var/log/samba/log.%m:设置Samba Server日志文件的存储位置以及日志文件名称。在文件名后加个宏%m(主机名或者IP地址),表示对每台访问 Samba Server的机器都单独记录一个日志文件。
[root@dayuanshuai ~]# ls /var/log/samba/log.*           # desktop-1ga15jf是我的主机名 192.168.200.1是我的IP地址
/var/log/samba/log.192.168.200.1  /var/log/samba/log.desktop-1ga15jf  /var/log/samba/log.smbd
  1. max log size = 50:设置Samba Server日志文件的最大容量,单位为kB,0代表不限制
  2. security = user :设置安全级别(即用户登录方式)
  3. passdb backend = tdbsam设置用户访问Samba Server的验证方式。(Samba密码验证方式)

passdb 有三个选项,分别为:smbpasswd、tdbsam、ldapsam

  • passdb backend = smbpasswd:该方式是使用smb自己的工具smbpasswd来给系统用户(真实用户或者虚拟用户)设置一个Samba密码,客户端就用这个密码来访问Samba的资源。smbpasswd文件默认在/etc/samba目录下,不过有时候要手工建立该文件
smbpasswd -a 用户名 #添加一个samba用户
smbpasswd -d 用户名 #禁用一个samba用户
smbpasswd -e 用户名 #恢复一个samba用户
smbpasswd -x 用户名 #删除一个samba用户
  • passdb backend = tdbsam:该方式则是使用一个数据库文件来建立用户数据库。数据库文件叫passdb.tdb
  • passdb backend = ldapsam:该方式则是基于LDAP的账户管理方式来验证用户
  1. load printers = yes/no :设置是否在启动Samba时就共享打印机

[homes]

[homes]:用于设置用户宿主目录的共享属性(特殊共享)

  1. [homes]:共享名(特殊共享,泛指每个用户对应的家目录)
  2. comment = Home Directories:共享描述
  3. browseable = no:共享是否可被查看
  4. writable = yes :共享是否可写

家目录是否可写取决于两个条件:第一,系统对于该用户是否设置家目录可写。第二,Samba配置文件是否设置用户对家目录是否可写

  1. ; valid users = %S :允许访问该共享的用户

例如:valid users = bob,@bob(多个用户或者组中间用逗号隔开,如果要加入一个组就用“@组名”表示。)


[printers]

用于设置打印机共享资源的属性(特殊共享,共享打印设备,现在基本不用)

  1. [printers]:共享名
  2. comment = All Printers:共享描述
  3. path = /var/spool/samba:共享路径
  4. browseable = no :共享是否可被查看
  5. guest ok = no :是否可以匿名访问,类似于public
  6. writable = no :是否可写
  7. printable = yes :是否可以打印

[自定义]

自定义共享区域

  1. [自定义] :共享名
  2. comment = the share is :共享描述
  3. path = /share/zdy :共享路径
  4. public = yes :是否可以匿名访问,类似于guest ok
  5. browseable = yes :共享是否可被查看
  6. writable = yes :是否可写(同时设置目录的W)

配置文件检查工具

  • testparm:若显示"Loaded services file OK."信息表示配置文件的语法是正确的

  • -v:显示Samba所支持的所有选项


访问控制

写入权限的控制方式(类似于vsftp的限制方式)

  1. 配置文件开启,文件系统严格控制(尽量采用这种)
  • writable = yes:配置文件上全面开启写权限
  • setfaclchmod 777:在文件系统上严格控制读写权限
  1. 文件系统开启,配置文件严格控制
  • chmod 777 /dir:在文件系统上全面开启写权限
  • read only = yes
  • write list = 用户,@组:Samba配置文件上严格控制权限

服务管理

  1. 启动、停止、重新启动和重新加载Samba服务
  • service smb start: 开启Smaba服务
  • service smb stop:停止Samba服务
  • service smb restart:重启Samba服务
  • service smb reload:重新加载Smaba配置文件
  1. 开机自动启动samba服务
  • chkconfig --level 2345 smb on|off
  • chkconfig smb on:2345级别Samba服务开机自启动
  • chkconfig smb off:Samba服务开机不启动
# 查看Samba是否开机自启动
[root@dayuanshuai samba]#  chkconfig --list smb
smb             0:关闭  1:关闭  2:关闭  3:关闭  4:关闭  5:关闭  6:关闭

# 将3、4级别的smb服务设置为开机自启动
[root@dayuanshuai samba]# chkconfig --level 34 smb on

# 查看开机自启情况
[root@dayuanshuai samba]# chkconfig --list smb
smb             0:关闭  1:关闭  2:关闭  3:启用  4:启用  5:关闭  6:关闭

[root@dayuanshuai samba]# chkconfig smb off
[root@dayuanshuai samba]# chkconfig --list smb
smb             0:关闭  1:关闭  2:关闭  3:关闭  4:关闭  5:关闭  6:关闭

客户端登录方式

Linux 端:

  • smbclient -U 用户名 -L //服务器 IP #查看服务器共享
  • smbclient -U 用户名 //服务器 ip/共享名 #登录服务器共享
# 查看某个命令输入那个软件包
[root@dayuanshuai ~]# rpm -qf `which smbd`
samba-3.6.23-53.el6_10.x86_64

# 查看Samba的安装包
[root@IDYS_01 /]# yum list | grep "^samba-.*"
samba-client.x86_64                        3.6.23-53.el6_10              updates
samba-common.i686                          3.6.23-53.el6_10              updates
samba-common.x86_64                        3.6.23-53.el6_10              updates
samba-doc.x86_64                           3.6.23-53.el6_10              updates
samba-domainjoin-gui.x86_64                3.6.23-53.el6_10              updates
samba-glusterfs.x86_64                     3.6.23-53.el6_10              updates
samba-swat.x86_64                          3.6.23-53.el6_10              updates
samba-winbind.x86_64                       3.6.23-53.el6_10              updates
samba-winbind-clients.i686                 3.6.23-53.el6_10              updates
samba-winbind-clients.x86_64               3.6.23-53.el6_10              updates
samba-winbind-devel.i686                   3.6.23-53.el6_10              updates

# 安装Samba客户端
[root@IDYS_01 /]# yum -y install samba-client

# 查看服务器共享信息
[root@IDYS_01 /]# smbclient -U test2 -L //192.168.200.135
Enter test2's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-53.el6_10]

        Sharename       Type      Comment
        ---------       ----      -------
        IPC$            IPC       IPC Service (Samba Server Version 3.6.23-53.el6_10)
        test2           Disk      Home Directories
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-53.el6_10]

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

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


# 登录到Samba服务器端
[root@IDYS_01 /]# smbclient -U test2 //192.168.200.135/test2
Enter test2's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-53.el6_10]
smb: \> ls

Window 端

  • \\服务器 ip\共享名:登录Samba服务端
  • net use * /del:清空登录缓存

浏览也可以登录Samba服务器端

  • \\IP地址\登录的位置:如\\192.168.200.135\test2
  1. 输入IP地址加登录的位置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R9TiQlPR-1588466446909)(.\images\9.浏览器输入地址.png)]

  1. 登录成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FJjRiphN-1588466446910)(.\images\10.成功.png)]

Samba实验的部署与配置

注意:因为SELinux对Samba服务具有约束作用,所以实验前应该先把防火墙和SELinux关闭了

  1. 服务器端安装 samba
yum -y install samba
  1. 确认客户端和相关命令软件包是否安装(默认是安装的)
# 第一种方法
rpm -q samba-client
rpm -q samba-common

# 第二种方法
rpm -qa | grep samba
  1. 创建共享区域
    备份主配置文件
    创建独立的共享区间(仿照模板编写)
cd /etc/samba/
cp smb.conf smb.conf.bak

# 编写配置文件在末尾加上你的配置
vim /etc/samba/smb.conf
.......
# 下面为我加上去的配置文件
[samba_test]
        comment = idys test
        path = /mnt/samba_test
        public = yes
        browseable = yes
        writable = yes

# 添加用户
useradd -s /sbin/nologin peiqi

# 添加samba用户并且设置密码
pdbedit -a peiqi
new password:
retype new password:
Unix username:        peiqi

# 进入到 /mnt目录下,创建/samba_test目录,并且授予其权限
[root@dayuanshuai ~]# cd /mnt
[root@dayuanshuai mnt]# ls -ld samba_test/
drwxr-xr-x. 2 root root 4096 4月  27 21:09 samba_test/
[root@dayuanshuai mnt]# chmod o+w samba_test/
[root@dayuanshuai mnt]# ls -ld samba_test/
drwxr-xrwx. 2 root root 4096 4月  27 21:09 samba_test/
  1. 启动 smb 服务并查看默认共享区域
  • service smb start
  • smbclient -U 用户名 -L smbserver_IP
# 因为我已经开启了smaba服务,所以直接加载服务即刻
service smb reload
重新载入 smb.conf 文件:                                   [确定]

# 转到客户端进行登录,查看自己可以访问的目录
[root@IDYS_01 samba_test]# smbclient -U test2 -L 192.168.200.135
Enter test2's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-53.el6_10]

        Sharename       Type      Comment
        ---------       ----      -------
        IPC$            IPC       IPC Service (Samba Server Version 3.6.23-53.el6_10)
        samba_test      Disk      idys test
        test2           Disk      Home Directories


[root@IDYS_01 samba_test]# smbclient -U peiqi -L 192.168.200.135       
Enter peiqi's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-53.el6_10]

        Sharename       Type      Comment
        ---------       ----      -------
        IPC$            IPC       IPC Service (Samba Server Version 3.6.23-53.el6_10)
        samba_test      Disk      idys test
        peiqi           Disk      Home Directories
# 从上面可以知道 两个用户对于 samba_test都是可见的

# 以peiqi的用户登录samba服务器,并且上传peiqi.txt
[root@IDYS_01 samba_test]# smbclient -U peiqi //192.168.200.135/samba_test   
Enter peiqi's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-53.el6_10]
smb: \> put peiqi.txt

# 以 test的身份上传test2.txt文件,并且删除了peiqi.txt,发现test2可以删除peiqi.txt文件
[root@IDYS_01 samba_test]# smbclient -U test2 //192.168.200.135/samba_test
Enter test2's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-53.el6_10]
smb: \> put test2.txt 
putting file test2.txt as \test2.txt (2.9 kb/s) (average 2.9 kb/s)
smb: \> rm peiqi.txt 
smb: \> ls
  .                                   D        0  Mon Apr 27 21:22:34 2020
  ..                                  D        0  Mon Apr 27 21:09:52 2020
  test2.txt                           A        6  Mon Apr 27 21:22:26 2020

                53776 blocks of size 524288. 46270 blocks available

# 以peiqi用户登录samba服务器,发现自己上传的文件自己可以覆盖,而test2上传的文件自己不能覆盖
[root@IDYS_01 samba_test]# smbclient -U peiqi //192.168.200.135/samba_test
Enter peiqi's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-53.el6_10]
smb: \> ls
  .                                   D        0  Mon Apr 27 21:22:34 2020
  ..                                  D        0  Mon Apr 27 21:09:52 2020
  test2.txt                           A        6  Mon Apr 27 21:22:26 2020

                53776 blocks of size 524288. 46270 blocks available
smb: \> put test2.txt 
NT_STATUS_ACCESS_DENIED opening remote file \test2.txt
smb: \> put peiqi.txt 
putting file peiqi.txt as \peiqi.txt (2.9 kb/s) (average 2.9 kb/s)
smb: \> put peiqi.txt 
putting file peiqi.txt as \peiqi.txt (2.9 kb/s) (average 2.9 kb/s)

# 在服务器端对共享目录加入sbit权限
[root@dayuanshuai mnt]# chmod o+t samba_test/
[root@dayuanshuai mnt]# ls -ld samba_test/
drwxr-xrwt. 2 root root 4096 4月  27 21:26 samba_test/

# 这时再以test2用户登录共享目录samba_test,此时就无法删除peiqi.txt文件了
[root@IDYS_01 samba_test]# smbclient -U test2 //192.168.200.135/samba_test
Enter test2's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-53.el6_10]
smb: \> rm peiqi.txt 
NT_STATUS_ACCESS_DENIED deleting remote file \peiqi.txt
NT_STATUS_ACCESS_DENIED listing \peiqi.txt
smb: \> ls
  .                                   D        0  Mon Apr 27 21:26:06 2020
  ..                                  D        0  Mon Apr 27 21:09:52 2020
  test2.txt                           A        6  Mon Apr 27 21:22:26 2020
  peiqi.txt                           A        6  Mon Apr 27 21:26:12 2020


本地验证(登录、上传、下载)

  1. 修改配置文件(添加自定义共享)
[自定义]
comment = the share my_samba
path = /mnt/my_samba
public = yes
browseable = yes
writable = yes
  1. 创建共享目录并给定相应权限
mkdir /mnt/my_samba
chmod 777 /mnt/my_samba   #最好使用 ACL权限
  1. 测试配置文件并重启服务
# 测试samba配置文件是否有语法错误
testparm

# 重启服务
service smb restart
  1. 首先,创建 Linux 用户
useradd -s /sbin/nologin test2
  1. 转换为 samba 用户
pdbedit -a test2
  1. 客户端查看共享文件夹并登录测试
smbcient -U test2 –L IP 地址
smbclient –U test2 //IP 地址/共享名

注:由于未设置上传文件的默认权限,指定用户上传的文件只有自己能修改和覆盖


访问控制 - 通过配置限制

  • valid users: 仅允许部分用户访问共享区域

注:前提条件是指定目录权限给到最大,通过修改配置文件来实现实验结果


部分用户登录 samba 服务器

  • 修改/etc/samba/smb.conf中自定义的共享区域
  • 添加:设置合法用户列表
  • valid users = 用户,@组(多个逗号分隔)
# 在服务器端配置samba配置文件:smb.conf,设置valid user,也就是只允许peiqi用户访问
[root@dayuanshuai mnt]# vim /etc/samba/smb.conf
[samba_test]
        comment = idys test
        path = /mnt/samba_test
        public = yes
        browseable = yes
        writable = yes
        valid users = peiqi

# 回到客户端,用test2进行登录,发现无法登录
[root@IDYS_01 samba_test]# smbclient -U test2 //192.168.200.135/samba_test
Enter test2's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-53.el6_10]
tree connect failed: NT_STATUS_ACCESS_DENIED

# 这时再用peiqi用户登录,可以登录
[root@IDYS_01 samba_test]# smbclient -U peiqi //192.168.200.135/samba_test 
Enter peiqi's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-53.el6_10]
smb: \> exit

部分用户对共享区域有写权限

  • 修改/etc/samba/smb.conf 中自定义的共享区域
  • 添加:开启只读,设置可写列表
  • read only = yes
  • write list = peiqi
# 修改samba的配置文件,将服务器端设置为只读,同时为test2用户设置可写
[root@dayuanshuai mnt]# vim /etc/samba/smb.conf

[samba_test]
        comment = idys test
        path = /mnt/samba_test
        public = yes
        browseable = yes
        writable = yes
        read only = yes
        write list = test2

# 在客户端登入peiqi用户,当上传文件时,其被服务器拒绝,因为她没有写权限
[root@IDYS_01 samba_test]# smbclient -U peiqi //192.168.200.135/samba_test
Enter peiqi's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-53.el6_10]
smb: \> put write.txt 
NT_STATUS_ACCESS_DENIED opening remote file \write.txt

# 此时再次以test2用户登录,其上传文件成功!
[root@IDYS_01 samba_test]# smbclient -U test2 //192.168.200.135/samba_test
Enter test2's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-53.el6_10]
smb: \> put write.txt 
putting file write.txt as \write.txt (0.0 kb/s) (average 0.0 kb/s)

设置上传文件的默认权限

  • create mask 文件的默认权限
  • directory mask 目录的默认权限
  • 修改配置文件自定义的共享区域
  • 添加:
    • create mask = 666
    • directory mask = 777
# 在共享目录下查看上传的文件具有的权限为744
[root@dayuanshuai samba_test]# ls -l
总用量 8
-rwxr--r--. 1 peiqi peiqi 6 4月  27 21:26 peiqi.txt
-rwxr--r--. 1 test2 test2 6 4月  27 21:22 test2.txt
-rwxr--r--. 1 test2 test2 0 4月  27 22:35 write.txt

# 编辑samba服务的配置文件,将上传目录权限设置为644
[root@dayuanshuai mnt]# vim /etc/samba/smb.conf
[samba_test]
        comment = idys test
        path = /mnt/samba_test
        public = yes
        browseable = yes
        writable = yes
        read only = yes
        write list = test2
        create mask = 644

# 重新加载配置文件
[root@dayuanshuai samba_test]# service smb reload
重新载入 smb.conf 文件:                                   [确定]

# 客户端以 test2的身份登录服务器端,然后上传文件write.txt
[root@IDYS_01 samba_test]# smbclient -U test2 //192.168.200.135/samba_test
Enter test2's password: 
smb: \> put write.txt 
putting file write.txt as \write.txt (0.0 kb/s) (average 0.0 kb/s)

# 服务器端再次查看文件权限,发现其刚刚客户端上传的文件权限变为644
[root@dayuanshuai samba_test]# ls -l write.txt 
-rw-r--r--. 1 test2 test2 0 4月  27 22:43 write.txt

用户别名(虚拟用户)

  1. 添加别名(/etc/samba/smbusers)
  • 添加:peiqi = pq
# 向 /etc/samba/smbusers 添加别名
[root@dayuanshuai ~]# cd /etc/samba/
[root@dayuanshuai samba]# vim smbusers 
....
peiqi = pq
  1. 启用别名(修改主配置文件)
  • vim /etc/samba/smb.conf
  • 添加:
    • username map = /etc/samba/smbusers
# 在smb.conf的[global]下添加如下配置
[root@dayuanshuai samba]# vim smb.conf   
[global]       
        username map = /etc/samba/smbusers

# 重新加载配置文件
[root@dayuanshuai samba]# service smb reload
重新载入 smb.conf 文件:                                   [确定]
  1. 测试
  • smbclient -U 别名 //服务器 ip/共享名
# 此时再登入用户别名 pq,已经可以登入
[root@IDYS_01 ~]# smbclient -U pq //192.168.200.135/samba_test
Enter pq's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-53.el6_10]
smb: \> 

# 选择没有被设置别名的不存在用户,发现其无法登录
[root@IDYS_01 ~]# smbclient -U te //192.168.200.135/samba_test
Enter te's password: 
session setup failed: NT_STATUS_LOGON_FAILURE

映射网络驱动器(挂载)

  1. Linux 下:
  • 临时挂载: mount -t cifs -o username=xxx,password=xxx //服务器 ip/服务器共享 /本地挂载目录
# 首先查看 samba_test 目录下没有文件
[root@IDYS_01 tmp]# cd samba_test/
[root@IDYS_01 samba_test]# ls

# 挂载samba服务端文件系统
[root@IDYS_01 tmp]# mount -t cifs -o username=pq,password=123456 //192.168.200.135/samba_test /tmp/samba_test/

# 再次查看这个目录,发现已经有文件了,说明挂载成功
[root@IDYS_01 samba_test]# ls
peiqi.txt  test2.txt  write.txt
  • 永久挂载:/etc/fstab
    • //服务器 ip/服务器共享 /本地挂载目录 cifs defaults,username=xxx,password=xxx 0 0
# 卸载该该目录
[root@IDYS_01 tmp]# umount samba_test/

# 编辑/etc/fastab文件
[root@IDYS_01 tmp]# vim /etc/fstab
//192.168.200.135/samba_test /tmp/samba_test cifs defaults,username=pq,password=123456 0 0

# 自动挂载
[root@IDYS_01 tmp]# mount -a

# 再次查看目录,挂载成功
[root@IDYS_01 tmp]# cd /tmp/samba_test/
[root@IDYS_01 samba_test]# ls
peiqi.txt  test2.txt  write.txt

# 查看分区空间使用情况
[root@IDYS_01 tmp]# df -h
//192.168.200.135/samba_test
                       27G  2.4G   23G  10% /tmp/samba_test

# 客户端创建文件
[root@IDYS_01 samba_test]# touch a
[root@IDYS_01 samba_test]# ls
a  peiqi.txt  test2.txt  write.txt

# 服务器端删除
[root@dayuanshuai samba_test]# rm a 
rm:是否删除普通空文件 "a"?y

# 客户端再次查看,发现刚才创建的文件已经消失了
[root@IDYS_01 samba_test]# ls
peiqi.txt  test2.txt  write.txt

图形化 web 管理界面

  • secure CRT里面安装ALT+P进入SFTP,传输samba-swat.zip安装包
sftp> put d:\software\samba-swat.zip
  • /usr/local创建目录下创建samba目录,并将samba-swat.zip复制到该目录下
mkdir /usr/local/samba
cp /root/samba-swat.zip /usr/local/samba/
  • 为了解压.zip文件,安装``unzip`安装包
yum -y install unzip
unzip samba-swat.zip
  • 查看软件包的类型
[root@dayuanshuai samba-swat]# ls
libsmbclient-3.6.23-36.el6_8.x86_64.rpm  samba-swat-3.6.23-36.el6_8.x86_64.rpm
samba-3.6.23-36.el6_8.x86_64.rpm         samba-winbind-3.6.23-36.el6_8.x86_64.rpm
samba-client-3.6.23-36.el6_8.x86_64.rpm  samba-winbind-clients-3.6.23-36.el6_8.x86_64.rpm
samba-common-3.6.23-36.el6_8.x86_64.rpm  xinetd-2.3.14-40.el6.x86_64.rpm

el6软件包适用于CentOS6

  • 安装升级该目录下所有软件包
yum -y install *
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest
# 此时发生报错

# 于是我在后面加上了 --skip-broken
[root@dayuanshuai samba-swat]# yum -y install * --skip-broken
因为依赖关系问题而跳过的软件包:
    libsmbclient-3.6.23-36.el6_8.x86_64 来自 /libsmbclient-3.6.23-36.el6_8.x86_64
    samba-client-3.6.23-36.el6_8.x86_64 来自 /samba-client-3.6.23-36.el6_8.x86_64
    samba-swat-3.6.23-36.el6_8.x86_64 来自 /samba-swat-3.6.23-36.el6_8.x86_64
# 还是报错说上面三个软件没有安装

# 查看samba安装了那些软件包
[root@dayuanshuai samba-swat]# rpm -qa | grep samba   
samba-winbind-3.6.23-53.el6_10.x86_64
samba-common-3.6.23-53.el6_10.x86_64
samba-winbind-clients-3.6.23-53.el6_10.x86_64
samba-3.6.23-53.el6_10.x86_64

# 查看以libsmb开头的软件包是否安装
[root@dayuanshuai samba-swat]# rpm -qa | grep libsmb

# 依次安装这三个软件包libsmbclient samba-client samba-swat
[root@dayuanshuai samba-swat]# yum -y install libsmbclient samba-client
[root@dayuanshuai samba-swat]# yum -y install samba-swat

# 再次查看软件包安装情况
[root@dayuanshuai samba-swat]# rpm -qa | grep samba
samba-winbind-3.6.23-53.el6_10.x86_64
samba-common-3.6.23-53.el6_10.x86_64
samba-winbind-clients-3.6.23-53.el6_10.x86_64
samba-swat-3.6.23-53.el6_10.x86_64
samba-client-3.6.23-53.el6_10.x86_64
samba-3.6.23-53.el6_10.x86_64

[root@dayuanshuai samba-swat]# rpm -qa | grep libsmb
libsmbclient-3.6.23-53.el6_10.x86_64
# 发现上面缺失没有安装的软件包均已经安装。
  • 修改/etc/xinetd.d/swat
    • 修改/etc/xinetd.d/swat
    • 添加: only_from = 登录来源 IP
    • disable = no
[root@dayuanshuai samba-swat]# vim /etc/xinetd.d/swat
service swat
{
        port            = 901
        socket_type     = stream
        wait            = no
        only_from       = 192.168.200.1
        user            = root
        server          = /usr/sbin/swat
        log_on_failure  += USERID
        disable         = no
}
  • 重启 xinetd服务
    • service xinetd restart
# 查看xinetd的运行状态
[root@dayuanshuai samba-swat]# service xinetd status
xinetd 已停

# 开启xinetd 服务
[root@dayuanshuai samba-swat]# service xinetd start
正在启动 xinetd:                                          [确定]

# 查看xinetd开机自启动情况
[root@dayuanshuai samba-swat]# chkconfig --list xinetd
xinetd          0:关闭  1:关闭  2:关闭  3:启用  4:启用  5:启用  6:关闭

# 查看 swat的开机自启动情况
[root@dayuanshuai samba-swat]# chkconfig --list | grep swat
        swat:           启用
  • 测试
    • 浏览器:IP:901 登录时注意端口号
# 查看901端口是否开启
[root@dayuanshuai samba-swat]# netstat -antp | grep 901
tcp        0      0 :::901                      :::*                        LISTEN      9955/xinetd
  • 打开浏览器:输入http://192.168.200.135:901/

  • 这时会提示输入账户名密码,你直接输入root的用户名和密码即可



写在最后的话:

  • 无论每个知识点的难易程度如何,我都会尽力将它描绘得足够细致
  • 欢迎关注我的CSDN博客,IDYS’BLOG
  • 持续更新内容
    linux基础 | 数据通信(路由交换,WLAN) | Python基础 | 云计算
  • 如果你有什么疑问,或者是难题。欢迎评论或者私信我。你若留言,我必回复!
  • 虽然我现在还很渺小,但我会做好每一篇内容。谢谢关注!

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章