samba客户端的使用与服务端的搭建

samba

samba是SMB文件共享协议的应用软件,可以让Linux系统和Windows系统之间相互共享资源。

在Linux系统中使用smbd服务器提供提供共享资源;使用smbclient去访问其他smbd服务器所提供的共享资源。

在Windows中有SMB/CIFS服务器和客户端。

SMB协议

SMB(Server Message Block)协议是一种在局域网上共享资源的协议,它可以为局域网中的Windows系统、Linux系统或是IOS系统提供文件系统、打印服务或其他一些信息。

SMB的工作原理基于NetBIOS(Network Basic Input/Output System)协议与SMB这两种协议。

  • NetBIOS:用于发现局域网内主机名;使用下列端口:UDP/137(NetBIOS 名称服务)、UDP/138(NetBIOS 数据报服务)、TCP/139(NetBIOS 会话服务);
  • SMB:用于文件传输;使用下列端口:TCP/139、TCP/445。

SMB连接过程

  1. 首先客户端发送一个 SMB Negotiate Protocol Request 请求数据报,并列出它所支持的所有SMB协议版本。

  2. 服务器收到请求信息后回应 Negotiate Protocol Response,并列出希望使用的协议版本;如果没有可使用的协议版本则返回0XFFFFH,结束通信。

  3. 协议确定后,客户端进程向服务器发起一个用户或共享的认证,这个过程是通过发送 Session Setup Request 请求数据报实现的;客户端发送一对用户名和密码或一个简单密码到服务器。

  4. 然后服务器通过发送一个 Session Setup Response 应答数据报来允许或拒绝本次连接。

  5. 当客户端和服务器完成认证之后,它会发送一个 Tree Connect Request 数据报并列出它想访问网络资源的名称

  6. 之后服务器会发送一个 Tree Connect Response 应答数据报以表示此次连接是否被接受或拒绝。

  7. 连接到相应资源后,SMB客户端就能够通过open SMB打开一个文件,通过read SMB读取文件,通过write SMB写入文件,通过close SMB关闭文件。

samba主要有两个进程

  1. smbd进程:用于控制共享目录、权限和文件传输。
  2. nmbd进程:用于名称解析,基于NEtBIOS协议获得计算机名称,解析为相应的IP地址。

Linux下搭建samba服务器实现文件共享

samba安装

sudo apt-get install samba

配置文件smb.conf介绍

vim /etc/samba/smb.conf

# 全局选项,为局部选项提供默认参数
[global]                            // 全局选项
    #...
# 局部选项,可以自己设置参数,覆盖全局选项
[homes]                             // 共享命令
    comment = Home Directories      // 描述
    browseable = no                 // 隐藏共享名称
    read only = yes                 // 只读的
    create mask = 0700              // 在共享目录中创建文件或目录权限
    directory mask = 0700           // 共享目录权限
    valid users = %S                // 有效用户

[printers]                          // 共享名称
    comment = All Printers          // 描述
    browseable = no                 // 隐藏共享目录
    path = /var/spool/samba         // 共享目录路径
    printable = yes                 // 可打印
    guest ok = no                   // 不可匿名访问,需要输入密码
    read only = yes                 // 只读的
    create mask = 0700              // 创建文件的权限

共享目录方式一

创建共享目录

mkdir /home/student/share

创建samba账户

sudo smbpasswd -a student

修改samba配置文件

sudo vim /etc/samba/smb.conf

# 在文件最后添加                   
[test]                              # 共享名称
    comment = This is a share dir   # 描述
    path = /home/student/share      # 共享的目录
    available = yes                 # 共享目录可用
    browseable = yes                # 共享目录可见
    valid users = student           # 可访问的samba用户
    read only = no                  # 可读写的,等价于 writable = yes
    # writable = yes                # 可读写的
    guest ok = no                   # 不可匿名访问,需要输入密码,等价于 public = no
    # public = yes                  # 不可匿名访问
    create mask = 0700              # 创建文件的权限,还受掩码影响
    directory = 0700                # 创建目录的权限
    write list = student,@student   # 允许某些用户可写,其他用户只读
    hosts deny = 192.168.0          # 拒绝某个网段
    hosts allow = 192.168.xxx.xxx   # 允许某个IP地址
    hosts deny = all                # 拒绝所有
    hosts allow = 192.168.0. EXCEPT 192.168.xxx.xxx     // 允许某个网段,但拒绝某个IP

重启smbd服务

