嵌入式Linux:环境搭建之TFTP、NFS、SSH和FTP的安装和使用

发布时间:2024年01月09日

在我们做嵌入式Linux开发的时候,需要安装一些环境以方便我们的开发,本篇文章就来介绍一下TFTP、NFS、SSH和FTP的作用和环境搭建(以Ubuntu为例)。

1 TFTP

TFTP(Trivial File Transfer Protocol) 是一个简化的的文件传输协议(FTP),它可以用来在两个通过网络相连的主机之间传输文件。

它是一个轻量级的协议,所以没有提供像FTPSFTP的一些高级特性,但它广泛用于网络设备的配置、固件更新等场景。

  • TFTP协议缺乏身份验证和安全功能。因此,建议服务器根据需求实现访问控制措施或防火墙。

1.1 服务端

1、安装TFTP服务器

打开终端,输入apt指令来更新本地软件包列表,然后安装TFTP服务器:

sudo apt update
sudo apt install tftpd-hpa

如下图所示:

在这里插入图片描述

安装完成后,输入下面的指令来确定TFTP服务器是否成功安装和运行。

sudo systemctl enable tftpd-hpa

在这里插入图片描述

我们可以配置TFTP服务器在每次系统启动的时候就自动运行:

sudo systemctl enable tftpd-hpa

在这里插入图片描述

在安装完成后,TFTP服务器将监听UDP端口69,为了能将文件通过TFTP服务器传输到其它的系统,需要保证:

  • 拷贝待传输的文件到TFTP的工作目录
  • 设置文件的权限对所有用户可见

2、配置TFTP服务器

TFTP的配置文件在/etc/default/tftpd-hpa,打开这个文件:

sudo nano /etc/default/tftpd-hpa

文件的内容如下所示:

# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure"

我们修改为:

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure --create"
  • TFTP_USERNAME:表示TFTP执行时使用的用户
  • TFTP_DIRECTORY:TFTP的工作目录
    • 需要保证当前的用户有权限访问这个目录:sudo chown -R $USER TFTP_DIRECTORY
  • TFTP_ADDRESS:默认是:69,这里设置为0.0.0.0:69,表示服务器接受来自端口69上任何客户端的连接。
  • TFTP_OPTIONS:允许为TFTP服务器指定特定参数(-c,-s)

TFTP_OPTIONS可以设置TFTP服务器的各种行为,包括超时、安全设置、块大小、传输大小限制以及与文件传输操作相关的其他参数。这里使用了-s(--secure)标志,其他可能的标志包括-c(--create)、-a(--address)、-u(--user)等。不指定-c标志将禁止任何已连接的客户端向服务器上传新文件。

3、创建TFTP工作目录

配置完上面的文件后,创建一个共享的目录并设置相应的权限以允许不同的用户(客户端)访问它。

sudo mkdir -p /var/lib/tftpboot
sudo chown -R nobody:nogroup /var/lib/tftpboot
sudo chmod -R 777 /var/lib/tftpboot
  • nobody:nogroup:在Ubuntu中,/etc/passwd中有个nobody用户,/etc/group中有个nogroup组,在客户端访问TFTP的时候,服务端就会转化为这个用户组的用户权限来访问,这里设置一下所有者以让客户端能够正常访问。

最后,重启TFTP服务器来让配置生效:

sudo systemctl restart tftpd-hpa

1.2 客户端

为了测试TFTP服务端,我们可以安装最常用的TFTP客户端:tftp-hpa在另一台电脑中:

sudo apt install tftp-hpa

下载服务端TFTP工作目录下的文件到客户端

tftp -g -r 文件名 IP地址

假设目录下有一个1.txt,且服务端(Ubuntu)的IP为192.168.31.120
在这里插入图片描述
我们可以输入

tftp -g -r 1.txt 192.168.31.120

这样服务端的1.txt就下载到客户端了:
在这里插入图片描述
上传客户端文件到服务端

tftp -p -l 文件名 IP地址

如下图所示,客户端传输2.txt到服务端:
在这里插入图片描述
服务端收到文件:
在这里插入图片描述

2 NFS

2.1 介绍

NFS(网络文件系统,Network File System)是一种分布式文件系统协议,允许我们挂载远程的目录。这让我们能够管理不同位置的存储空间,多个客户端也可以更改这个空间。

我们在开发的过程中,如果我们更改了Linux内核或者设备树,就需要重新将镜像烧写到NAND/SD/EMMC等设备中,然后由UBoot拷贝到RAM。这样就很麻烦,我们就可以在UBoot中利用NFS来从远程的主机(如Ubuntu)中加载内核和设备树到开发板的RAM中。

2.2 安装过程

2.2.1 安装nfs

(1)服务端

服务端需要安装nfs-kernel-server

