【3】配置嵌入式开发常用服务

1、NFS(网络文件系统)

1.1 NFS服务介绍

NFS(Network File System,网络文件系统):本地的NFS客户端读写远端NFS服务器上的文件,如同访问本地文件一样,用于两台Linux机共享文件,如通过NFS启动开发板,操作方便,可以保护开发板,还可以将服务器上的目录挂载到开发板目录下,直接在开发板下实时调试

NFS采用客户-服务器的工作模式,服务器将某个目录设置为共享输出目录,客户机通过将这个目录挂载到自己的文件系统中来共享服务器上的输出,挂载点可以与服务器上的不同

NFS工作方式:为了实现平台无关性,NFS基于OSI底层实现

  • 基于会话层的远程过程调用(RPC)为NFS提供所需的网络连接
  • 基于表示层的外部数据表示(XDR)为NFS提供所需的网络连接及解释基于这些连接发送的数据格式,使NFS可正常工作于不同平台

远程过程调用(RPC):NFS本身是没有提供信息传输的协议和功能的,但NFS能让我们通过网络进行资料的共享,这是因为NFS使用了一些其他的传输协议RPC,NFS使用的端口是2049,但由于文件系统非常复杂,NFS会启用额外的端口传输数据(随机选择,小于1024),NFS通知客户端这些随机的端口必须采用RPC,远程过程调用是能使客户端执行其他系统中程序的一种机制,RPC最主要的功能是记录每个NFS功能对应的端口,在客户端请求时将端口和功能的对应信息传递给请求数据的NFS客户端,让客户端连接到正确的端口上,从而实现数据传输
NFS支持的功能特别多,不同的功能都会开启不同的进程,每启动一个进程就会用一个端口来传输数据,这导致NFS功能对应的端口无法固定,而是随机选取一些小于1024的端口来进行数据的传输

1.2 客户端NFS和服务端NFS通讯过程

客户端NFS和服务端NFS通讯过程
(1)用户应用程序在客户端上发出NFS文件存取的请求,这时客户端上的RPC服务就会通过网络向服务器端的RPC服务的111端口发出NFS文件读取请求;
(2)服务器端的RPC服务会找到已注册对应的NFS守护进程的端口,并且将这个端口通知客户端的RPC服务;
(3)NFS获取到正确的端口后就会直接与NFS守护进程建立连接,开始数据的传输;
(4)客户端将数据存取成功后会把结果返回给应用程序,这样完成一次存取操作

NFS的各项功能都要向RPC服务注册,RPC服务能获取到NFS各个功能对应的端口号,因此NFS客户端才能通过向RPC服务请求从而找到正确的端口与服务器建立连接

1.3 配置使用NFS服务

1.3.1 安装NFS服务

(1)检测是否安装NFS,启动NFS服务时需要portmap软件

$ sudo apt-get update
$ dpkg -l |grep -i "nfs"
root@renyl-virtual-machine:/home/renyl# dpkg -l | grep -i "nfs"
ii  libnfs13:amd64                                 4.0.0-1build2                           amd64        NFS client library (shared library)
ii  libnfsidmap1:amd64                             1:2.6.3-3ubuntu1                        amd64        NFS idmapping library
ii  nfs-common                                     1:2.6.3-3ubuntu1                        amd64        NFS support files common to client and server
ii  nfs-kernel-server                              1:2.6.3-3ubuntu1                        amd64        support for NFS kernel server

nfs-common:NFS客户端程序
nfs-kernel-server:NFS核心服务程序

(2)安装NFS服务器

$ sudo apt-get install nfs-kernel-server

(3)启动与停止NFS服务

$ /etc/init.d/nfs-kernel-server start|stop|restart

(4)启动NFS服务器后,可以使用ps命令查看进程

$ ps-aux | grep -i "nfs"
root@renyl-virtual-machine:/home/renyl# ps -ef | grep -i 'nfs'
root         817       1  0 15:33 ?        00:00:00 /usr/sbin/nfsdcld
root        2551       2  0 16:11 ?        00:00:00 [nfsd]
root        2552       2  0 16:11 ?        00:00:00 [nfsd]
root        2553       2  0 16:11 ?        00:00:00 [nfsd]
root        2554       2  0 16:11 ?        00:00:00 [nfsd]
root        2555       2  0 16:11 ?        00:00:00 [nfsd]
root        2556       2  0 16:11 ?        00:00:00 [nfsd]
root        2557       2  0 16:11 ?        00:00:00 [nfsd]
root        2558       2  0 16:11 ?        00:00:00 [nfsd]
root        2560    2158  0 16:11 pts/0    00:00:00 grep --color=auto -i nfs