每次修改完配置文件都需要重启smbd服务

sudo systemctl restart smbd.service

共享目录方式二

  1. 在桌面上创建一个文件加,例如 share

  2. 选择本地网络共享,选择共享此目录
    在这里插入图片描述

  3. 选择创建共享,完成此目录的共享
    在这里插入图片描述

这样共享的配置文件目录在/var/lib/samba/usershares/,每个共享目录的配置文件都以目录名命名

Windows下搭建SMB/CIFS服务器实现文件共享

Windows 10 Samba文件共享的设置方法

访问samba 共享的目录

Linux下访问共享的目录

  1. 通过smbclient来访问
smbclient //192.168.xxx.xxx/test -U student
  1. 可以通过 mount 命令进行挂载
sudo mount -t cifs -o username=student,password=123456 //192.168.xxx.xxx/test /mmt/test

Windows下访问共享的目录

  1. 输入IP地址和共享目录名
    在这里插入图片描述

  2. 然后再输入用户名和密码
    在这里插入图片描述

samba错误集合

  1. tree connect failed:NT_STATUS_BAD_NETWORK_NAME

    • 原因:共享名输入的不对或共享路径不存在
  2. NT_STATUS_ACCESS_DENIED making remote directory \temp

    • 原因:SELINUX没有关
    • 解决方法:SELINUX=disabled
  3. NT_STATUS_OBJECT_NAME_COLLISION making remote directory \temp

    • 原因:因为目录temp已存在
  4. protocol negotiation failed:NT_STATUS_INVALID_NETWORK_RESPONSE

    • 原因:hosts 网段不允许
  5. tree connect failed:NT_STATUS_ACCESS_DENIED

    • 原因:不允许该用户访问
    • 解决办法:在配置文件中添加该用户
  6. Connection to 192.168.xxx.xxx failed (Error NT_STATUS_IO_TIMEOUT)

    • 原因:可能是没网、或者防火墙做了限制
  7. session setup failed: NT_STATUS_LOGON_FAILURE

    • 原因:密码错误

smbpasswd命令

smbpasswd 用于管理samba用户及其密码。

参数 | 说明

参数说明
-h使用说明文档
-a添加samba用户
-x删除用户
-d禁用用户
-e解除禁用
-r 指定远程机器的用户
-U 指定用户名

实例

sudo smbpasswd -a user1     // 添加用户 user1
sudo smbpasswd -d user1     // 禁用用户
sudo smbpasswd -e user1     // 解除禁用
sudo smbpasswd -r 192.168.xxx.xx -U user2       // 修改远端用户 user2 的密码

smbclient命令

smbclient 用于交互式访问samba服务器的共享资源。

常用参数

参数说明
-? , --help使用说明文档
-V , --version版本
-U , --user 指定用户名
-r 指定密码
-p , --port 指定服务器端TCP连接端口
-I , --ip-addr <IP地址>指定服务器的IP地址
-E , --stderr将信息写入到标准错误(stderr),默认是标准输出(stdou)
-L , --list 列出服务器所共享的所有资源
-T<tar选项> <备份文件> <要备份的文件>备份服务端共享的文件,并打包成tar格式的文件
-N不用询问密码
-w<工作群组>指定工作群组名称
-b设置传输过程中缓冲区大小
-c <命令>执行指定命令后退出连接

实例

smbclient //192.168.xxx.xxx/share -U student -r 123456          // 指定用户名和密码连接samba服务器
smbclient //192.168.xxx.xxx/share -U student%123456             // 也可以这样指定用户名和密码
smbclient -c "ls" //192.168.xxx.xxx/share -U student -r 123456  // 执行一条命令,退出
smbclient -L 192.168.xxx.xxx -U student%8                       // 列出服务端所有共享的资源

登录samba服务器后可执行的指令

指令说明
help , ? <命令>查看指定命令的作用和用法,不指定命令就列出所有命令
cd切换目录
ls列出所有文件目录
dir列出所有文件目录
del 删除当前文件下符合mask的文件
rd删除目录
rmdir删除空文件
rename重命名
rm 删除当前目录下所有匹配mask的文件
tar压缩文件
stat 查看文件信息
quit , exit退出
showconnect显示当前连接
put [remote file]发送文件到服务器
mput 发送当前目录下所有匹配msak的文件到服务器
get从服务器得到文件
mget 获取所有匹配mask的文件
du列出目录信息和磁盘信息
more查看文件内容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值