当前位置: 首页 > news >正文

linux网络服务+linux数据库3

1.SAMBA

1.1 SAMBA概述

        Samba 是一款开源的软件套件,它的主要功能是让 Linux、Unix 等系统能与 Windows 系统实现跨平台的文件和打印机共享服务,使得不同操作系统的用户可以在局域网内方便地共享资源。

工作原理

        Samba 主要是通过实现 SMB(Server Message Block,服务器消息块)协议(后来也支持 CIFS,Common Internet File System,通用互联网文件系统,是 SMB 的改进版本)来实现跨平台的资源共享。

  • 协议转换:Windows 系统使用 SMB/CIFS 协议进行文件和打印机共享。Samba 运行在 Linux、Unix 系统上,能够将 SMB/CIFS 协议的请求转换为系统可以理解的本地文件系统操作,反之亦然。当 Windows 用户向 Samba 服务器发送一个读取文件的请求时,Samba 会将该 SMB 请求解析,然后在 Linux 系统的文件系统中执行相应的读取操作,再将结果通过 SMB 协议返回给 Windows 用户。
  • 用户认证和会话管理:Samba 通过配置文件(如smb.conf)来管理用户认证和会话。当用户尝试访问共享资源时,Samba 会根据配置的认证方式对用户进行身份验证。验证通过后,会建立一个会话,在会话期间,Samba 会跟踪用户的操作权限,并根据权限设置来处理用户对共享资源的访问请求。

核心组件

  • smbd:是 Samba 的核心守护进程之一,主要负责处理客户端的 SMB/CIFS 连接请求,管理用户会话,以及对共享资源的访问控制。它监听在 139 和 445 端口(TCP 协议),处理文件和打印机共享相关的请求。
  • nmbd:主要负责处理 NetBIOS 名称服务相关的请求,用于在局域网内解析计算机的 NetBIOS 名称到 IP 地址,类似于 DNS 对域名的解析。它监听在 137 和 138 端口(UDP 协议),帮助客户端通过计算机名称来找到对应的 Samba 服务器。
  • smb.conf:是 Samba 的主配置文件,用于定义 Samba 服务器的各种参数,如共享资源的设置(共享名、路径、访问权限等)、用户认证方式、日志配置等。通过修改这个文件,可以灵活地配置 Samba 服务器的功能和行为。

        之前的技术不行就采用了这种方式。反观现在,像我们生活中,连wifi都可以连接打印机了,方便很多。

FTP(文件传输协议)

  • 优点
    • 就是专门用来传文件的,不管你是 Windows 电脑、Linux 服务器还是苹果电脑,都能互相传文件,属于 “跨平台传文件小能手”。
    • 是应用层的协议,在网络里地位比较高,专门负责文件传输这件事。
  • 缺点
    • 只能干 “传文件” 这一件事,不能把服务器的文件系统直接挂到自己电脑上(像本地硬盘一样用)。
    • 想改服务器上的文件,不能直接改,得先下载到自己电脑,改完再传上去,很麻烦。

Samba

  • 特性
    • 用的是smb/cifs协议,也是跨平台的,Windows、Linux 这些系统之间都能互通。
    • 厉害的是,能把服务器的文件系统 “挂载” 到自己电脑上,就跟用本地文件夹一样方便。
    • 还能直接在自己电脑上修改服务器里的文件,不用下载再上传,特别顺手。

文件挂载:

1.2 smb协议和cifs协议

起源与发展

  • SMB 协议:由 IBM 在 1983 年开发,最初用于在局域网内实现文件和打印机共享,让不同计算机之间能够方便地交换数据 。后来,微软对 SMB 进行了一系列的改进和扩展,使其在 Windows 系统中得到广泛应用。
  • CIFS 协议:随着互联网的发展,微软在 SMB 的基础上进行了进一步的标准化和优化,在 1996 年推出了 CIFS 协议,目的是让 SMB 协议能够更好地适应互联网环境,实现跨平台的文件共享。从本质上来说,CIFS 是 SMB 的一个增强和标准化版本,它对 SMB 协议进行了一些改进,以提高在广域网中的性能、安全性和兼容性。

关系

  • CIFS 是 SMB 的延伸:CIFS 继承了 SMB 的基本功能,如文件和打印机共享、用户认证、权限管理等。同时,CIFS 针对互联网环境的特点,在协议的结构、数据传输方式等方面进行了优化,以便更高效地在不同操作系统和网络环境中使用。
  • 技术同源:两者在技术原理上是相通的,都基于客户端 - 服务器模型。客户端向服务器发送请求,服务器处理请求并返回相应的数据。例如,当 Windows 用户在 “网络邻居” 中访问共享文件夹时,就是通过 SMB 或 CIFS 协议与提供共享的服务器进行通信,服务器接收到读取文件的请求后,会对用户进行身份验证,验证通过后,将文件数据返回给客户端。

区别

  • 标准化程度:SMB 在发展过程中,不同厂商的实现可能存在一些差异。而 CIFS 是经过标准化组织(如 IETF,互联网工程任务组)标准化的协议,有更明确的规范和标准,这使得 CIFS 在跨平台和跨厂商的兼容性方面表现更好。
  • 应用场景侧重:SMB 最初主要应用于局域网环境,而 CIFS 由于其标准化和优化,更适合在互联网环境中使用,尤其是在不同操作系统之间进行文件共享时,CIFS 能更好地适应复杂的网络环境。
  • 安全性:CIFS 在安全性方面相对 SMB 有一定的提升。CIFS 支持更强大的用户认证和授权机制,以及数据加密传输,能更好地保护共享资源的安全。例如,CIFS 支持 NTLM(NT LAN Manager)和 Kerberos 等更高级的认证方式,而早期的 SMB 在认证方面相对简单。