nfsd:nfs核心守护进程,其主要功能是判断客户端是否能够访问,来管理客户端能否登录到nfs服务器,nfs启动后至少有2个守护进程,一个是用于控制客户端能否登录,一个用于控制客户端能否取得权限的(RPC守护进程)

root@renyl-virtual-machine:/home/renyl# ps -ef | grep -i 'rpc'
root         375       2  0 15:33 ?        00:00:00 [rpciod]
_rpc         532       1  0 15:33 ?        00:00:00 /sbin/rpcbind -f -w
statd       1105       1  0 15:33 ?        00:00:00 /sbin/rpc.statd
root        2546       1  0 16:11 ?        00:00:00 /usr/sbin/rpc.idmapd
root        2547       1  0 16:11 ?        00:00:00 /usr/sbin/rpc.mountd
root        2639    2158  0 16:18 pts/0    00:00:00 grep --color=auto -i rpc

rpc:两个守护进程,一个是rpc.moutd,主要功能是管理nfs文件系统,当客户端顺利登入nfsd服务器,在使用文件之前,需要经过文件权限的认证,会读取nfs配置文件来比对客户端权限;另一个rpc服务是rpc.idmapd,这个进程主要负责uid和gid的映射,管理nfs共享目录的权限和安全设置

1.3.2 NFS服务配置

(1)在NFS的主配置文件/etc/exports中进行设置,然后启动NFS服务,在exports文件中可以定义NFS系统的输出目录(即共享目录)、访问权限和允许访问的主机等参数

[共享的目录] [主机名或IP(参数1,参数2)]
/nfs/public 192.168.0.0/24(rw,sync,no_subtree_check)

exports文件中字段含义:

/mnt/nfs-share:共享目录名
192.168.192.0/24:表示指定网段的所有主机
rw/ro:rw设置输出的共享目录可读写,与ro不能共同使用
sync:设置NFS服务器同步写磁盘,这样不会轻易丢失数据
no_subtree_check:不检查父目录权限

(2)挂载nfs文件系统

$ mount -t nfs localhost:/opt/root_fs/mnt nfs-client

2、Samba服务

2.1 Samba服务介绍

早期Linux系统中,文件在不同主机之间的传输大多是使用FTP服务,但FTP服务存在一个问题,无法直接修改主机上的文件,FTP服务(基于TCP/IP)实现了跨平台分享,但无法实时的修改共享数据,NFS服务(共享目录)解决了共享数据的修改问题,但没有解决跨平台问题(只能使Unix系列的主机上相互共享),Samba服务综合了FTP和NFS的优点,既实现了跨平台的数据传输,还满足了修改数据的功能

Samba是运行在Linux主机上的服务器软件,使Linux系统能够使用SMB通信协议,实现Windows主机和Linux主机之间的资源共享,Samba之所以能够工作,是因为它模仿的是Windows内核的文件和打印共享协议,称为SMB协议,SMB协议是C/S结构的协议,客户机用过该协议可以访问服务器上的共享文件系统、打印机及其他资源

Samba服务的主要功能:

  • 提供文件和打印机共享:使得同一个网络内的Windows用户可以在网上邻居访问该目录
  • 决定每个目录可以由哪些人访问,具有哪些权限:Samba允许设置一个目录让一个人、组或者所有人访问
  • 提供SMB客户功能:利用Samba提供的smbclient程序可以在Linux下类似于FTP的方式访问Windows的资源
  • 在Windows网络中解析NetBIOS:各主机需定期向局域网广播自己的身份信息
  • 提供命令行工具:三个主要套件
    • samba:提供SMB服务器所需的各项服务程序,其中smbd、nmbd是Samba的核心守护进程,在服务器启动到停止期间持续运行,smbd监听139TCP端口,nmbd负责监听137TCP端口和137UDP端口,smbd处理来到的SMB数据包,为使用该数据包的资源与Linux进行协商,处理文件和打印机共享请求,nmbd进程使得其他主机可浏览Linux服务器,处理NetBIOS名称服务请求和网络浏览功能
    • samba-common:提供Samba的主配置文件(Smb.conf),配置文件语法检验的测试程序(testparm)等,Samba主要设置分为两大部分,第一是服务器的相关设定(global),如工作组、NetBIOS名称与密码等级等,第二是分享的目录等相关设定,如实际目录、分享资源名称与权限等
    • smaba-client:提供当Linux作为Samba Client端时所需要的工具指令,例如smbclient和smbmount工具等

