全部博文(135)
2010年(135)
分类: LINUX
2010-05-22 21:44:13
最近心血来潮地安装了Ubuntu Server 9.10来尝鲜。顺便想在上面建个telnet服务,结果还真费了不少劲。究其原因主要是Ubuntu采用的是debian的那一套东西。第一次用还不太熟悉。另外网上的一些资料中有的要点没有讲清楚,让人走了弯路。下面言归正传,将此次的实践心得汇总如下:
顺便提一下Ubuntu Server 9.10 安装时的注意点:
1. Ubuntu Server 9.10安装时除非特殊原因,一定要选English,这样默认的语言就是English,到后面的控制台界面上显示时就不会有问题。如果选了中文,安装完重启后在console上会显示小方块,根本没法看命令的提示。网上分析说问题的原因是console下缺少中文字体的支持,看来中国的Linux开发者要加油呀。
2. Ubuntu Server 9.10安装过程中会自动调用aptitude。初次见面真是摸不着头脑,最好在网上先搜下说明,做到心里有数。我装的cd里面好像x11-common这个包解压时有问题,所以安装时报错,不过由于连着互联网,可以在退出aptitude后通过再次运行aptitude联网安装这个安装失败了的包。(在用Ubuntu cd安装系统时要保持互联网的连接,它会自动访问网络,并下载一些包用于安装)
3. 在Ubuntu下的telnet服务需要安装xinetd服务和telnetd服务。这两个服务可以在系统安装完毕后通过以root用户身份(sudo)运行aptitude来安装。要说明的是telnet服务属于不太安全的服务,如果是在生产服务器上装一定要三思,最好用SSH。
4. 在root用户身份下直接运行aptitude会调出一个文本模式的界面,Ctrl t可以选择菜单,上下光标和回车可以选择展开要查看的组直到具体的安装包。输入/可以直接搜索要安装或卸载的包名。当光带罩住了要操作的包名后按Ctrl t可以通过菜单去选择是Install还是Remove等等。一旦回车这选择的包名会变颜色,其前会出现i或r之类的字母表示要对这个包做的操作,Ctrl u可以放弃操作。一旦修改完对包列表的操作设定后按g几次就可以执行了(对没有下载过的包会执行下载和安装动作)。
5. 下面正式开始进入telnet服务的安装:
5.1 运行aptitude,用上下光标键移动光带到Not installed Package组里,回车,输入/,输入xinetd,会自动选中xinetd包。按Ctrl t,按光标左移到package上选Install回车。在xinetd包名前会出现一个i字母,且包名颜色变绿。再次键入/,输入telnetd,会搜索到含telnetd名字的包,按n向下选择,直到出现telnetd,让光带停在其上。Ctrl t调出菜单,左移到package上选Install回车。按g键直到出现连接升级网站开始下载并安装。等待安装完毕。
5.2 其间会出一个窗口说#
5.3 结束后按q键退出aptitude文本界面。
5.4 修改/etc/inetd.conf和/etc/xinetd.conf文件并创建/etc/xinetd.d/telnet,它们的内容如下:
vi /etc/inetd.conf
telnet stream tcp nowait root /usr/sbin/telnetd /usr/sbin/in.telnetd
上面一行的开头可能是#
说明:inetd.conf的配置比下面的xinetd.conf的配置要简单的多,每个服务只需配置一行。
各个字段从左至右依次表示:
● 服务名称。和xinetd一样,inetd通过查询/etc/service获得该服务的相关信息。
● 套接口类型。TCP用stream,UDP用dgram。
● 该服务使用的通信协议。
● inetd是否等到守护进程结束才继续接管端口。wait表示等待(相当于xinetd的wait = yes),nowait表示不等待,inetd每次接到一个请求就启动守护进程的新副本(相当于xinetd的wait = no)。
● 运行该守护进程的用户身份。
● 守护进程二进制文件的完整路径及其命令行参数。和xinetd不同,inetd要求把服务器命令作为第一个参数(例如in.telnetd),然后才是真正意义上的“命令行参数”(例如-w)。关键字internal表示服务的实现由inetd自己实现。
vi /etc/xinetd.conf
defaults
{
instances = 60
log_type = SYSLOG daemon info
log_on_success = HOST PID
log_on_failure = HOST
cps = 25 30
}
includedir /etc/xinetd.d
关于上述内容的说明:
- instances = 60:表示最大连接进程数为60个。
- log_type = SYSLOG daemon info:表示使用syslog进行服务登记。
- log_on_success= HOST PID:表示设置成功后记录客户机的IP地址的进程ID。
- log_on_failure = HOST:表示设置失败后记录客户机的IP地址。
- cps = 25 30:表示每秒25个入站连接,如果超过限制,则等待30秒。主要用于对付拒绝服务攻击。
- includedir /etc/xinetd.d:表示告诉xinetd要包含的文件或目录是/etc/xinetd.d。
vi /etc/xinetd.d/telnet
service telnet
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
}
关于上述内容的说明:
- disable = no:表示启用这个服务。
- socket_type = stream:表示服务的数据包类型为stream。
- wait = no:表示不需等待,即服务将以多线程的方式运行。
- user = root:表示执行此服务进程的用户是root。
- server = /usr/bin/in.telnetd:启动程序的位置。
- log_on_failure += USERID:表示设置失败时,在/etc/xinetd.conf中设置的default值基础之上还把UID添加到系统登记表。
表22.3 xinetd配置的常用参数
参 数 |
取 值 |
含 义 |
id |
有意义的字符串 |
该服务的唯一名称 |
type |
RPC/INTERNAL/UNLISTED |
指定特殊服务的类型。RPC用于RPC服务;INTERNAL用于构建到xinetd内部的服务;UNLISTED用于非标准服务 |
disable |
yes/no |
是否禁用该服务 |
socket_type |
stream/dgram |
网络套接口类型。TCP服务用stream,UDP服务用dgram |
protocol |
tcp/udp |
连接使用的通信协议 |
wait |
yes/no |
xinetd是否等待守护进程结束才重新接管该端口 |
server |
路径 |
服务器二进制文件的路径 |
server_args |
参数 |
提供给服务器二进制文件的命令行参数 |
port |
端口号 |
该服务所在的端口 |
user |
用户名 |
服务器进程应该由哪个用户身份运行 |
nice |
数字 |
服务器进程的谦让度。参考10.7节 |
instances |
数字/UNLIMITED |
同时启动的响应数量。UNLIMITED表示没有限制 |
max_load |
数字 |
调整系统负载阈值。如果实际负载超过该阈值,就停止服务 |
only_from |
IP地址列表 |
只接受来自该地址的连接请求 |
no_access |
IP地址列表 |
拒绝向该IP地址提供服务 |
log_on_failure |
列表值 |
连接失败时应该记录到日志中的信息 |
log_on_success |
列表值 |
连接成功时应该记录到日志中的信息 |
表22.4 和日志记录有关的取值
值 |
适 用 于 |
描 述 |
HOST |
二者皆可 |
记录远程主机的地址 |
USERID |
二者皆可 |
记录远程用户的ID |
PID |
log_on_success |
记录服务器进程的PID |
EXIT |
log_on_success |
记录服务器进程的退出信息 |
DURATION |
log_on_success |
记录任务持续的时间 |
ATTEMPT |
log_on_failure |
记录连接失败的原因 |
RECORD |
log_on_failure |
记录连接失败的额外的信息 |
这三个文件,前两个是配置xinetd的,telnet则是在xinetd里放开telnet服务用的。类debian的系统如Ubuntu里必须配置inetd.conf,这点和Redhat这类系统里通过chkconfig telnet on来实现的做法不同。
5.5 service xinetd restart 重启xinetd服务(telnet服务是由xinetd守护进程来管理的)
5.6 执行命令netstat -tna 查看监听端口是否已经起来了。
tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN 出现类似的这一行表示开始监听端口23 (默认的telnet服务监听的TCP端口)
5.7 执行命令ifconfig eth0 查看服务器的ip地址。
inet addr:192.168.1.10 (addr:后面就是服务器的ip)
5.8 在远程客户机的终端窗口里执行 telnet 192.168.1.10 即可。
关于telnet服务的安全性问题及xinetd的配置请参考以下网页