自定义网络服务
Linux 操作系统是为网络而诞生的操作系统,它为用户进行网络服务配置提供了诸多便利。接下来将对用户配置自己的网络服务进行简单的介绍,通过本篇博客内容的学习,用户可以配置简单的网络服务程序。
1. xinetd/inetd
在 Linux 操作系统中,一些小的服务程序或者不经常使用的服务程序,被集成到一个服务器管理程序中,通常是 inetd,目前一般使用 xinetd。xinetd(eXtended InterNET services daemon),也叫做扩展因特网驻留程序。它是一种控制因特网服务的应用程序,例如常用的 TELNET 服务、FTP 服务和 POP 等服务程序通常都集成在这个服务器中。
在往后看之前,小伙伴先检査一下系统中是否已经安装了 xinetd 服务程序,可以使用如下命令:
$ ps ax|grep xinetd
如果没存安装 xinetd 服务程序,可以使用 apt-get install xinetd 安装这个软件包。
2. xinetd 服务配置
xinetd 的默认配置文件是 /etc/xinetd.conf,查看这个配置文件的内容会发现,它将 /etc/xinetd.d 目录里的文件包含了进来。
includedir /etc/xinetd.d
在 /etc/xinet.d 目录中有很多默认的配置文件,查看其中的 time 服务配置文件。
$ cat /etc/xinetd.d/time #査看 time 服务配置文件
# default: off #释默认值为打开
# description: An RFC 868 time server. This protocol provides a #描述信息
# site-independent, machine readable date and time. The Time service sends back
# to the originating source the time in seconds since midnight on January first
# 1900.
# This is the tcp version. #时间服务的 TCP 版本
service time #服务程序名称
{
disable = yes #默认为服务关闭
type = INTERNAL #类型为内部程序
id = time-stream #标识为 time-stream
socket_type = stream #流式套接字
protocol = tcp #协议为 TCP
user = root #root 用户启动
wait = no #不等待到启动完成
}
# This is the udp version. #时间服务的 UDP 版本
service time #服务程序名称
{
disable = yes #默认为服务关闭
type = INTERNAL #类型为内部程序
id = time-dgram #标识为 time-dgram
socket_type = dgram #数据报套接字
protocol = udp #协议为 UDP
user = root #root 用户启动
wait = yes #不等待到启动完成
}
服务 time 是一个时间服务,用于向客户端提供网络时间校准。对于一个服务 xinetd 的描述类型,按照如下格式进行定义:
service 服务名称
{
选项 = 值
选项 += 值
}
其中的 service 是必需的关键字,“ 服务名称 ” 要描述的服务名字,之后的属性表用大括号括起,其中的每一项都定义了由 service-name 定义的服务。服务名称是任意的,通常是标准网络服务名,也可增加其他非标准的服务。选项的操作符可以是 =、+=、或 -=。所有属性可以使用 =,其作用是分配一个或多个值,某些属性可以使用 “ += ” 或的形式,它的作用是将其值增加到某个表中,或将其值从某个表中删除。xinetd 的指示符如下表(xinetd 的指示符)所示。
指示符 | 描述 |
---|---|
socket_type | 网络套接字类型,流或者数据包,值可能为 stream(TCP),dgram(UDP),raw 和 seqpacket(可靠的有序数据报) |
protocol | IP协议,通常是 TCP 或者 UDP |
wait | yes/no,等同于 inetd 的 wait/nowait |
user | 运行进程的用户 ID |
server | 要激活的进程,必须指定执行程序的完整路径 |
server_args | 传递给 server 的变量,或者是值 |
instances | 可以启动的实例的最大值 |
start max_load | 负载均衡 |
log_on_success | 成功启动的登记选项 |
log_on_failure | 联机失败的时候的日志信息 |
only_from | 接受的网络或是主机 |
no_access | 拒绝访问的网络或是主机 |
disabled | 用在默认的 { } 中禁止服务 |
log_type | 日志的类型和路径 FILE/SYSLOG |
nice | 运行服务的优先级 |
id | 日志中使用的服务名 |
3. 自定义网络服务
此次以 vsftpd 为例进行自定义网络服务的设置。首先安装 vsftpd 服务器程序,使用命令 apt-get install vsftpd 进行安装。
现在应该以 root 的身份在 /etc/xinetd.d/目录中编辑文本文件 proftpd,内容如下:
# default: on 默认值为打开
# description: The vsftpd server vsftpd sessions;
# 这是一个 vsftpd 服务器设置文件
service vsftpd #服务程序名称
{
disable = no #默认为服务打开
port = 21 #侦听端口为 21
socket_type = stream #流式套接字
protocol = tcp #协议为 TCP
user = root # root 用户启动
server = /usr/sbin/vsftpd #服务程序路径为 /usr/sbin/vsftpd
type = UNLISTED
wait = no #不等待到启动完成
}
上述配置的含义如下所述。
█ 第 1 和第 2 行是注释行,不用管它。第 3 行是定义服务的名称为 vsftpd。
█ 第 5 行 disable 的意思是禁用,那么,disable=no 就是启动。
█ 第 6 行是指定该服务的端口,ftp 的端口是 21。如果不用 21 端口,可以根据 vsftpd.conf 文件做相应的改变。
█ 第 7 行是 socket 的类型,这里设为 stream (流)。
█ 第 8 行是指定协议,这里设为 tcp 协议。
█ 第 9 行是启动该服务的用户,设为 root。
█ 第 10 行是指定运行文件的路径。
█ 第 12 行是不等待至启动完成。
在编写完毕配置文件后,运行 killall -HUP xinetd。然后使用 ftp localhost 登录进行测试,可以发现 FTP 程序已经可以登录了。
小结
HTTP 协议、FTP 协议和 TELNET 协议是互联网比较常用的协议,分别用于 Web 访问、 文件传输和远程主机的登录。这 3 种协议都是基于 TCP 协议,利用文本命令进行控制。
NFS 协议是 Linux 上经常使用的一种协议,用于主机之间共享文件。由于 NFS 协议采用 UDP 协议作为传输基础,所以速度上要快得多。NFS 协议在嵌入式设备开发的时候经常使用。