Samba工作原理:客户端向Samba服务器发起请求,请求访问共享目录,Samba服务器接收到请求之后会查询samba.config文件,查看共享目录是否存在以及来访者的权限,如果来访者具有相应的访问权限,就会允许客户端访问,最后Samba会将访问过程中的系统信息以及采集到的用户访问行为存放在日志文件中

2.2 配置Samba服务

2.2.1 安装Samba服务

(1)使用dpkg命令查看安装信息

$ dpkg -l | grep -i "samba"

(2)安装samba服务器

$ sudo apt-get install samba

(3)启动与停止Samba服务

$ service Samba restart

(4)使用ps命令查看进程

$ ps -ef| grep -i 'mbd'
root@renyl-virtual-machine:/home/renyl# ps -ef | grep -i 'mbd'
root        3134       1  0 10:29 ?        00:00:00 /usr/sbin/nmbd --foreground --no-process-group
root        4199       1  0 11:37 ?        00:00:00 /usr/sbin/smbd --foreground --no-process-group
root        4201    4199  0 11:37 ?        00:00:00 smbd: notifyd .
root        4202    4199  0 11:37 ?        00:00:00 smbd: cleanupd 
root        4260    2123  0 11:44 pts/0    00:00:00 grep --color=auto -i mbd

smbd提供了SMB文件与打印服务共享,提供了共享模式(share mode)与用户模式(user mode)两证认证方式,共享模式最简单也最不提倡,一个密码可以被指定为某一个共享目录或打印机,可以被任何访问该共享的人使用,在用户模式下,每个用户拥有自己的用户名和密码,系统可以为共享设置不同的访问权限,smbd主要利用TCP协议传输数据,开放的端口是139和445
nmbd是响应NetBIOS名字解析请求的服务,请求由SMB客户端产生的,也参与构造Windows网上邻居查看的浏览协议,当SMB客户机启动时,会企图查找一个SMB服务器,要知道SMB服务器的ip地址(即名字解析),分为两种形式,广播与点对点;nmbd也可以作为一个WINS服务器,客户端会发送自己的NetBIOS名字和IP地址给WINS服务器,WINS用一个简单的数据库保存这个信息,但客户端想要与其他客户端通讯时,就会询问WINS服务器,如果WINS有这样的信息,就会返回对应的IP地址,类似于DNS,nmbd主要利用UDP协议,137、138端口负责名字解析的任务

2.2.2 配置Samba服务

(1)创建共享目录/home/ro-samba(只读目录)、/home/rw-samba(可读可写目录)

$ mkdir /home/ro-samba
$ mkdir /home/rw-samba

(2)修改smb.conf配置文件

主配置文件由两部分构成:

  • Global Settings(55-245行) :该设置都是与Samba服务整体运行环境有关的选项,设置项目是针对所有共享资源
  • Share Definitions(246-尾行):该设置针对的是共享目录个别的设置,只对当前的共享资源起作用

修改smb.conf配置文件
Samba的配置文件在/etc/samba目录中,配置文件名为smb.cnof

$ vi /etc/samba/smb.conf

(3)设定Samba用户,把root加入到Samba用户中,并设置新密码

$ smbpasswd -a root

(4)从Windows中访问Linux共享目录

\\192.168.192.132

2.3 Linux访问Windows共享

2.3.1 使用Samba-Client访问Windows共享文件

(1)配置Windows共享目录
(2)查看Windows主机中的共享资源

$ smbclient -L //192.168.192.1/

(3)访问Windows主机中的共享资源

$ smbclient //192.168.192.1/share -U admin
2.3.2 使用mount挂载Windows共享文件

将Windows主机的共享文件夹挂载到本地主机的/mnt/win目录

$ mount -t cifs //192.168.192.1/share /mnt/win -o username=admin

2.4 Samba共享进阶

建立共享目录share,该目录拒绝其他用户访问,仅允许Samba组中的三个用户访问,root只读,smbuser可读写,smbguest拒绝访问

(1)在/home目录下建立共享文件夹share,并修改share文件夹权限