实际应用

        如今,SMB 和 CIFS 这两个术语在很多情况下会被混用。在 Windows 网络中,SMB 协议家族(包括 SMB、CIFS)用于实现文件共享、打印机共享等功能;在 Linux 系统中,Samba 软件通过实现 SMB/CIFS 协议,使得 Linux 系统能够与 Windows 系统进行文件和打印机共享 。比如在企业办公环境中,使用 Windows 系统的员工可以通过 SMB/CIFS 协议访问 Linux 服务器上通过 Samba 共享的文件资源,反之亦然。

ftp和smb

1.3 软件信息和登录验证模式

1. share 匿名验证

就像 “公共免费 WiFi”:

  • 不需要输入用户名、密码,直接就能访问 Samba 共享的资源(比如文件夹、打印机)。
  • 适合完全公开的资源(比如公司全员可看的通知文档、公共软件安装包),谁都能看,但一般只能读,不能改(权限低)。

2. user 本地用户验证(Samba 默认)

就像 “公司门禁卡”:

  • 必须提供系统里真实存在的用户名和密码(比如你 Linux 系统里的账号 user1,密码 123456),才能访问共享资源。
  • 验证通过后,权限由 Samba 配置和系统用户权限共同决定(能读能写,甚至能改文件)。
  • 是最常用的 “普通安全级别”,适合需要区分用户权限的场景(比如部门共享文件夹,不同人有不同读写权限)。

拓展:tdbsam 验证(基于数据库的用户管理)

就像 “把门禁卡信息存在一个‘电子台账’里”:

  • Samba 会维护一个专门的数据库文件passdb.tdb),里面存着 “哪些系统用户能当 Samba 用户”。
  • 用 pdbedit 命令来管理这个数据库:
    • pdbedit -a 用户名:把系统里已有的用户(比如 user2)“登记” 到 Samba 数据库里,设置 Samba 密码(可以和系统密码不同)。
    • pdbedit -x 用户名:从数据库里 “删掉” 某个 Samba 用户(但系统用户还在)。
    • pdbedit -L:查看数据库里所有能访问 Samba 的用户列表。
  • 好处是:不用暴露系统密码,还能统一管理 Samba 用户(比如批量添加 / 删除)。

3. 别名用户访问(虚拟用户)

就像 “用‘昵称’代替真实名字进门”:

  • 客户端用 ** 不存在于系统的 “虚拟用户名”** 登录,但 Samba 会把它 “映射” 到一个真实系统用户(比如虚拟用户 ftpuser 映射到系统用户 nobody)。
  • 适合对外提供共享(比如给合作公司一个临时账号),既不用创建真实系统用户,又能控制权限(虚拟用户只能访问指定共享文件夹)。

简单总结:

  • 想完全公开 → 用 share
  • 想区分内部用户权限 → 用 user 或 tdbsam
  • 想临时 / 虚拟账号 → 用 “别名用户(虚拟用户)”。

1.4 本地用户登录验证演示

        

1.5 配置参数讲解

Samba 的主配置文件是 /etc/samba/smb.conf,里面有众多参数,用于控制 Samba 服务器的各种行为和功能。以下是一些常见且重要的 Samba 参数讲解:

全局参数

基本设置相关
  • workgroup:指定 Samba 服务器所在的工作组名称,和 Windows 系统中的工作组概念类似。例如 workgroup = WORKGROUP,在局域网中,处于相同工作组的计算机更容易互相发现和访问共享资源。
  • server string:用于设置 Samba 服务器的描述信息,在 Windows 的网络邻居中显示,方便用户识别该服务器的用途等。比如 server string = My Samba Server,用户在查看网络中的共享资源时,就能看到这个描述信息。
安全设置相关
  • security:定义 Samba 服务器的安全级别,常见取值有 shareuserdomainads 等 。
    • share:匿名验证模式,用户无需提供用户名和密码就能访问共享资源,安全性较低,适用于公开的资源共享场景。
    • user:本地用户验证,是默认的安全级别,用户需要提供在 Samba 服务器或关联系统中存在的用户名和密码进行访问验证。
    • domain:表示 Samba 服务器加入了 Windows 域,用户使用域账号进行验证。
    • ads:与 Active Directory 集成的验证方式。
  • passdb backend:指定用户数据库的存储方式,常用的是 tdbsam,即使用 passdb.tdb 文件来存储用户信息,可通过 pdbedit 命令对其进行操作,如添加、删除 Samba 用户等。
日志相关
  • log file:用于设置 Samba 服务器的日志文件路径和命名规则。例如 log file = /var/log/samba/log.%m,其中 %m 表示客户端的 NetBIOS 名称,这样不同客户端的日志会分别记录在不同文件中,方便故障排查和审计,比如查看某个客户端访问共享资源时出现的错误信息。
  • max log size:设置单个日志文件的最大大小,单位是 KB。当日志文件达到这个大小后,Samba 会自动进行日志轮转。如 max log size = 5000,表示单个日志文件最大为 5000KB。

共享参数

共享基本设置
  • path:指定共享资源的实际路径,即服务器上真实存在的目录。例如 path = /home/share,表示该共享对应的是服务器上 /home/share 这个目录,用户访问共享时,实际操作的就是这个目录下的文件和子目录。
  • comment:对共享资源的注释信息,用于向用户说明该共享的用途等,类似于 server string,但针对单个共享。比如 comment = Shared Documents for Team,方便用户了解这个共享文件夹是供团队使用的共享文档。
权限设置
  • read only:设置共享是否为只读,取值为 yes 或 no。若为 yes,用户只能读取共享中的文件,无法进行写入、删除等操作;若为 no,在其他权限允许的情况下,用户可以对文件进行读写操作。例如 read only = no
  • write list:指定哪些用户或用户组可以对共享资源进行写入操作。可以使用用户名、用户组名,或者 @ 符号来表示用户组。比如 write list = @users,表示 users 用户组中的所有用户都可以对该共享进行写入操作。
  • valid users:限制能够访问该共享的用户或用户组。只有在这个列表中的用户或用户组成员才能访问共享资源。例如 valid users = user1, @group1,表示 user1 用户以及 group1 用户组的成员可以访问这个共享。
