SSH和FTP和Samba
327.2.5SSH和FTP和Samba
#include <stdio.h> // 引入标准输入输出头文件,为 printf 函数提供声明。
int main() // 定义程序入口函数,返回 int 类型的状态值。
{ // main 函数体开始。
printf("i am wfeng!\n"); // 输出字符串,并使用 \n 换行。
return 0; // 返回 0,表示程序正常结束。
} // main 函数体结束。
本节没有新编写 C 程序。以上是视频结尾通过 Samba 在 Windows 版 VS Code 中打开并保存的
test.c最终版本:讲师删除了上一节遗留的while (1);,随后按Ctrl+S保存。它用于验证 Windows 能否直接修改 Ubuntu 中的文件。
本节在 Windows 11 宿主机和 Ubuntu 20.04 虚拟机之间配置三类能力:用 SSH 远程登录、用 FTP 传输文件、用 Samba 将 Ubuntu 目录映射为 Windows 网络驱动器。视频中的 Ubuntu 用户名为 wfeng,虚拟机当时的 IPv4 地址为 192.168.31.230;IP 地址会随网络环境变化,不能机械照抄。
一、环境搭建
1.1 注意
- 确认 USB 串口连接到哪一侧。 视频开头,USB 转串口设备被 VMware 自动连接给 Ubuntu 虚拟机,导致 Windows 串口工具看不到 COM 口。若要在 Windows 中使用串口,就在 VMware 的提示框中选择连接到宿主机;若要在 Linux 中使用,则连接到虚拟机。同一 USB 设备不能同时由宿主机和虚拟机占用。讲师没有勾选“记住我的选择”,是为了之后可以方便地切换,并非任何场景都禁止记忆选择。VMware 官方说明
- 先处理虚拟机,再关闭宿主机。 正常结束实验时,应在 Ubuntu 内关机,或让 VMware 完整执行“挂起”后再关闭 Windows。挂起只是保存虚拟机运行状态,不等同于 Ubuntu 正常关机;虚拟磁盘仍在写入时强行断电可能损坏文件系统或虚拟机状态。
- 确认网络可达。 本节演示时宿主机能够访问
192.168.31.230。两台设备看似处于同一网段,也仍可能受到 VMware 网络模式、Windows 防火墙、Ubuntu 防火墙或无线网络客户端隔离的影响。
1.2 SSH
SSH(Secure Shell)提供加密的远程登录和远程命令执行能力。安装 OpenSSH Server 后,同一套 SSH 服务还可承载 SFTP、SCP 等加密文件传输方式。Ubuntu OpenSSH Server 文档
1.2.1 sudo apt-get install openssh-server
视频在 Ubuntu 中执行:
sudo apt-get install openssh-server
其中:
sudo:以管理员权限执行命令;apt-get install:从软件源安装软件包;openssh-server:SSH 服务端,核心守护进程为sshd;安装过程也会带上openssh-sftp-server。
安装完成后可检查服务状态和 TCP 22 端口:
systemctl status ssh --no-pager
ss -lntp | grep ':22'
若修改了 SSH 配置,应先检查配置,再重启服务:
sudo sshd -t
sudo systemctl restart ssh.service
1.2.2 Ubuntu中配置SSH
视频先用 ifconfig 查看虚拟机地址,得到 192.168.31.230。原笔记中的 if config 是 OCR 错误;命令名中间没有空格。若系统未安装 net-tools,可使用系统自带的现代命令:
ip -br address
应选取 Windows 能访问的网卡 IPv4 地址,而不是环回地址 127.0.0.1。本节没有修改 /etc/ssh/sshd_config;所谓“配置 SSH”主要是安装并启动服务、查明 IP,以及从 Windows 发起连接。
1.2.3 Windows中配置SSH
视频使用 MobaXterm:选择 Session → SSH,在 Remote host 中输入 192.168.31.230,再以用户 wfeng 登录。首次连接时,客户端会提示确认服务器主机密钥;实际使用中应核对指纹,而不是不加判断地接受,以免连接到被冒充的服务器。
登录后看到的是在 Ubuntu 上运行的远程 shell,并不是又启动了一套 Ubuntu。命令使用 Linux 路径和权限;虚拟机、网络和 SSH 服务都必须保持可用。MobaXterm 左侧的文件浏览器通常使用 SFTP,因此它与后文的传统 FTP 不是同一种协议。
视频为了演示使用了极弱的密码 0。该密码只能视作隔离实验环境里的临时示例;真实环境应使用强且唯一的密码,最好进一步配置 SSH 密钥认证。
1.3 传文件
本节演示两条图形化路径:FileZilla 通过 FTP 上传、下载文件;Windows 资源管理器通过 SMB(Samba)把 Linux 目录映射成网络驱动器。SSH 安装好以后,也已经具备更安全的 SFTP/SCP 路径。
1.3.1 FTP配置
视频安装的 FTP 服务端是 vsftpd:
sudo apt-get install vsftpd
传统 FTP 的登录凭据和数据默认不加密,不应直接暴露到互联网,也不适合不可信网络。Ubuntu 官方文档明确建议优先考虑 OpenSSH 提供的安全文件传输能力;SFTP 是基于 SSH 的协议,而 FTPS 是给 FTP 增加 TLS,两者不能混为一谈。Ubuntu FTP Server 文档
1.3.1.1 修改配置文件
视频执行:
sudo vim /etc/vsftpd.conf
思维导图写的是 sudo vi /etc/vsftpd.conf,二者都可以编辑该文件。讲师把这一行:
#write_enable=YES
改为:
write_enable=YES
这会打开 FTP 写命令的总开关。视频配置中还保留了 local_enable=YES 和 anonymous_enable=NO,所以演示的是本地 Linux 用户认证,而非匿名上传。能否真正写入某个目录,还要同时满足 Linux 文件所有者、用户组及权限位的要求;write_enable=YES 不会绕过文件系统权限。
视频按思维导图执行了旧式重启命令:
sudo /etc/init.d/vsftpd restart
在该系统中它经由 systemd 成功重启。更清晰的写法是:
sudo systemctl restart vsftpd.service
systemctl status vsftpd.service --no-pager
1.3.1.2 Windows中配置FTP
视频在 FileZilla 顶部的快速连接栏中填写:
- 主机:
192.168.31.230 - 用户名:
wfeng - 密码:视频中为
0,仅是弱密码演示
连接后,左侧是 Windows 本地文件,右侧是 Ubuntu 远端文件。视频进入远端 /home/wfeng/test,双击 Windows 端的开发板原理图 PDF 完成上传,又在远端右击 test.c 将其下载到 Windows。
FileZilla 支持 FTP、FTPS 和 SFTP,使用它并不自动说明连接是安全的,必须在站点管理器中明确选择协议。对于本节环境,更推荐直接选择 SFTP 并连接 SSH 的 TCP 22 端口。远端文件操作也可能覆盖或删除文件,其风险由账户权限和用户操作决定,不能笼统地说“使用 FileZilla 就不会破坏文件”。
“FTP 适合大文件、Samba 只适合小文件”不是协议本身的硬性边界。应按安全要求、使用习惯、网络质量、权限模型和是否需要像本地磁盘一样持续编辑来选择工具。
1.3.2 Samba配置
Samba 在 Linux 上实现 SMB 文件共享,使 Windows 可以通过 \\服务器\共享名 访问目录。视频思维导图列出的安装前命令顺序是:
sudo apt-get upgrade
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install samba samba-common
这组顺序不应作为推荐模板:软件包索引应先 update,而安装 Samba 通常不需要先做全系统 upgrade 或 dist-upgrade。本节需要的最小安装流程是:
sudo apt update
sudo apt install samba samba-common
大版本升级或依赖关系重排应另行评估,避免为了安装单个服务而无意改变整个实验系统。Ubuntu 软件包管理文档
1.3.2.1 查看Samba是否安装成功
视频执行:
samba -V
输出为 Version 4.15.13-Ubuntu。这里必须使用大写 -V;原笔记中的小写 -v 不准确。版本号只证明命令可用,不等于文件共享服务已经正确运行。还应检查:
systemctl status smbd.service --no-pager
sudo testparm -s
testparm 用于检查 smb.conf 的内部一致性并显示解析后的有效配置,但它不能单独证明网络、账户和目录权限全部正常。Samba testparm 手册
视频的安装输出提到了被屏蔽的 samba-ad-dc.service。本节配置的是普通独立文件服务器 smbd,不是 Active Directory 域控制器,所以不能把该提示等同于 Samba 文件共享安装失败。
1.3.2.2 设置Samba默认密码
视频先执行:
sudo mkdir /home/share
sudo chmod 777 /home/wfeng
sudo smbpasswd -a wfeng
smbpasswd -a wfeng 将已经存在的 Linux 用户 wfeng 加入 Samba 的账户数据库,并交互输入两次 Samba 密码;输入密码时终端不显示字符是正常现象。Samba 密码可以与 Linux 登录密码不同。Samba smbpasswd 手册
其中有两个重要问题:
- 视频创建了
/home/share,但后面的共享配置实际使用/home/wfeng/,因此/home/share在本节没有被使用。 chmod 777 /home/wfeng让所有本机用户都能读取、写入和进入整个家目录,权限过宽;后面再把整个家目录共享出去,会暴露Desktop、Documents、Downloads、test等全部内容。应只创建并授权专用共享目录。
较安全的单用户实验目录可这样准备:
sudo install -d -o wfeng -g wfeng -m 0750 /home/wfeng/share
sudo smbpasswd -a wfeng
1.3.2.3 备份配置文件
视频在修改前备份:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
这是必要的回退点。若新配置出错,可恢复后重新检查:
sudo cp /etc/samba/smb.conf.bak /etc/samba/smb.conf
sudo testparm -s
备份文件也可能包含敏感的路径和认证相关设置,不应把它随意上传或开放给普通用户。
1.3.2.4 修改配置文件
视频使用 sudo vim /etc/samba/smb.conf,并在配置文件末尾粘贴思维导图中的内容。下面保留画面中出现的有效配置行,未替讲师优化:
security = user
username map = /etc/Samba/smbusers
[share]
comment = Shared Folder with username and password
path = /home/wfeng/
public = no
valid users = wfeng
browsable = no
create mask = 777
directory mask = 777
force user = wfeng
force group = wfeng
available = yes
browseable = yes
writable = yes
这份课堂配置能够说明各字段的位置和作用,但不宜直接用于真实环境:
[share]是 Windows 看到的共享名,path才是 Ubuntu 上的真实目录。security和username map是全局参数,应放在[global]中;视频把内容直接追加到文件末尾,可能落在前一个共享段内。/etc/Samba/smbusers还写错了标准目录名的大小写,而且本节并未创建该映射文件,因此该行没有必要。browsable与browseable是同一参数的两种拼写,配置先写no、后写yes,后者覆盖前者。即使设为不可浏览,知道准确 UNC 路径的用户仍可能直接访问。create mask = 777会允许普通文件出现不必要的可执行权限;directory mask = 777也过宽。掩码约束新建对象的权限,仍要与客户端请求、强制权限项和底层 Linux 权限共同作用。force user、force group会让连接后的文件操作强制使用指定身份,削弱多用户场景的所有权区分和审计价值;本节的单用户共享并不需要它们。public = no表示不允许访客访问;writable = yes表示共享可写,但 Samba 仍不能突破 Linux 文件系统权限。Samba smb.conf 手册
如果目标只是让 wfeng 访问一个专用目录,可另行采用更小的配置;这是安全实践示例,不是对视频画面中源码或配置的冒充还原:
[share]
comment = wfeng project share
path = /home/wfeng/share
browseable = yes
read only = no
guest ok = no
valid users = wfeng
create mask = 0640
directory mask = 0750
修改后先执行 sudo testparm -s,确认语法和最终生效值,再重启服务。Ubuntu 官方的 Samba 文件服务器说明也强调要同时准备目录、配置共享和重启服务。Ubuntu Samba 文件服务器文档
视频讲解绝对路径与相对路径时提到 cp test/test.c /etc:在当时的 /home/wfeng 下,test/test.c 是相对路径,/etc 是绝对路径。它只是路径示意,并不是 Samba 配置步骤;普通用户也无权直接向 /etc 写文件。
1.3.2.5 重启Samba服务器
思维导图给出:
sudo /etc/init.d/samba restart
视频实际执行后得到 -bash: /etc/init.d/samba: No such file or directory,因此这条命令在该 Ubuntu 环境中失败。随后执行:
sudo service smbd restart
没有报错,完成了 smbd 重启。使用 systemd 时更推荐:
sudo testparm -s
sudo systemctl restart smbd.service
systemctl status smbd.service --no-pager
现代 SMB 直接访问主要使用 TCP 445。只有依赖旧式 NetBIOS 名称发现时才可能还要关注 nmbd;视频通过 IP 和明确共享名连接,并不依赖网络浏览发现。
1.3.2.6 Windows中配置Samba
视频在 Windows 文件资源管理器中打开“此电脑”,选择“更多”菜单中的“映射网络驱动器”,指定盘符 U:,并输入:
\\192.168.31.230\share
UNC 路径开头必须是两个反斜杠。share 对应 smb.conf 中的 [share],不是 Linux 目录名。随后用 Samba 用户 wfeng 及其 Samba 密码认证。视频第一次出现“拒绝访问”,调整后成功映射,U: 盘中直接显示 /home/wfeng/ 下的多个目录,这也印证了课堂配置共享的是整个家目录。
若 Windows 缓存了错误凭据,可断开旧映射并检查“凭据管理器”;公用电脑上不应勾选永久记住凭据。若 DHCP 导致虚拟机地址改变,还应重新用 ip -br address 查询地址,或配置稳定的名称/地址分配。
二、结束
完成映射后,视频在 U: 盘进入 test 目录,用 Windows 版 VS Code 打开 test.c,删除上一节遗留的 while (1);,并按 Ctrl+S 保存。文首代码块就是画面中的最终内容。
这里的“在线编程”准确地说是:编辑器运行在 Windows,文件实际存放在 Ubuntu,保存动作通过 SMB 写回 Linux。它不是云端编程,也不代表程序已被编译或运行。能打开文件不等于一定能保存;最终写入仍受 Samba 规则和 Linux 目录、文件权限共同约束。
三、SSH和FTP和Samba
本节几种方式的关系如下:
| 能力 | 常用端口 | 默认加密 | 本节用途 |
|---|---|---|---|
| SSH | TCP 22 | 是 | Windows 远程登录 Ubuntu 并执行命令 |
| SFTP / SCP | 通常随 SSH 使用 TCP 22 | 是 | 安全上传、下载文件 |
| FTP | 控制连接通常为 TCP 21,另有数据连接 | 否 | FileZilla 图形化上传、下载演示 |
| SMB / Samba | 现代实现主要为 TCP 445 | 取决于协议版本和双方配置,不能默认视为端到端安全通道 | 将 Linux 目录映射成 Windows 网络驱动器 |
不要把 FTP 或 SMB 服务直接暴露到公网。跨不可信网络访问时,应优先使用 SSH/SFTP,或先通过受控 VPN 进入实验网络。
3.1 SSH编译
SSH 本身不负责“编译”,它只是让 Windows 用户在 Ubuntu shell 中执行 Ubuntu 上的编译器。典型流程是先通过 Samba、SFTP 或编辑器保存源文件,再在 SSH 终端中执行上一节已经使用过的编译命令,例如:
cd /home/wfeng/test
gcc test.c -o test
本节视频没有再次展示这两条编译命令,只说明后续可以通过 SSH 完成编译。因此不能把按下 Ctrl+S 误认为程序已经构建。虚拟机必须处于运行状态,SSH 服务和网络也必须可达。
3.2 Samba
Samba 的核心链路是:准备 Linux 目录与权限 → 创建 Samba 用户 → 配置 [share] → 用 testparm 校验 → 重启 smbd → Windows 通过 \\IP\share 认证访问。任一层出错,都可能表现为“找不到网络路径”“拒绝访问”或“能读不能写”。
3.2.1 任务信息资源知导图
本标题中的“知导图”是原笔记/课程标题中的文字,实际指本节配套的任务信息思维导图。导图适合快速查看命令,但画面已经证明其中的 /etc/init.d/samba restart 在当前系统失败,且更新顺序、目录权限和共享范围也需要修正,不能跳过实际输出照抄。
排查 Samba 时可按从底层到上层的顺序检查:
ip -br address
systemctl status smbd.service --no-pager
sudo testparm -s
ss -lntp | grep ':445'
namei -l /home/wfeng/share
sudo journalctl -u smbd.service --no-pager -n 50
依次确认 IP、服务状态、配置解析结果、监听端口、整条目录路径的权限,以及服务日志,比反复重装软件更容易定位问题。
3.3 Linux scp命令
视频只在思维导图中列出 SCP 学习资料,没有实际演示。SCP 通过 SSH 认证并加密传输,基本写法如下:
scp local-file wfeng@192.168.31.230:/home/wfeng/test/
scp wfeng@192.168.31.230:/home/wfeng/test/test.c .
第一条从当前计算机上传,第二条把远端 test.c 下载到当前目录。复制目录可加 -r,保留时间戳和模式可加 -p。目标位置已有同名文件时可能被覆盖,执行前要核对方向、主机、用户名和路径。SCP 与 SFTP 都依赖 SSH,不能把它们称为传统 FTP。
3.4 Windows局域网文件共享
需要区分三个概念:
- Windows 文件共享:Windows 原生通过 SMB 把 Windows 目录共享给局域网设备。
- Samba:Linux/Unix 上的 SMB 实现,本节用它把 Ubuntu 目录提供给 Windows。
- VMware Shared Folders:虚拟化软件提供的宿主机与客户机共享机制,不是通用的局域网文件共享协议;本节没有配置它。
原笔记所说“Windows 共享文件夹不能直接编辑,是因为两边文件系统不同”并不成立。SMB 或 VMware 的共享层会抽象底层文件系统差异,能否编辑主要取决于共享模式、账户权限、底层文件权限、文件锁和客户端行为。视频已经实际证明 Windows 能通过 Samba 修改并保存 Ubuntu 中的 test.c。
四、本节关键纠正
- 用户名统一为视频中的
wfeng,不是 OCR 产生的wangfeng等写法。 - Ubuntu 查询地址的命令是
ifconfig,不是if config;更推荐ip -br address。 - Samba 版本参数是大写
samba -V,主配置文件是/etc/samba/smb.conf。 - Windows 网络路径是
\\192.168.31.230\share,开头必须有两个反斜杠。 /etc/init.d/samba restart在视频环境中明确失败;成功执行的是sudo service smbd restart。- 课程创建的
/home/share没有被后续配置使用,而chmod 777 /home/wfeng和共享整个家目录都属于过宽权限。 - SSH/SFTP/SCP 默认提供加密通道;传统 FTP 默认明文;Samba 是 SMB 文件共享实现,不能按文件大小简单划分这些工具。
- “能在 Windows 中保存 Linux 文件”来自共享协议和权限配置,不是因为两端使用相同文件系统。
核对依据
- 视频:
videos/327.2.5SSH和FTP和Samba.mp4 - 转录:
transcripts/327.2.5SSH和FTP和Samba.txt、transcripts/327.2.5SSH和FTP和Samba.srt - Ubuntu OpenSSH Server 文档
- Ubuntu FTP Server 文档
- Ubuntu Samba 文件服务器文档
- Samba
smb.conf官方手册 - Samba
smbpasswd官方手册 - Samba
testparm官方手册