root@renyl-virtual-machine:/home# mkdir share
root@renyl-virtual-machine:/home# chmod 777 share

(2)创建smbguest用户,设置系统密码,添加为Samba用户

root@renyl-virtual-machine:/home# useradd smbguest
root@renyl-virtual-machine:/home# passwd smbguest
root@renyl-virtual-machine:/home# smbpasswd -a smbguest

(3)创建Samba组,将用户添加到组中

root@renyl-virtual-machine:/home# groupadd samba
root@renyl-virtual-machine:/home# gpasswd -a root samba
root@renyl-virtual-machine:/home# gpasswd -a smbguest samba
root@renyl-virtual-machine:/home# gpasswd -a smbuser samba

(4)修改配置文件/etc.samba/smb.conf,并重启服务

root@renyl-virtual-machine:/home# vi /etc.samba/smb.conf

//****smb.conf****//
[share]
	commment = writer able share
	path = /home/share
	writeable = no
	write list = smbuser
	valid users = @samba
	invalid users = smbguest

root@renyl-virtual-machine:/home# /etc/init.d/smbd restart

(5)Windows端进行验证,//192.168.192.132


3、TFTP服务

3.1 TFTP服务介绍

TFTP服务器是工作于宿主机上的软件,可以提供目标机文件系统映像文件的下载,FTP协议全称是远程文件传输协议,用于简化网络上主机之间文件传送的协议,FTP协议的任务是从一台计算机将文件传送到另一台计算机,与两台计算机所处的位置、连接方式、是否使用相同的操作系统无关,FTP服务采用C/S结构,客户端用户利用FTP客户端程序连接到远程服务器的FTP服务器程序,向FTP服务程序发送命令,服务程序执行用户所发出的命令,并将结果返回给客户端,vsftp是一种在Unix/Linux中非常安全且快速稳定的FTP服务器

TFTP是一个基于UDP协议实现的用于客户机和服务器之间进行简单文件传输的协议,适用于开销不大、不复杂的应用场合,专门为小文件传输设计,只能从服务器上获取文件或者向服务器写入文件,不能获取目录,也不能认证,TFTP协议的应用包括为嵌入式设备下载引导文件,可以把固件代码下载到嵌入式设备等,另外可以用于路由器等设备的配置,路由器可以在指定的TFTP服务器上存放配置参数,用于修复路由器;TFTP支持多种文件传输发放时,由系统决定,大多数系统支持两种模式,文本模式(ASCII)和二进制模式(Binary),二进制模式更快

FTP服务器与FTP客户机之间会建立两个网络连接,分别是控制连接和数据连接,控制连接用于传输FTP命令和响应结果,数据连接负责传输文件,控制端口一般是21,数据端口与FTP的应用模式有关,**主动模式(PORT方式)**是20,主动模式是FTP服务器默认工作模式,FTP客户端开启一个随机选择的TCP端口,向FTP服务器的21端口请求建立连接,完成3次握手后,控制连接建立,当需要传送数据时,客户端通过命令通道用一个port command告诉服务器,客户端使用另一个TCP端口做数据通道,服务器用20端口与TCP端口建立数据连接,连接方向是从服务器到客户端,TCP分组中会有一个SYN标志,客户端会返回一个带ACK标志的确认分组,并且完成另一次三次握手过程,开启数据传输;**被动模式(PASV方式)**由服务器与客户端协商解决,FTP客户端开启一个随机选择的TCP端口,向FTP服务器的21端口请求建立控制连接,当需要传送数据时,客户端通过命令通道用一个PASV command告诉服务器,要求进入被动传输模式,服务器挑选一个TCP端口并用控制连接告诉客户端,客户端用另一个TCP端口连接服务器端口,这里是客户端主动连接服务器端的数据端口

3.2 配置TFTP服务

3.2.1 安装TFTP服务

(1)可使用dpkg命令查看安装信息

$ dpkg -l | grep -i "tftp"

(2)安装tftp服务器,客户端需要安装tftp-hpa,服务器端需要安装tftpd-hpa

$ apt install tftp-hpa tftpd-hpa
$ apt install xineted

xinetd:新一代的网络守护进程服务程序,常用来管理多种轻量级的Internet服务,在Linux中通常有一些不常用的服务,没有被单独作为守护进程在开启时启动,Linux把这些服务的监听端口全部由xinetd集中来监听。当收到相应的客户端请求后,xinetd进程就会临时启动相应的服务,并把该端口移交给相应的服务,客户端断开之后服务进程结束,xinetd继续监听
(3)启动与停止TFTP服务