其他设置
  • guest ok:设置是否允许匿名用户(guest 用户)访问该共享,和全局的 security 级别中 share 模式相关。若为 yes,则允许匿名访问;若为 no,则需要进行身份验证。例如在某些公开资料共享场景中,可以设置 guest ok = yes
  • browseable:决定该共享是否在网络邻居等浏览列表中显示。如果设置为 no,用户无法直接在浏览列表中看到该共享,但知道共享名的用户仍可以通过直接输入共享路径的方式访问 。

1.6 访问控制和启动管理

1.7 客户端访问

1.8 自定义共享空间

步骤 1:服务端安装 Samba
  • 操作:在 Linux 服务端(以 CentOS 为例)执行:
    yum -y install samba
    
  • 原理yum 是 CentOS 的包管理器,-y 表示自动确认安装,该命令会从软件源下载并安装 Samba 服务所需的包,使系统具备 Samba 服务端功能。
  • 验证:执行 rpm -q samba,若输出类似 samba-4.10.16-15.el7.x86_64 的版本信息,说明安装成功。
步骤 2:确认客户端及相关命令软件包
  • 操作
    1. 检查 samba-client 包:
      rpm -q samba-client
      
    2. 检查 samba-common 包:
      rpm -q samba-common
      
  • 原理samba-client 提供客户端访问 Samba 共享的工具(如 smbclient);samba-common 包含 Samba 服务端和客户端通用的配置文件、工具等,是 Samba 正常运行的基础组件。
  • 验证:若两个命令均输出对应包的版本信息(如 samba-client-4.10.16-15.el7.x86_64),说明已安装;若未安装,执行 yum -y install samba-client samba-common 安装。
步骤 3:创建共享区域
3.1 备份主配置文件
  • 操作
    cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
    
  • 原理:备份原始配置文件,防止后续修改出错后无法恢复,保障配置的安全性。
  • 验证:执行 ls /etc/samba/,若存在 smb.conf.bak 文件,说明备份成功。
3.2 创建独立共享区间(编辑配置文件)
  • 操作
    1. 编辑 /etc/samba/smb.conf,在文件末尾添加共享配置(以共享 /data/share 目录为例):
      [myshare]
      comment = My Samba Share  # 共享描述
      path = /data/share        # 共享的实际路径
      browseable = yes          # 是否在浏览列表中显示
      writable = yes            # 是否可写
      valid users = user1       # 允许访问的用户(后续需创建)
      
    2. 创建共享目录并设置权限:
      mkdir -p /data/share
      chmod 777 /data/share  # 简化权限,实验用
      
  • 原理:在 smb.conf 中定义共享段(如 [myshare]),指定共享路径、权限等;创建实际目录并设置权限,让 Samba 服务能访问和控制该目录。
  • 验证:执行 cat /etc/samba/smb.conf,查看是否存在 [myshare] 段及正确配置;执行 ls -ld /data/share,确认目录存在且权限为 drwxrwxrwx
步骤 4:启动 SMB 服务并查看默认共享区域
4.1 启动 SMB 服务
  • 操作
    systemctl start smb
    systemctl enable smb  # 设置开机自启(可选)
    
  • 原理systemctl start smb 启动 Samba 服务,使其监听 SMB 协议端口(默认 139、445),提供共享服务;enable 让服务在系统启动时自动运行。
  • 验证:执行 systemctl status smb,若显示 active (running),说明服务启动成功。
4.2 创建 Samba 用户并设置密码
  • 操作
    1. 先创建系统用户(Samba 用户需基于系统用户):
      useradd user1
      
    2. 为 user1 创建 Samba 密码:
      smbpasswd -a user1
      
      执行后输入并确认密码。
  • 原理:Samba 用户需关联系统用户,smbpasswd -a 用于添加 Samba 用户并设置其访问密码,该密码与系统用户密码独立。
  • 验证:执行 pdbedit -L,若显示 user1:1000:1000 为 user1 的 UID),说明 Samba 用户创建成功。
4.3 查看共享区域(客户端操作)
  • 操作:在客户端(需能访问服务端,且已安装 samba-client)执行(将 smbserverIP 替换为服务端 IP):
    smbclient -U user1 -L smbserverIP
    
    输入 user1 的 Samba 密码后,查看输出的共享列表。
  • 原理smbclient 是 Samba 客户端工具,-U user1 指定用 user1 身份验证,-L 列出服务端共享资源。
  • 验证:若输出中包含 [myshare] 共享,说明服务端共享配置生效,可被客户端发现。
额外验证:访问共享并操作文件
  • 操作:在客户端执行(将 smbserverIP 替换为服务端 IP):
    smbclient //smbserverIP/myshare -U user1
    
    输入密码后,进入 Samba 共享的交互界面,尝试执行 ls(查看文件)、mkdir test(创建目录)、touch test/file.txt(创建文件)等命令。
  • 原理:客户端通过 smbclient 挂载并进入共享目录,测试读写等权限是否符合配置。
  • 验证:若能成功执行 ls 看到共享目录内容,且 mkdirtouch 无报错,同时在服务端 /data/share 目录下能看到创建的 test 目录和 file.txt 文件,说明共享权限配置正确,功能正常。

步骤 a:修改配置文件(添加自定义共享)
  • 操作:编辑 Samba 主配置文件(通常为 /etc/samba/smb.conf),在文件末尾添加以下内容:
    [自定义]
    comment = the share is xbz
    path = /share/zdy
    public = yes
    browseable = yes
    writable = yes
    
  • 原理
    • [自定义]:共享的名称,客户端通过此名称访问。
    • comment:共享的描述信息,方便识别。
    • path:共享对应的 Linux 系统实际目录路径。
    • public = yes:允许匿名访问(实验简化,生产慎用)。
    • browseable = yes:在网络浏览列表中可见。
    • writable = yes:允许写入操作(如上传、修改文件)。
  • 验证:执行 cat /etc/samba/smb.conf,查看是否存在上述 [自定义] 段及正确配置。
