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 服务器的安全级别,常见取值有
share
、user
、domain
、ads
等 。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:确认客户端及相关命令软件包
- 操作:
- 检查
samba-client
包:rpm -q samba-client
- 检查
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 创建独立共享区间(编辑配置文件)
- 操作:
- 编辑
/etc/samba/smb.conf
,在文件末尾添加共享配置(以共享/data/share
目录为例):[myshare] comment = My Samba Share # 共享描述 path = /data/share # 共享的实际路径 browseable = yes # 是否在浏览列表中显示 writable = yes # 是否可写 valid users = user1 # 允许访问的用户(后续需创建)
- 创建共享目录并设置权限:
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 用户并设置密码
- 操作:
- 先创建系统用户(Samba 用户需基于系统用户):
useradd user1
- 为
user1
创建 Samba 密码:smbpasswd -a user1
- 先创建系统用户(Samba 用户需基于系统用户):
- 原理: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
ls
(查看文件)、mkdir test
(创建目录)、touch test/file.txt
(创建文件)等命令。 - 原理:客户端通过
smbclient
挂载并进入共享目录,测试读写等权限是否符合配置。 - 验证:若能成功执行
ls
看到共享目录内容,且mkdir
、touch
无报错,同时在服务端/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:创建共享目录并设置权限
- 操作:
- 创建目录:
mkdir -p /share/zdy
- 设置权限(实验用
777
,生产建议用 ACL 更精细):chmod 777 /share/zdy
- 创建目录:
- 原理:共享目录需实际存在,且权限需允许 Samba 服务(及访问用户)读写。
chmod 777
表示所有用户(所有者、所属组、其他用户)都有读、写、执行权限,确保任何访问者都能操作。 - 验证:执行
ls -ld /share/zdy
,输出应类似drwxrwxrwx ... /share/zdy
,确认权限为777
。
步骤 c:测试配置文件并重启服务
- 操作:
- 测试配置文件语法:
testparm
- 重启 Samba 服务(以
service
命令为例,系统不同命令可能不同,如systemctl restart smb
):service smb restart
- 测试配置文件语法:
- 原理:
testparm
用于检查smb.conf
语法是否正确,避免配置错误导致服务异常。重启服务使新配置生效。 - 验证:
testparm
执行后无语法错误提示,且显示[自定义]
共享配置。- 执行
service smb status
(或systemctl status smb
),确认服务重启后为active
状态。
步骤 d:创建 Linux 用户
- 操作:
- 创建系统用户
zhangsan
,并设置登录 shell 为/sbin/nologin
(仅用于 Samba,禁止系统登录):useradd -s /sbin/nologin zhangsan
- (可选)设置系统密码(实验中 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
,在客户端执行:- 列出服务端共享:
smbclient -U zhangsan -L 192.168.1.100
123456
)。 - 登录共享(共享名为
自定义
):smbclient -U zhangsan //192.168.1.100/自定义
- 列出服务端共享:
- 原理:
smbclient
是 Samba 客户端工具,-U zhangsan
指定用zhangsan
身份认证,-L
列出服务端所有共享。- 登录共享后,可像操作本地目录一样交互(如
ls
、mkdir
、put
等)。
- 验证:
- 执行
smbclient -U zhangsan -L 192.168.1.100
后,输出应包含[自定义]
共享。 - 登录共享后,执行
ls
应能看到/share/zdy
目录内容(初始为空);执行mkdir test
后,服务端/share/zdy
下应出现test
目录,说明写入权限生效。
- 执行
额外验证(上传 / 下载文件)
- 操作:在
smbclient
交互界面中:- 上传本地文件(如客户端有
local.txt
):put local.txt
- 下载共享文件(如服务端创建
server.txt
后):get server.txt
- 上传本地文件(如客户端有
- 原理:
put
用于将客户端文件上传到共享目录,get
用于从共享目录下载文件到客户端,验证读写权限是否正常。 - 验证:
- 上传后,服务端
/share/zdy
下存在local.txt
。 - 下载后,客户端当前目录存在
server.txt
。
- 上传后,服务端
通过以上步骤和验证,可确保 Samba 从配置、用户创建到客户端访问的全流程正确,实现 “登录、上传、下载” 的本地验证目标。
1.9 访问控制实验
1.10 用户别名和映射网络驱动器
步骤 1:添加用户别名(配置 smbusers
)
- 操作:
- 确保
smbusers
文件存在(若不存在则创建):touch /etc/samba/smbusers
- 编辑
smbusers
,添加别名映射(以zhangsan = zs
为例):echo "zhangsan = zs" >> /etc/samba/smbusers
- 确保
- 原理:
smbusers
文件是 Samba 的用户别名映射表,格式为真实用户名 = 别名1 别名2 ...
,表示 “真实用户zhangsan
可以用别名zs
登录”。 - 验证:执行
cat /etc/samba/smbusers
,输出应包含zhangsan = zs
,说明别名添加成功。
步骤 2:启用别名(修改 smb.conf
)
- 操作:
- 编辑 Samba 主配置文件
smb.conf
:vim /etc/samba/smb.conf
- 在
[global]
段(或文件末尾)添加以下配置:username map = /etc/samba/smbusers
- 保存并退出,然后重启 Samba 服务(以
service
命令为例,不同系统命令可能不同,如systemctl restart smb
):service smb restart
- 编辑 Samba 主配置文件
- 原理:
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
交互界面),并可执行ls
、mkdir
等操作(与zhangsan
权限一致),说明别名登录生效。
额外验证:检查用户映射日志
- 操作:
- 开启 Samba 详细日志(修改
smb.conf
,在[global]
段添加):log level = 3 log file = /var/log/samba/log.%m
- 重启 Samba 服务:
service smb restart
- 再次用别名
zs
登录,然后查看日志:cat /var/log/samba/log.客户端主机名
- 开启 Samba 详细日志(修改
- 原理:提高日志级别后,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 包
操作
- 将 SWAT 的 RPM 安装包上传到服务器(如
/root/swat_rpms/
目录)。 - 进入 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 的配置文件
操作
- 编辑
/etc/xinetd.d/swat
文件:vim /etc/xinetd.d/swat
- 在文件中添加 / 修改以下内容(替换
登录来源 IP
为实际允许访问的 IP,如管理机 IP192.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 管理界面
操作
- 在客户端浏览器中输入 URL:
http://服务器IP:901
(替换服务器IP
为 Samba 服务器的实际 IP)。 - 在弹出的认证窗口中,输入 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
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 共享目录
操作
- 编辑 NFS 共享配置文件:
vim /etc/exports
/home/zhangsan
目录给192.168.115.0/24
网段,读写权限):/home/zhangsan 192.168.115.0/24(rw)
- 重启 NFS 相关服务:
service rpcbind restart service nfs restart
systemctl restart rpcbind nfs
,依系统版本而定) - 导出共享配置:
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 共享目录
操作
- 创建本地挂载点:
mkdir /media/zhangsan
- 临时挂载 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:验证文件操作一致性
操作
- 服务端在
/home/zhangsan
下创建文件:# 服务端执行 touch /home/zhangsan/server_test.txt
- 客户端检查文件:
# 客户端执行 ls /media/zhangsan
- 客户端在挂载目录创建文件:
# 客户端执行 touch /media/zhangsan/client_test.txt
- 服务端检查文件:
# 服务端执行 ls /home/zhangsan
原理
NFS 共享的核心是文件操作同步,客户端和服务端对同一共享目录的操作应实时可见。
验证
- 步骤 2 后,客户端
ls
应能看到server_test.txt
; - 步骤 4 后,服务端
ls
应能看到client_test.txt
。
步骤 6:配置 NFS 权限(避免客户端无法正常访问)
操作
- 服务端修改共享目录权限(使客户端能写):
# 服务端执行 chmod 777 /home/zhangsan chown nfsnobody:nfsnobody /home/zhangsan
- 客户端测试写操作:
# 客户端执行 echo "Test NFS Write" > /media/zhangsan/write_test.txt
- 服务端验证文件:
# 服务端执行 cat /home/zhangsan/write_test.txt
原理
chmod 777
赋予目录所有人读写执行权限;chown nfsnobody:nfsnobody
将目录所有者改为 NFS 匿名用户(客户端挂载时若用普通用户,默认映射为nfsnobody
),确保权限匹配。
验证
服务端 cat
应输出 Test NFS Write
,说明客户端写操作成功同步到服务端。
步骤 7:配置开机自动挂载(永久挂载)
操作
- 编辑客户端
/etc/fstab
文件:vim /etc/fstab
192.168.115.10:/home/zhangsan /media/zhangsan nfs vers=3,defaults 0 0
- 重新加载挂载配置:
mount -a
原理
/etc/fstab
是 Linux 系统开机自动挂载的配置文件,系统启动时会自动读取该文件并挂载指定的文件系统。
验证
- 执行
mount -a
无报错; - 重启客户端系统后,执行
df -h
,仍能看到192.168.115.10:/home/zhangsan
挂载到/media/zhangsan
,说明自动挂载生效。