$ service xinetd restart
$ service tftpd-hpa restart

(4)查看TFTP服务器

$ netstat -a | grep tftp
$ ps -ef | grep tftp
3.2.2 配置TFTP服务

(1)修改TFTP默认配置文件 /etc/default/tftpd-hpa

#/etc/default/tftpd-hpa
TFTP_USERNAME="root" 
TFTP_DIRECTORY="/opt/tftpboot"  //TFTP主目录
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-l -c -s"  //TFTP启动参数

-l :以stand alone模式(该程序始终处于监听状态)启动TFTP服务,而不是从xinetd启动(super daemon模式,处于休眠状态,直到被唤醒,服务的管理者)
-c :可创建新文件
-s :改变TFTP启动的根目录

(2)修改xinetd服务配置文件

#/etc/xinetd.d/tftp
service tftp
{
        disable         = no
        server          = /usr/sbin/in.tftpd
        server_args     = -s /opt/tftpboot -c
        socket_type     = dgram
        protocol        = udp
        user            = root
        wait            = yes
        per_source      = 11
        cps             = 100 2
        flags           = IPv4
}

(3)TFTP客户端使用:

$ tftp 192.168.91.129

通常出现的错误:

  • Error code 0:Permission denied
  • Erroe code 1:File not found,默认情况下只能上传远程TFTP服务器已有的文件,将本地的文件上传并覆盖服务器上的原文件,所有先在服务器上建一个同名文件,上传目录中没有的为文件需要修改TFTP服务器的配置文件并重启服务,在server_args增加 -c 参数

TFTP是一个简单的文件传输协议,没有权限设置,不需要用户登录认证,FTP主动模式有一个问题,由服务端发起连接命令,向客户端发起命令,在很多场合不能使用,会被防火墙拦截掉;被动模式,服务器端受到PASV命令后,服务器会分配端口告诉客户端,客户端连接服务端端口,解决了防火墙过滤问题,因此在大多数情况下使用TFTP被动模式


4、SSH服务

4.1 SSH服务介绍

SSH服务用于Windows远程控制Linux,有两个作用,其一是安全的访问控制,其二是文件的传输,SSH协议是一种在不安全的网络环境中,通过加密和认证机制,实现安全的远程访问以及文件传输等业务的网络安全协议,免费开源实现OpenSSH

两种级别的安全验证
(1)第一种级别(基于口令的安全验证):只要你知道自己账号和口令,就可以登录到远程主机
(2)第二种级别(基于密钥的安全验证):需要依靠密钥,也就是必须为自己创建一对密钥(公钥和私钥),并把公用 密钥放在需要访问的服务器上

4.2 配置SSH服务

4.2.1 安装SSH服务

(1)可使用dpkg命令查看安装信息

$ dpkg -l | grep -i "ssh"

(2)安装SSH服务器

$ sudo apt-get install openssh-server
$ sudo apt-get install openssh-client

(3)启动与停止SSH服务

$ /etc/init.d/ssh start

(4)启动SSH服务器后,可以使用netstat命令查看进程

$ netsatt -a | grep ssh
4.2.2 配置SSH服务

(1)修改SSH默认配置文件/etc/ssh/sshd_config

  1. 使sshd服务运行在非标准端口上,添加一行内容为(假定设置监听端口是12345):port 12345
  2. 在客户端,用ssh <server addr> -p 12345登录服务器
  3. 只允许ssh v2的连接,设置protocol 2
  4. 禁止root用户通过ssh登录,设置PremitRootLogin no
  5. 禁止用户使用空密码登录,设置PermitEmptyPasswords no
  6. 限制登录失败后的重试次数,设置MaxAuthTries 3
  7. 只允许在列表中指定的用户登录,设置AllowUsers user1 user2

(2)使用SSH登录到远程主机
第一次使用ssh登录远程主机时,会出现没有找到主机密钥的提示信息,输入“yes”后,系统会将远程主机的密钥加入到主目录的.ssh/hostkeys下

$ ssh 192.168.91.129

(3)使用scp命令将本地文件拷贝至远程机器

$ scp local_file remote_username@remote_ip:remote_folder

(4)Windows端使用SSH Secure Shell Client软件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值