步骤 b:创建共享目录并设置权限
  • 操作
    1. 创建目录:
      mkdir -p /share/zdy
      
    2. 设置权限(实验用 777,生产建议用 ACL 更精细):
      chmod 777 /share/zdy
      
  • 原理:共享目录需实际存在,且权限需允许 Samba 服务(及访问用户)读写。chmod 777 表示所有用户(所有者、所属组、其他用户)都有读、写、执行权限,确保任何访问者都能操作。
  • 验证:执行 ls -ld /share/zdy,输出应类似 drwxrwxrwx ... /share/zdy,确认权限为 777
步骤 c:测试配置文件并重启服务
  • 操作
    1. 测试配置文件语法:
      testparm
      
    2. 重启 Samba 服务(以 service 命令为例,系统不同命令可能不同,如 systemctl restart smb):
      service smb restart
      
  • 原理testparm 用于检查 smb.conf 语法是否正确,避免配置错误导致服务异常。重启服务使新配置生效。
  • 验证
    • testparm 执行后无语法错误提示,且显示 [自定义] 共享配置。
    • 执行 service smb status(或 systemctl status smb),确认服务重启后为 active 状态。
步骤 d:创建 Linux 用户
  • 操作
    1. 创建系统用户 zhangsan,并设置登录 shell 为 /sbin/nologin(仅用于 Samba,禁止系统登录):
      useradd -s /sbin/nologin zhangsan
      
    2. (可选)设置系统密码(实验中 Samba 密码独立,此步可跳过,看注释 “不需要创建系统密码”):                       
passwd zhangsan # 若执行,需输入密码,但实验中 Samba 密码由 pdbedit 设置
  • 原理:Samba 用户需基于 Linux 系统用户(但可限制系统登录),-s /sbin/nologin 确保用户只能通过 Samba 访问,不能 SSH 等登录系统。
  • 验证:执行 cat /etc/passwd | grep zhangsan,输出应包含 zhangsan:x:...:/sbin/nologin,确认 shell 为 /sbin/nologin
步骤 e:转换为 Samba 用户
  • 操作:为 zhangsan 创建 Samba 认证密码(会提示输入密码,如设为 123456):
    pdbedit -a zhangsan
    
  • 原理pdbedit 是 Samba 用户管理工具,-a 表示添加用户。此操作会将系统用户 zhangsan 纳入 Samba 用户数据库,并设置 Samba 访问密码(与系统密码无关)。
  • 验证:执行 pdbedit -L,输出应包含 zhangsan:1001:1001 为 zhangsan 的 UID),说明 Samba 用户创建成功。
步骤 f:客户端查看共享文件夹并登录测试
  • 操作:假设服务端 IP 为 192.168.1.100,在客户端执行:
    1. 列出服务端共享:
      smbclient -U zhangsan -L 192.168.1.100
      
      输入步骤 e 设置的 Samba 密码(如 123456)。
    2. 登录共享(共享名为 自定义):
      smbclient -U zhangsan //192.168.1.100/自定义
      
      输入密码后进入交互界面。
  • 原理
    • smbclient 是 Samba 客户端工具,-U zhangsan 指定用 zhangsan 身份认证,-L 列出服务端所有共享。
    • 登录共享后,可像操作本地目录一样交互(如 lsmkdirput 等)。
  • 验证
    1. 执行 smbclient -U zhangsan -L 192.168.1.100 后,输出应包含 [自定义] 共享。
    2. 登录共享后,执行 ls 应能看到 /share/zdy 目录内容(初始为空);执行 mkdir test 后,服务端 /share/zdy 下应出现 test 目录,说明写入权限生效。

额外验证(上传 / 下载文件)

  • 操作:在 smbclient 交互界面中:
    1. 上传本地文件(如客户端有 local.txt):
      put local.txt
      
    2. 下载共享文件(如服务端创建 server.txt 后):
      get server.txt
      
  • 原理put 用于将客户端文件上传到共享目录,get 用于从共享目录下载文件到客户端,验证读写权限是否正常。
  • 验证
    • 上传后,服务端 /share/zdy 下存在 local.txt
    • 下载后,客户端当前目录存在 server.txt

        通过以上步骤和验证,可确保 Samba 从配置、用户创建到客户端访问的全流程正确,实现 “登录、上传、下载” 的本地验证目标。

1.9 访问控制实验

1.10 用户别名和映射网络驱动器

        