sudo apt update
sudo apt install nfs-kernel-server

(2)客户端

客户端需要安装nfs-common

sudo apt update
sudo apt install nfs-common

2.2.2 在服务端创建共享目录

创建目录

sudo mkdir /var/nfs/general -p

作为安全措施,NFS会把所有来自客户端的root操作转化到nobody:nogroup用户组。所以我们需要改变目录的属性来让客户端有访问权限。

sudo chown nobody:nogroup /var/nfs/general

2.2.3 配置服务端的NFS

/etc/exports是NFS服务器配置文件,用于定义需要分享的目录以及访问这些目录的权限。打开这个文件:

sudo nano /etc/exports

这个文件中的每一行表示一个配置,语法如下:

directory_to_share    client(share_option1,...,share_optionN)
  • client可以是IP地址、主机名或网络范围

我们需要为每个待共享的目录创建一行配置。其中,client_ip需要更改为实际的IP,设置为*表示允许所有IP。

/var/nfs/general    client_ip(rw,sync,no_subtree_check)
  • rw:使客户端具有读写权限
  • sync:强制NFS在回复之前将更改写入磁盘。这能保证文件的一致性,但降低了文件操作速度
  • async:数据先写到缓存区,再写到磁盘里中。这样有更好的性能,但可能会导致数据丢失或损坏。
  • no_subtree_check:默认情况下,NFS会检查用户访问的文件所在的子目录是否在/etc/exports中,即每个子目录都要在这个exports声明,否则禁止访问。该选项把这个特性关闭。
  • nohide:与no_subtree_check类似,所有子目录都要在exports中声明了才显示。该选项则设置显示所有的子目录。
  • no_root_squash:默认情况下,假设客户端处于root状态,它对于NFS的访问的权限会被映射为非特权。该选项则允许映射root特权。
  • insecure:默认情况下,NFS客户端必须使用保留端口(端口号大于1024)进行连接。

我常用的NFS配置为:(rw,nohide,insecure,no_subtree_check,async,no_root_squash)。如下图所示:
在这里插入图片描述

  • 设置完后重启NFS:sudo /etc/init.d/nfs-kernel-server restart

2.2.4 设置服务端防火墙

首先看一下防火墙是否启用,如果启用,看一下当前禁用的规则:

sudo ufw status

我这里没有打开:
在这里插入图片描述
如果打开了,我们要确保客户端的IP允许访问我们的NFS服务端

sudo ufw allow from client_ip to any port nfs
  • 替换client_ip为客户端的IP

2.2.5 设置客户端的挂载点和挂载目录

首先创建一个挂载的目录

sudo mkdir -p /nfs/general

假设服务端IP为192.168.31.120,挂载服务端的NFS目录:

mount -t nfs -o nolock,nfsvers=3,vers=3 192.168.31.120:/var/nfs/general /nfs/general

我们可以使用df -h查看挂载结果:
在这里插入图片描述
此时服务端的/var/nfs/general目录就和客户端的挂载目录/nfs/general中的内容同步了。
在这里插入图片描述

3 SSH

SSH服务允许用户通过远程终端连接到Ubuntu服务器,进行各种管理操作。这使得管理员可以在任何地方进行系统管理和维护,而无需直接访问服务器。这里我们的用途实际就是在Windows中通过SSH软件来访问Ubuntu的终端。

输入以下指令安装:

sudo apt-get install openssh-server
  • SSH服务默认运行在端口22。

这里的SSH软件我使用MobaXterm,设置服务端的IP和用户名端口:
在这里插入图片描述
点击连接后会提示输入密码,然后就进入终端了:
在这里插入图片描述

4 FTP

Ubuntu和Windows之间的文件互传,我们可以使用FTP协议来实现。当然虚拟机有VMTOOLS,只是使用FTP的话,在同一个局域网内就都可以传输。

1、安装FTP服务

sudo apt-get install vsftpd

2、更改配置

sudo vi /etc/vsftpd.conf

将这两个配置前面的#删掉:
在这里插入图片描述

  • write_enable=YES:开启FTP的写权限,即允许FTP用户上传文件或者修改服务器上的文件
  • local_umask=022:控制新创建的文件和目录的默认权限的。022表示不设置特殊权限,用户有rwx权限,组有rx权限,其他人有rx权限。

3、重启vsftp服务

sudo /etc/init.d/vsftpd restart

4、使用FTP客户端连接
这里以FileZilla为例进行连接:
在这里插入图片描述
主机设为Ubuntu的IP,端口为FTP默认端口21,用户名和密码就是Ubuntu登陆时的用户名和密码。连接成功后我们就可以看到Ubuntu中的文件:
在这里插入图片描述
我们就可以将WIndows中的文件传入Ubuntu了。

文章来源:https://blog.csdn.net/tilblackout/article/details/135111836
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。