Linux 网络服务架设学习笔记第四期——文件共享服务下篇SMB 与 VSFTPD——跨平台共享与文件传输本系列更多内容可见Linux常见服务器配置Linux系统管理入门系列更多文章欢迎访问Linux入门——系统管理1、Linux入门——系统管理2我的主页AOwhisky这里有更多运维系统性知识整理和其他有趣内容欢迎与我一起探讨学习~引言从“办公室文件柜”到“互联网快递站”——文件共享的两种哲学你所在的办公室里有一个文件柜共享文件夹所有同事都可以存取里面的文件。张三放进去一份报告李四打开修改后放回去——这就是SMBSamba的场景持续的、协作式的文件共享像办公室文件柜一样方便。但如果你要给客户发送一份 2GB 的安装包呢你不会把它塞进办公室文件柜而是会用网盘或快递发送——这就是FTP文件传输协议的场景大批量、一次性的文件传输像快递驿站一样高效。两者都是“文件共享”但使用场景和设计理念截然不同SMBSamba专为局域网协作设计支持文件锁定、权限细粒度控制、多用户同时访问与 Windows 生态无缝集成FTPVSFTPD专为文件传输设计支持断点续传、匿名访问、大文件传输适合对外提供文件下载服务本期将系统学习这两种服务的完整部署与配置SMBSamba用户管理、共享配置、Linux/Windows 客户端挂载、多用户挂载VSFTPD匿名用户与本地用户访问、主动模式 vs 被动模式、安全配置— Compiled and Authored by Whisky — Augest 6 th, 2026目录SMBSamba服务器1.1 SMB 协议与 Samba 概述1.2 安装与准备共享目录1.3 Samba 用户管理smbpasswd1.4 配置 Samba 共享/etc/samba/smb.conf1.5 Linux 客户端挂载1.6 Windows 客户端访问1.7 多用户挂载multiuserVSFTPD 服务器2.1 FTP 协议与 VSFTPD 概述2.2 安装与防火墙配置2.3 配置匿名用户访问2.4 配置本地用户访问2.5 主动模式 vs 被动模式SMB vs VSFTPD选型对比总结与速查手册1. SMBSamba服务器1.1 SMB 协议与 Samba 概述SMBServer Messages Block服务器消息块协议由 IBM 在 1983 年发明后更名为CIFSCommon Internet File System是 Windows 网络文件共享的核心协议。Samba是在 Linux/UNIX 系统上实现 SMB 协议的开源软件让 Linux 服务器能够向 Windows、Linux、macOS 客户端提供文件共享充当 Windows 域控制器域成员身份认证提供打印服务共享1.2 安装与准备共享目录bash# 安装 Samba 服务端和客户端 [rootserver ~]# yum install -y samba samba-client # 创建共享目录 [rootserver ~]# mkdir -p /shares/samba # 创建开发者组用于权限控制 [rootserver ~]# groupadd -g 2000 developers # 设置目录属组为 developers [rootserver ~]# chgrp developers /shares/samba # 设置 SGID 权限目录内新文件自动继承 developers 组 [rootserver ~]# chmod 2775 /shares/samba # 查看目录权限 [rootserver ~]# ls -ld /shares/samba drwxrwsr-x. 2 root developers 4096 Aug 6 14:30 /shares/samba # SGID 位s确保新文件自动属于 developers 组1.3 Samba 用户管理smbpasswdSamba 用户独立于 Linux 系统用户但每个 Samba 用户必须有一个同名的 Linux 系统账户。创建仅用于 Samba 的系统账户bash# 创建系统用户锁定 Shell禁止 SSH 登录 [rootserver ~]# useradd -s /sbin/nologin -u 1000 operator1 # 创建开发者用户 [rootserver ~]# useradd -s /sbin/nologin -G developers -u 1001 developer1 [rootserver ~]# useradd -s /sbin/nologin -G developers -u 1002 developer2将用户添加到 Samba 数据库bash# 使用 smbpasswd 添加 Samba 用户-a 添加 [rootserver ~]# smbpasswd -a operator1 New SMB password: redhat Retype new SMB password: redhat Added user operator1. [rootserver ~]# smbpasswd -a developer1 New SMB password: redhat Retype new SMB password: redhat Added user developer1. [rootserver ~]# smbpasswd -a developer2 New SMB password: redhat Retype new SMB password: redhat Added user developer2. # 非交互式设置密码用于脚本 [rootserver ~]# echo -e redhat\nredhat | smbpasswd -a -s developer2管理 Samba 用户bash# 查看所有 Samba 用户 [rootserver ~]# pdbedit -L operator1:1000: developer1:1001: developer2:1002: # 删除 Samba 用户 [rootserver ~]# smbpasswd -x operator1 Deleted user operator1. # 修改 Samba 用户密码 [rootserver ~]# smbpasswd developer1 New SMB password: Retype new SMB password:1.4 配置 Samba 共享/etc/samba/smb.conf配置文件结构text[global] ← 全局配置工作组、安全模式等 参数 值 [share_name] ← 共享模块定义 参数 值编辑配置文件bash[rootserver ~]# vim /etc/samba/smb.conf全局配置示例bash[global] # 工作组名称Windows 网络中的工作组名 workgroup WORKGROUP # 安全模式user 用户名密码认证 security user # 最小 SMB 协议版本SMB2 以上排除不安全的 SMB1 server min protocol SMB2 # 允许访问的客户端网段 hosts allow 10.1.8.共享块定义bash[devcode] comment Developer Code Share path /shares/samba valid users operator1, developers write list developers read only no参数说明参数含义comment共享描述信息path共享目录的绝对路径valid users允许访问的用户列表组名表示组write list具有写权限的用户列表read onlyyes只读no可读写browseable是否在网络列表中可见验证配置文件bash[rootserver ~]# testparm Load smb config files from /etc/samba/smb.conf Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions设置 SELinuxbash# 为新目录设置 Samba 安全上下文 [rootserver ~]# semanage fcontext -a -t samba_share_t /shares/samba(/.*)? [rootserver ~]# restorecon -Rv /shares/samba启动 Samba 服务bash[rootserver ~]# systemctl enable smb --now # 查看端口139/TCP 和 445/TCP [rootserver ~]# ss -lntp | grep -E 139|445 LISTEN 0 50 *:139 *:* users:((smbd,pid1234,fd32)) LISTEN 0 50 *:445 *:* users:((smbd,pid1234,fd33)) # 防火墙放行 [rootserver ~]# firewall-cmd --permanent --add-servicesamba [rootserver ~]# firewall-cmd --reload1.5 Linux 客户端挂载安装客户端工具bash[rootclient ~]# yum install -y cifs-utils samba-client查看服务端共享bash[rootclient ~]# smbclient -L //server.whisky.cloud -U operator1 Enter SAMBA\operator1s password: redhat Sharename Type Comment --------- ---- ------- print$ Disk Printer Drivers devcode Disk Developer Code Share IPC$ IPC IPC Service operator1 Disk Home Directories挂载 SMB 共享bash# 创建挂载点 [rootclient ~]# mkdir /mnt/smb # 手动挂载提示输入密码 [rootclient ~]# mount -o usernameoperator1 //server.whisky.cloud/devcode /mnt/smb Password for operator1//server.whisky.cloud/devcode: redhat # 验证挂载 [rootclient ~]# df -h /mnt/smb Filesystem Size Used Avail Use% Mounted on //server.whisky.cloud/devcode 20G 1.2G 19G 6% /mnt/smb使用凭据文件自动挂载bash# 创建凭据文件 [rootclient ~]# vim /etc/samba/credentials usernameoperator1 passwordredhat [rootclient ~]# chmod 600 /etc/samba/credentials # 在 /etc/fstab 中添加条目 [rootclient ~]# echo //server.whisky.cloud/devcode /mnt/smb cifs credentials/etc/samba/credentials 0 0 /etc/fstab # 测试挂载 [rootclient ~]# mount -a1.6 Windows 客户端访问方法一文件资源管理器在 Windows 文件资源管理器的地址栏输入text\\server.whisky.cloud在弹出的认证窗口中输入 Samba 用户名和密码operator1/redhat即可看到devcode共享目录。方法二映射网络驱动器右键“此电脑” → “映射网络驱动器”选择驱动器盘符输入\\server.whisky.cloud\devcode勾选“使用其他凭据连接”输入用户名密码1.7 多用户挂载multiuser问题使用credentials文件挂载后本地所有用户都用同一个 Samba 账户访问共享无法区分权限。解决方案multiuser挂载选项允许不同 Linux 用户使用自己的 SMB 凭据。配置步骤步骤 1创建客户端本地用户UID 需与服务器端一致bash[rootclient ~]# useradd -u 1000 operator1 [rootclient ~]# useradd -u 1001 developer1 [rootclient ~]# groupadd -g 2000 developers [rootclient ~]# usermod -G developers developer1 [rootclient ~]# echo redhat | passwd --stdin operator1 [rootclient ~]# echo redhat | passwd --stdin developer1步骤 2挂载时添加multiuser选项bash# 修改 /etc/fstab [rootclient ~]# vim /etc/fstab //server.whisky.cloud/devcode /mnt/smb cifs credentials/etc/samba/credentials,multiuser 0 0 # 重新挂载 [rootclient ~]# umount /mnt/smb [rootclient ~]# mount /mnt/smb步骤 3用户使用cifscreds添加凭据bash# operator1 用户登录后添加自己的 SMB 凭据 [operator1client ~]$ cifscreds add server.whisky.cloud Password: redhat # developer1 用户登录后添加自己的凭据 [developer1client ~]$ cifscreds add server.whisky.cloud Password: redhat步骤 4验证权限bash# operator1 只有读权限不在 write list 中 [operator1client ~]$ touch /mnt/smb/operator-file touch: cannot touch /mnt/smb/operator-file: Permission denied # developer1 有写权限在 write list 中 [developer1client ~]$ touch /mnt/smb/developer-file [developer1client ~]$ ls -l /mnt/smb/ -rw-r--r-- 1 developer1 developer1 0 Aug 6 14:40 developer-file2. VSFTPD 服务器2.1 FTP 协议与 VSFTPD 概述FTPFile Transfer Protocol文件传输协议是互联网上最古老的文件传输协议之一1971 年使用 TCP 端口 20数据和 21控制。VSFTPDVery Secure FTP Daemon是 Linux 上最流行的 FTP 服务器软件以其安全性、高性能和稳定性著称。核心特点特点说明安全性不使用 root 权限运行支持 SSL/TLS 加密高性能多进程模型处理并发连接效率高灵活配置支持匿名用户、系统用户和虚拟用户防暴力破解内置失败登录限制机制2.2 安装与防火墙配置bash# 安装 VSFTPD [rootserver ~]# yum install -y vsftpd # 启动服务 [rootserver ~]# systemctl enable vsftpd --now # 查看端口21/TCP [rootserver ~]# ss -lntp | grep 21 LISTEN 0 32 *:21 *:* users:((vsftpd,pid1234,fd3)) # 防火墙放行 FTP [rootserver ~]# firewall-cmd --permanent --add-serviceftp [rootserver ~]# firewall-cmd --reload2.3 配置匿名用户访问FTP 的匿名访问允许用户使用anonymous或ftp用户名登录无需密码。编辑配置文件bash[rootserver ~]# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak [rootserver ~]# vim /etc/vsftpd/vsftpd.confbash# 基本设置 anonymous_enableYES # 启用匿名用户 no_anon_passwordYES # 匿名用户无需密码 anon_root/var/ftp/pub # 匿名用户根目录 # 权限控制默认禁止上传 anon_upload_enableNO # 禁止匿名上传 anon_mkdir_write_enableNO # 禁止匿名创建目录 anon_other_write_enableNO # 禁止匿名删除/重命名 # 通用设置 dirmessage_enableYES # 显示目录消息 xferlog_enableYES # 启用传输日志 connect_from_port_20YES # 使用端口 20 进行数据连接测试匿名访问bash# 浏览器访问 ftp://server.whisky.cloud # 或命令行 [whiskyclient ~]$ lftp server.whisky.cloud lftp server.whisky.cloud:~ ls2.4 配置本地用户访问启用本地用户bash[rootserver ~]# vim /etc/vsftpd/vsftpd.confbashlocal_enableYES # 启用本地系统用户 write_enableYES # 允许写入 local_umask022 # 上传文件的 umask 值 #local_root/home/%u/ftp # 每个用户的独立根目录bash# 重启服务 [rootserver ~]# systemctl restart vsftpd测试本地用户登录bash# 在客户端测试 [whiskyclient ~]$ lftp -u whisky,redhat server.whisky.cloud lftp whiskyserver.whisky.cloud:~ ls2.5 主动模式 vs 被动模式FTP 使用两个端口控制端口21和数据端口。数据端口的连接方式有两种模式模式数据连接发起方防火墙要求主动模式PORT服务端主动连接客户端客户端防火墙需放行随机端口被动模式PASV客户端主动连接服务端服务端防火墙需放行被动端口范围被动模式配置推荐bash[rootserver ~]# vim /etc/vsftpd/vsftpd.confbash# 启用被动模式 pasv_enableYES pasv_min_port30000 pasv_max_port31000 pasv_address10.1.8.10 # 服务器公网 IPNAT 环境下必须配置bash# 防火墙放行被动端口范围 [rootserver ~]# firewall-cmd --permanent --add-port30000-31000/tcp [rootserver ~]# firewall-cmd --reload3. SMB vs VSFTPD选型对比维度SMBSambaFTPVSFTPD使用场景局域网协作共享大文件传输、对外下载服务访问方式挂载为本地目录通过 FTP 客户端访问用户管理Samba 独立用户数据库系统用户或匿名文件锁定✅ 支持❌ 不支持权限控制细粒度按用户/组粗粒度匿名/本地传输效率适合小文件频繁访问适合大文件批量传输跨平台支持Windows/Linux/macOS所有平台加密传输支持 SMB3 加密需配置 SSL/TLSFTPS典型应用办公文件共享、家目录软件仓库、日志归档4. 总结与速查手册4.1 核心知识点一览主题关键点Samba 用户需先创建系统用户再用smbpasswd -a添加到 Samba 数据库Samba 配置/etc/samba/smb.conf[global] 共享块Samba 客户端Linuxmount -o usernamexxxWindows\\server\sharemultiusercifscreds add让每个用户使用自己的 SMB 凭据VSFTPD 匿名anonymous_enableYES默认只读VSFTPD 本地用户local_enableYES使用系统账户登录被动模式pasv_enableYESpasv_min_port/pasv_max_port4.2 Samba 命令速查表命令作用smbpasswd -a 用户名添加 Samba 用户smbpasswd -x 用户名删除 Samba 用户pdbedit -L列出所有 Samba 用户testparm验证配置文件语法smbclient -L //host -U 用户查看共享列表mount -o username用户 //host/share /mnt挂载 SMB 共享cifscreds add host添加 multiuser 凭据cifscreds clear host清除 multiuser 凭据4.3 VSFTPD 配置参数速查表参数含义推荐值anonymous_enable启用匿名访问NO生产local_enable启用本地用户YESwrite_enable允许写入YESlocal_umask上传文件 umask022pasv_enable启用被动模式YESpasv_min_port/pasv_max_port被动端口范围30000-31000pasv_address被动模式公网 IPNAT 环境必须配置chroot_local_user限制用户在家目录YES4.4 /etc/fstab SMB 挂载选项速查选项含义credentials/path/file凭据文件路径uid/gid本地映射的用户/组 IDfile_mode/dir_mode文件/目录权限multiuser启用多用户凭据forceuid/forcegid强制使用指定 UID/GID_netdev网络可用后挂载4.5 常见错误排查错误原因解决方案session setup failed: NT_STATUS_LOGON_FAILURESamba 密码错误或用户不存在检查smbpasswd是否正确添加mount error(13): Permission denied挂载权限不足检查valid users配置smbd: error while loading shared librariesSamba 依赖问题yum reinstall sambaftp: connect: Connection refusedVSFTPD 未启动或防火墙拦截检查服务状态和防火墙500 OOPS: vsftpd: refusing to run with writable root根目录可写导致 chroot 拒绝确保 chroot 目录不可写425 Security: Bad IP connectingFTP 主动模式被防火墙阻断切换到被动模式4.6 思考与拓展原课后作业转化SMB 和 NFS 的主要区别是什么→ NFS 是 Linux/UNIX 原生协议适合 Linux 环境SMB 是 Windows 原生协议跨平台兼容性更好。SMB 支持更细粒度的用户和组权限控制。FTP 的主动模式和被动模式分别适用于什么场景→ 主动模式服务端主动连接客户端适合服务端防火墙宽松、客户端无防火墙的场景。被动模式客户端主动连接服务端适合客户端在 NAT 后或防火墙严格的场景——绝大多数现代环境推荐被动模式。Samba 的valid users和write list有什么区别→valid users控制谁能访问共享有读权限write list在read onlyyes时列表中的用户获得写权限。两者配合可精细控制读写分离。为什么 VSFTPD 配置chroot_local_userYES时用户根目录不能有写权限→ 安全机制防止用户通过 FTP 上传文件到 chroot 根目录时产生安全漏洞。解决方案在用户根目录下创建子目录如ftp将写权限赋予子目录。4.7 生产环境最佳实践场景建议Samba 权限设计valid users控制访问范围write list控制写权限实现最小权限原则Samba 用户管理为 Samba 用户创建锁定的系统账户/sbin/nologin禁止 SSH 登录Samba 版本设置server min protocol SMB2禁用不安全的 SMB1 协议VSFTPD 安全生产环境禁用匿名访问anonymous_enableNOVSFTPD 被动模式开启被动模式并指定端口范围配置防火墙放行传输加密敏感数据应配置 FTPSFTP over SSL或使用 SFTP基于 SSH替代 FTP日志监控定期检查/var/log/rsyncd.log和/var/log/vsftpd.log下期预告文件共享服务告一段落下一期我们将进入Web 服务——从最经典的Apache HTTP Server开始学习虚拟主机、SSL/TLS 加密、CGI/PHP 动态脚本支持以及访问控制与认证配置。Apache 是互联网上应用最广泛的 Web 服务器掌握它是每个 Linux 管理员的必修课。敬请期待第五期— Compiled and Authored by Whisky — Augest 6 th, 2026