步骤 1:添加用户别名(配置 smbusers
  • 操作
    1. 确保 smbusers 文件存在(若不存在则创建):
      touch /etc/samba/smbusers
      
    2. 编辑 smbusers,添加别名映射(以 zhangsan = zs 为例):
      echo "zhangsan = zs" >> /etc/samba/smbusers
      
  • 原理smbusers 文件是 Samba 的用户别名映射表,格式为 真实用户名 = 别名1 别名2 ...,表示 “真实用户 zhangsan 可以用别名 zs 登录”。
  • 验证:执行 cat /etc/samba/smbusers,输出应包含 zhangsan = zs,说明别名添加成功。
步骤 2:启用别名(修改 smb.conf
  • 操作
    1. 编辑 Samba 主配置文件 smb.conf
      vim /etc/samba/smb.conf
      
    2. 在 [global] 段(或文件末尾)添加以下配置:
      username map = /etc/samba/smbusers
      
    3. 保存并退出,然后重启 Samba 服务(以 service 命令为例,不同系统命令可能不同,如 systemctl restart smb):
      service smb restart
      
  • 原理username map 配置项指定 Samba 读取用户别名映射的文件路径,重启服务使新配置生效。
  • 验证:执行 grep "username map" /etc/samba/smb.conf,输出应包含 username map = /etc/samba/smbusers;再执行 service smb status(或 systemctl status smb),确认服务重启后为 active 状态。
步骤 3:测试别名登录(客户端验证)

假设:

  • Samba 服务端 IP 为 192.168.1.100

  • 共享名为 myshare(需提前配置好共享,如路径为 /share,允许 zhangsan 访问);

  • zhangsan 已被添加为 Samba 用户(通过 pdbedit -a zhangsan 设置过 Samba 密码)。

  • 操作:在客户端执行(替换 服务器ip 和 共享名 为实际值):

    smbclient -U zs //192.168.1.100/myshare
    

    输入 zhangsan 的 Samba 密码(因为 zs 是 zhangsan 的别名)。

  • 原理smbclient 是 Samba 客户端工具,-U zs 指定用别名 zs 登录,Samba 会通过 smbusers 映射找到真实用户 zhangsan,再用 zhangsan 的 Samba 密码验证。

  • 验证:若能成功登录(进入 smbclient 交互界面),并可执行 lsmkdir 等操作(与 zhangsan 权限一致),说明别名登录生效。

额外验证:检查用户映射日志

  • 操作
    1. 开启 Samba 详细日志(修改 smb.conf,在 [global] 段添加):
      log level = 3
      log file = /var/log/samba/log.%m
      
    2. 重启 Samba 服务:
      service smb restart
      
    3. 再次用别名 zs 登录,然后查看日志:
      cat /var/log/samba/log.客户端主机名
      
  • 原理:提高日志级别后,Samba 会记录用户映射、认证等详细过程,日志中应能看到 “将别名 zs 映射到真实用户 zhangsan” 的信息。
  • 验证:日志中若包含类似 [...]: username map 'zs' -> 'zhangsan' 的内容,说明用户别名映射被正确解析。

步骤 1:准备环境
  • 确保服务端 Samba 共享已配置(如共享名为 myshare,路径 /share,允许用户 testuser 访问)。
  • 客户端安装 CIFS 工具(若未安装):
    yum install -y cifs-utils  # CentOS/RHEL
    apt install -y cifs-utils  # Ubuntu/Debian
    
步骤 2:创建本地挂载目录
mkdir /mnt/samba_share
步骤 3:执行临时挂载

假设服务端 IP 为 192.168.1.100,Samba 用户为 testuser,密码为 123456,执行:

mount -t cifs -o username=testuser,password=123456 //192.168.1.100/myshare /mnt/samba_share
原理
  • mount 是 Linux 挂载命令;
  • -t cifs 指定文件系统类型为 CIFS(用于访问 Samba 共享);
  • -o username=xxx,password=xxx 传递 Samba 认证信息;
  • //服务器ip/共享名 是远程 Samba 共享路径;
  • /本地挂载目录 是本地挂载点。
验证
  • 执行 df -h,查看输出中是否有 //192.168.1.100/myshare 挂载到 /mnt/samba_share
  • 执行 ls /mnt/samba_share,查看是否能列出服务端共享目录的文件。
(二)永久挂载(写入 /etc/fstab
步骤 1:备份 /etc/fstab(防止出错)
cp /etc/fstab /etc/fstab.bak
步骤 2:编辑 /etc/fstab

在文件末尾添加一行(注意替换为实际信息):

//192.168.1.100/myshare /mnt/samba_share cifs defaults,username=testuser,password=123456 0 0
步骤 3:重新加载挂载(或重启系统)
mount -a
原理

/etc/fstab 是 Linux 系统的自动挂载配置文件,系统启动时会自动读取该文件,执行所有配置的挂载操作。defaults 表示使用默认挂载选项(rw、suid、dev 等),最后两个 0 分别表示 “不备份” 和 “不检查磁盘”。

验证
  • 执行 df -h,确认 //192.168.1.100/myshare 已挂载;
  • 重启系统后,再次执行 df -h,确认挂载仍存在(说明永久生效)。

Windows 下的映射网络驱动器::

步骤 1:打开 “映射网络驱动器”
  • 打开 “此电脑”(或 “我的电脑”“计算机”);
  • 点击顶部 “映射网络驱动器”(或右键空白处选择 “映射网络驱动器”)。
步骤 2:配置映射信息
  • 驱动器:选择一个未使用的盘符(如 Z:);
  • 文件夹:输入 \\192.168.1.100\myshare(注意是反斜杠,且替换为实际 IP 和共享名);
  • 勾选 “使用其他凭据连接”(若需要输入 Samba 用户名密码),点击 “完成”。
步骤 3:输入 Samba 认证信息

在弹出的窗口中,输入 Samba 用户名(如 testuser)和密码(如 123456),点击 “确定”。

原理

        Windows 内置对 SMB/CIFS 协议的支持,通过 “映射网络驱动器” 功能,将远程 Samba 共享虚拟为本地盘符,底层通过 SMB 协议与服务端通信。

验证
  • “此电脑” 中会出现新的盘符(如 Z:);
  • 双击该盘符,查看是否能访问服务端共享文件,且操作(如复制、修改)与本地文件一致。

额外验证(跨系统一致性)

  • 在 Linux 客户端的 /mnt/samba_share 中创建文件 linux_test.txt
  • 从 Windows 映射的盘符中,查看是否存在 linux_test.txt
  • 从 Windows 盘符中创建文件 win_test.txt
  • 回到 Linux 客户端,执行 ls /mnt/samba_share,查看是否存在 win_test.txt
  • 若两边文件能互相可见,说明跨系统挂载 / 映射及文件同步正常。

1.11 web管理工具swat

一、实验原理

        SWAT(Samba Web Administration Tool)是 Samba 的图形化 Web 管理工具,通过 xinetd 超级服务管理其运行。xinetd 会根据配置监听请求,当有对 SWAT 的访问时,启动 SWAT 进程处理,实现通过网页图形界面管理 Samba 服务(如配置共享、用户等)。

二、详细步骤及验证

步骤 1:安装 SWAT 相关 RPM 包
操作
  1. 将 SWAT 的 RPM 安装包上传到服务器(如 /root/swat_rpms/ 目录)。
  2. 进入 RPM 包所在目录,执行安装:
    cd /root/swat_rpms/
    yum -y install *.rpm
    
原理

yum -y install *.rpm 会自动解析目录下所有 RPM 包的依赖关系并安装,确保 SWAT 及其依赖组件(如 xinetd、相关库)被正确安装。

验证

执行 rpm -qa | grep swat,若输出包含 swat 相关包(如 samba-swat-xxx),说明安装成功。

步骤 2:修改 xinetd 中 SWAT 的配置文件
操作
  1. 编辑 /etc/xinetd.d/swat 文件:
    vim /etc/xinetd.d/swat
    
  2. 在文件中添加 / 修改以下内容(替换 登录来源 IP 为实际允许访问的 IP,如管理机 IP 192.168.1.10,若允许所有 IP 可设为 only_from = 0.0.0.0):
    service swat
    {port        = 901socket_type = streamprotocol    = tcpwait        = nouser        = rootserver      = /usr/sbin/swatonly_from   = 192.168.1.10  # 允许登录的来源IPdisable     = no
    }
    
原理

xinetd 通过配置文件管理服务,only_from 限制允许访问 SWAT 的客户端 IP,增强安全性;disable = no 表示启用该服务;port = 901 指定 SWAT 监听的端口。

验证

执行 cat /etc/xinetd.d/swat,查看配置是否与上述一致,特别是 only_from 和 disable 项。

步骤 3:重启 xinetd 服务
操作
service xinetd restart

(若系统使用 systemctl,则执行 systemctl restart xinetd

原理

xinetd 是超级服务守护进程,修改配置后需重启使其加载新配置,从而让 SWAT 服务按新配置运行。

验证

执行 service xinetd status(或 systemctl status xinetd),若显示 active (running),说明服务重启成功。

步骤 4:测试 SWAT 图形化 Web 管理界面
操作
  1. 在客户端浏览器中输入 URL:http://服务器IP:901(替换 服务器IP 为 Samba 服务器的实际 IP)。
  2. 在弹出的认证窗口中,输入 Linux 系统的 root 用户名和密码(SWAT 需 root 权限管理 Samba)。
原理

浏览器通过 HTTP 协议访问服务器的 901 端口,xinetd 监听到请求后启动 SWAT 进程,SWAT 提供图形化界面并验证用户身份(使用系统 root 认证)。

验证
  • 若能成功打开 SWAT 界面(包含 Samba 配置选项,如 “Global Settings”“Shares” 等),说明访问成功;
  • 尝试在界面中修改 Samba 配置(如添加一个共享目录),保存后检查服务器的 smb.conf 文件,看是否有对应的修改,验证配置生效。

额外验证:防火墙与 SELinux (若开启)

  • 防火墙:若服务器开启防火墙,需开放 901 端口,执行(以 firewalld 为例):
    firewall-cmd --permanent --add-port=901/tcp
    firewall-cmd --reload
    
    验证:客户端能正常访问 http://服务器IP:901,说明防火墙未拦截。
  • SELinux:若 SELinux 为 enforcing 模式,需允许 SWAT 访问,执行:
    setsebool -P httpd_can_network_connect 1
    
    验证:SWAT 界面能正常加载,无 SELinux 相关报错。

2.NFS

2.1 概述

        用大白话解释的话,NFS(Network File System,网络文件系统)就是 “把远程电脑的文件夹,直接变成自己电脑能用的本地文件夹” 的工具—— 比如你在公司 Linux 服务器上存了项目文件,在家用 Linux 电脑上不用下载,直接 “挂载” 服务器的文件夹,就能像操作自己电脑里的文件一样改代码、存数据,两边改的都是同一个文件,特别方便。

1. 核心作用:解决 “跨设备文件共享”

        NFS 最核心的价值是让不同的 Linux/Unix 设备(比如服务器、电脑、树莓派)在局域网里共享文件,而且共享方式很 “无感”—— 不是像 FTP 那样 “传文件”,而是直接把远程文件夹 “接” 到本地,操作逻辑和本地文件夹完全一样。

        举个实际例子:公司有一台 Linux 文件服务器,上面建了一个/data/project文件夹存所有团队的项目资料。团队成员的 Linux 电脑只要通过 NFS “挂载” 这个文件夹(比如挂载到自己电脑的/home/myproject),打开/home/myproject看到的就是服务器上的文件,改文件、存新文件都会直接同步到服务器,不用每次手动上传下载。

2. 工作原理:简单理解 “客户端 - 服务器”

NFS 是典型的 “客户端 - 服务器” 模式,就像你用手机连 WiFi 上网一样:

  • 服务器端:把要共享的文件夹(比如/data/project)“发布” 出去,告诉局域网 “我这里有个文件夹可以共享,谁有权限谁就能用”;
  • 客户端:找到服务器的共享文件夹,通过 NFS 协议把它 “挂载” 到自己的一个本地目录(比如/home/myproject);
  • 数据传输:挂载后,客户端对/home/myproject的操作(读、写、删文件),会通过 NFS 协议转换成对服务器/data/project的操作,全程不用手动干预。

3. 和 Samba 的区别:别搞混 “Linux 专属” 和 “跨系统”

很多人会把 NFS 和 Samba 搞混,其实核心区别在 “适用系统”:

  • NFS:主要给 Linux/Unix 设备用(比如 Linux 服务器、macOS 电脑,macOS 也支持 NFS),Windows 想用需要额外装软件,不太方便;
  • Samba:专门解决 “Linux 和 Windows 跨系统共享”,Windows 能直接通过 “网络邻居” 访问,Linux 也能用,兼容性更强。

简单说:如果你的设备全是 Linux/macOS,用 NFS 更轻量、速度更快;如果要和 Windows 互传,用 Samba 更省心。

4. 常用场景:什么时候会用到 NFS?

  • 团队协作:Linux 服务器共享项目文件夹,团队成员用自己的 Linux 电脑挂载,实时协同编辑;
  • 数据备份:多台 Linux 客户端把数据存到 NFS 服务器的共享目录,集中备份管理;
  • 嵌入式设备:比如树莓派(Linux 系统)存储空间小,挂载 NFS 服务器的大硬盘,扩展存储。

        总结一下:NFS 就是 Linux 圈子里的 “文件共享神器”,能把远程文件夹 “变” 成本地的,不用传文件就能直接用,适合纯 Linux/Unix 环境下的高效共享。

2.2 工作原理-NFS和RPC

1. NFS 简介

NFS 是一种基于网络的文件系统协议,允许网络中的计算机通过网络访问和使用其他计算机上的文件系统,就像访问本地文件系统一样。其设计目的是实现不同主机之间的文件共享,方便用户在网络环境下对远程文件进行操作,如读写、创建、删除等。

2. RPC 简介

RPC 是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议 。它使得程序能够像调用本地函数一样调用远程计算机上的函数,屏蔽了网络通信的细节,让开发者可以更专注于业务逻辑的实现。

3. NFS 依赖 RPC 的原因

NFS 本身只定义了文件系统操作的语义,如读取文件、写入文件等,但并没有规定如何在网络中传输这些操作请求和响应。而 RPC 提供了一种标准化的机制,用于在客户端和服务器之间传输过程调用(即 NFS 操作请求)以及返回结果,所以 NFS 依赖 RPC 来完成网络通信。

4. NFS 和 RPC 结合的工作原理流程

  • 服务器端准备
    • 管理员在 NFS 服务器上配置需要共享的目录,并启动 NFS 服务。
    • NFS 服务器启动时,会向 RPC 服务注册自己提供的服务信息,包括支持的 NFS 版本、可共享的目录等。RPC 服务会记录这些信息,并监听特定的端口(通常是端口 111),等待客户端的请求。
  • 客户端请求
    • 当 NFS 客户端想要访问 NFS 服务器上的共享目录时,首先会向本地的 RPC 服务发出请求,告知它自己想要执行的 NFS 操作(例如读取某个文件)。
    • 本地 RPC 服务将这个 NFS 操作请求封装成一个 RPC 请求包,其中包含了操作类型、文件路径等信息。
    • 客户端的 RPC 服务通过查找服务器端的 RPC 服务地址(通常通过广播或 DNS 解析获取服务器的 IP 地址),将封装好的 RPC 请求包发送到 NFS 服务器的 RPC 服务监听端口(111 端口)。
  • 服务器端处理请求
    • NFS 服务器的 RPC 服务接收到客户端发来的 RPC 请求包后,根据请求包中的信息,确定这是一个 NFS 操作请求,并将请求转发给 NFS 服务进行处理。
    • NFS 服务根据请求的内容,对本地的共享目录执行相应的文件系统操作,比如读取文件内容。
    • 完成操作后,NFS 服务将操作结果返回给 RPC 服务。
  • 返回响应给客户端
    • 服务器端的 RPC 服务将 NFS 服务返回的操作结果封装成一个 RPC 响应包,然后通过网络发送回客户端的 RPC 服务。
    • 客户端的 RPC 服务接收到响应包后,解封装得到 NFS 操作的结果,并将其传递给发起请求的客户端程序。
    • 客户端程序根据接收到的结果进行后续处理,比如将读取到的文件内容显示给用户。

5. 动态端口分配机制

由于 NFS 支持多种服务(如文件读写、目录管理等),且不同服务可能使用不同的端口,为了方便管理和通信,NFS 采用了动态端口分配机制,这也是借助 RPC 实现的。

  • 当 NFS 服务器启动时,每个 NFS 服务(如 mountd、nfsd 等)会随机选择一个未被占用的端口,并将该端口信息注册到 RPC 服务中。
  • 客户端想要访问某个 NFS 服务时,先向服务器的 RPC 服务(111 端口)查询该 NFS 服务对应的端口号,然后再向这个端口发送请求。这样,即使 NFS 服务的端口发生变化,客户端也能通过 RPC 服务获取到正确的端口信息,保证通信的正常进行。

        通过 RPC,NFS 实现了高效、透明的远程文件访问,使得用户在网络环境下能够方便地共享和操作文件系统资源。

2.3 工作原理-协议和软件包

2.4 配置文件编写格式

2.5 启动和自启动管理

2.6 实例演示

步骤 1:服务端配置 NFS 共享目录
操作
  1. 编辑 NFS 共享配置文件:
    vim /etc/exports
    
    添加共享规则(共享 /home/zhangsan 目录给 192.168.115.0/24 网段,读写权限):
    /home/zhangsan 192.168.115.0/24(rw)
    
  2. 重启 NFS 相关服务:
    service rpcbind restart
    service nfs restart
    
    (或用 systemctl restart rpcbind nfs,依系统版本而定)
  3. 导出共享配置:
    exportfs -r
    
原理
  • /etc/exports 是 NFS 共享规则的配置文件,格式为 共享目录 客户端范围(权限)
  • rpcbind 是 RPC 服务的守护进程,NFS 依赖 RPC 实现远程过程调用;
  • exportfs -r 使新的共享配置生效。
验证

执行 exportfs -v,输出应包含:

/home/zhangsan 192.168.115.0/24(rw,sync,wdelay,hide,...)

说明共享规则已成功导出。

步骤 2:服务端检查共享状态
操作

执行命令查看本地 NFS 共享状态:

showmount -e localhost
原理

showmount -e 用于查询 NFS 服务器的导出共享列表localhost 表示查询本机。

验证

输出应包含:

Export list for localhost:
/home/zhangsan 192.168.115.0/24

说明服务端共享目录已成功暴露。

步骤 3:客户端检查服务端共享状态
操作

在客户端执行(替换 192.168.115.10 为服务端 IP):

showmount -e 192.168.115.10
原理

客户端通过 showmount 向服务端 RPC 服务查询可挂载的共享列表,验证网络连通性和服务端共享配置。

验证

输出应与服务端 showmount -e localhost 一致:

Export list for 192.168.115.10:
/home/zhangsan 192.168.115.0/24

说明客户端能正常获取服务端共享信息。

步骤 4:客户端挂载 NFS 共享目录
操作
  1. 创建本地挂载点:
    mkdir /media/zhangsan
    
  2. 临时挂载 NFS 共享(指定用 NFSv3 版本,避免同步延迟):
    mount -o vers=3 192.168.115.10:/home/zhangsan /media/zhangsan
    
原理
  • mount 是 Linux 挂载文件系统的命令,-o vers=3 指定使用 NFSv3 协议(相比 NFSv4,NFSv3 某些场景下同步延迟更低);
  • 192.168.115.10:/home/zhangsan 是服务端共享路径/media/zhangsan 是客户端本地挂载点
验证

执行 df -h,输出应包含:

192.168.115.10:/home/zhangsan  ...  /media/zhangsan  nfs  ...

说明挂载成功;进入 /media/zhangsan 目录,执行 ls,应能看到服务端 /home/zhangsan 下的文件。

步骤 5:验证文件操作一致性
操作
  1. 服务端在 /home/zhangsan 下创建文件:
    # 服务端执行
    touch /home/zhangsan/server_test.txt
    
  2. 客户端检查文件:
    # 客户端执行
    ls /media/zhangsan
    
  3. 客户端在挂载目录创建文件:
    # 客户端执行
    touch /media/zhangsan/client_test.txt
    
  4. 服务端检查文件:
    # 服务端执行
    ls /home/zhangsan
    
原理

NFS 共享的核心是文件操作同步,客户端和服务端对同一共享目录的操作应实时可见。

验证
  • 步骤 2 后,客户端 ls 应能看到 server_test.txt
  • 步骤 4 后,服务端 ls 应能看到 client_test.txt
步骤 6:配置 NFS 权限(避免客户端无法正常访问)
操作
  1. 服务端修改共享目录权限(使客户端能写):
    # 服务端执行
    chmod 777 /home/zhangsan
    chown nfsnobody:nfsnobody /home/zhangsan
    
  2. 客户端测试写操作:
    # 客户端执行
    echo "Test NFS Write" > /media/zhangsan/write_test.txt
    
  3. 服务端验证文件:
    # 服务端执行
    cat /home/zhangsan/write_test.txt
    
原理
  • chmod 777 赋予目录所有人读写执行权限
  • chown nfsnobody:nfsnobody 将目录所有者改为 NFS 匿名用户(客户端挂载时若用普通用户,默认映射为 nfsnobody),确保权限匹配。
验证

服务端 cat 应输出 Test NFS Write,说明客户端写操作成功同步到服务端。

步骤 7:配置开机自动挂载(永久挂载)
操作
  1. 编辑客户端 /etc/fstab 文件:
    vim /etc/fstab
    
    添加以下行(指定 NFSv3、自动挂载、权限等):
    192.168.115.10:/home/zhangsan /media/zhangsan nfs vers=3,defaults 0 0
    
  2. 重新加载挂载配置:
    mount -a
    
原理

/etc/fstab 是 Linux 系统开机自动挂载的配置文件,系统启动时会自动读取该文件并挂载指定的文件系统。

验证
  • 执行 mount -a 无报错;
  • 重启客户端系统后,执行 df -h,仍能看到 192.168.115.10:/home/zhangsan 挂载到 /media/zhangsan,说明自动挂载生效。

2.7 相关命令

http://www.dtcms.com/a/449287.html

相关文章:

  • 206-基于深度学习的胸部CT肺癌诊断项目的设计与实现
  • 二叉树进阶面试题:最小栈 栈的压入·弹出序列 二叉树层序遍历
  • 【大模型LLMs】LangGraph实战:引入网络搜索tool和Memory机制的对话Agent案例
  • 企业网站开发毕业报告网络营销的推广工具
  • 手机网站开发需要哪些人百度广告联盟怎么加入
  • 书生浦语实战营第六期 L1-G3000
  • 前端IM应用开发中的难点解析与总结
  • Web 服务器 UserDir(~username)功能解析:从原理到安全实践
  • 25新三年级上册数学混合运算应用题八大专项+三年级上数学混合运算练习/八大考点(复合问题/倍数问题)+完整电子版可下载打印
  • Linux基础IO(下):文件重定向和缓冲区
  • Flink 高级配置发行版剖析、Scala 版本、Table 依赖与 Hadoop 集成实战
  • 半成品公司 网站专业公司网站建设
  • 【数据结构】二叉搜索树 C++ 简单实现:增删查改全攻略
  • 深度学习(十七):全批量梯度下降 (BGD)、随机梯度下降 (SGD) 和小批量梯度下降 (MBGD)
  • 实验十九 GaussDB三权分立实验
  • C++微基础备战蓝桥杯string篇10.5
  • 基于脚手架微服务的视频点播系统-脚手架开发部分-brpc中间件介绍与使用及二次封装
  • 网站建设需求登记表 免费下载软件开发公司企业简介
  • 北京城乡建设网站网站建设都是用什么软件
  • C++分布式语音识别服务实践
  • 轻松理解智能体设计模式(1/6):提示链(Prompt Chaining)
  • ARM TrustZone技术如何守护你的隐私
  • 北京恒伟网站建设wordpress 新页面打开空白
  • 从 0 到 1 搭建 Python 语言 Web UI自动化测试学习系列 8--基础知识 4--常用函数 2
  • 在 Python 项目中构建可靠的 CI/CD 流水线:从设计到实战(面向开发与运维的实用指南)
  • Linux基本指令(中)
  • 郑州服装网站建设公司php做电商网站安全性如何
  • 响应式网站 翻译网站关键词排名如何提升
  • python爬虫(二) ---- JS动态渲染数据抓取
  • 国庆回来的css