古老的finger服务---详细讲解
版权声明:可以自由转载本文,但请务必保留本文的完整性。
作者:张子坚
email:zhangzijian@163.com
说明:本文所涉及示例均在fedora core3下得到。
--------------------------------------------------------------------------------
概述
在这篇文档里我将介绍finger服务的基本知识与运行原理。用大量篇幅详细演示了finger命令的使用,并对其返回信息进行了解释。还有修改用户finger信息的方法。最后,讲述了finger的安全隐患(可被黑客利用,获取系统大量有用信息),及其处理方法。有意思的是,文章中还穿插了一些关于finger服务的小故事。
--------------------------------------------------------------------------------
什么是finger服务
finger服务就是finger服务器提供一项查询本地或远程主机用户公开信息的服务。在RFC1288里,它的名字是用户信息查找程序。
在早期的UNIX系统上,很多学生,研究人员利用finger服务来公开自己的某些特定信息,以便进行交流。比如有些研究人员用其公开自己的课题研究情况,有些老师公开一些课程时间安排。还有的主机播报球赛的情况,有的发布一些当前地震活动的信息。不过,finger服务更多的用处的是公开某人的特定信息。
某些返回信息如下:
用户登陆名
真实姓名
办公地点
家庭电话
办公室电话
用户主目录
所使用的shell
计划
说明:以上返回信息只是finger服务器返回信息的某些,还有其他未给出。finger服务器返回给你的信息根据不同系统而异。
--------------------------------------------------------------------------------
有关finger的历史
finger命令最早出现在BSD3.0。后来很多unix版本都移植了这个程序,我所使用的fedora core3也有finger的客户端。不过fc3默认情况下是关闭远程finger服务的。现在,很多主机已经关闭这项服务(安全性原因,下面会提到)。不过,在美国的有些大学里还提供这项古老的服务。
coke服务器的故事
在七十年代中期,卡内基-梅窿大学计算机系安装了一台可口可乐机,后来这个系扩大,从这个机房分出一些程序员到不同楼层的办公室。他们常常走了很远,来到那台机器旁才发现没有可口可乐。或者同样糟糕,他们发现在机器中有可口可乐,但时间不够,还是热的。 他们的解决办法是:在机器中安装开关,以判断可得到多少瓶碳酸饮料,并跟踪还需多长时间每瓶饮料才冷却。为了让人们远距离检查这台机器,设立了一个专用Finger服务器。当你Finger一个专用的用户标识(coke),它将显示这台coke机器容量的状态。
--------------------------------------------------------------------------------
说明
不过现在它们的coke服务器我已经finger不到了。也许是他们换了我不知道的服务器,或者是已经关闭了这项服务。不过可以给你提供一个做finger实验的finger服务器,在下面会见到。
--------------------------------------------------------------------------------
finger服务基本原理
finger基于传输控制协议,用TCP端口79。本地主机打开一个远程主机在Finger端口的连接。远程主机的RUIP(远程用户信息程序)变成有效来处理请求。本地主机发送给RUIP一行基于Finger查询说明的请求,然后等待RUIP响应。RUIP接收处理这个请求,返回应答,然后发起连接的关闭。本地主机接收到应答和关闭信号,然后执行本地端的关闭。
说明
此原理引自RFC1288原文。简单点说,finger服务就是一套客户机/服务器系统。服务器提供用户信息,客户机进行查询。
--------------------------------------------------------------------------------
详细演示finger的使用
使用finger服务只需要知道远程主机名,用户登陆名或者用户的真实姓名。其基本格式为:finger user@host或finger@host。
以下示例中,远程主机都为卡内基--梅隆大学计算机学院的finger服务器。
示例1
不带选项的finger命令
[root@localhost ~]# finger @cs.cmu.edu
Login Name TTY Idle When Where
root Super-User pts/2 13d Wed 10:53 venera.fac.cs.cmu.edu
讲解
第一列Login是用户登陆名,在此为root。
第二列Name是用户真实姓名,在此为Super-User。
第三列TTY是终端名,在此为pts/2。
第四列Idle显示用户在此终端上的活动时间。如果记录是空白,则表示那个人正在使用自己的终端。否则,你将看见终端空闲了多长时间。在此是空闲了13天。
第五列When显示用户登陆的日期和时间,在此为星期三的10点53分。
第六列Where显示用户是如何登录的。如果此项为空白,则表示这个人正在使用直接连接到主机的终端。否则这个人通过给定名字的计算机或终端服务器连接主机。在此为通过主机venera.fac.cs.cmu.edu。
示例2
带-l参数的finger命令
[root@localhost ~]# finger -l @cs.cmu.edu
Login name: root In real life: Super-User
Directory: / Shell: /sbin/sh
On since May 10 10:53:14 on pts/2 from venera.fac.cs.cmu.edu
13 days Idle Time
No unread mail
No Plan.
讲解
带-l参数的finger命令返回的是比较详细的信息。在这里,多出了用户主目录,用户shell,用户是否有未读邮件,用户计划等项目。
示例3
以下这个示例,有比较多的内容,可以仔细看看。可以看到一个中国人Hu Ning在他的计划里画上了一直狐狸(这只狐狸很可能就是他)。更多的关于finger命令的讲解可以参照下一节的内容。
[root@localhost ~]# finger
Search limit exceeded, first 10 entries displayed using fuzzy name match
No entries found for exact uid match
No entries found for exact name match
Login: hhfu Name: Hui Hua Fu
Directory: /afs/cs.cmu.edu/user/hhfu
Mail is forwarded to
No Plan
Login: dwilson Name: Dan Wilson
Daniel H Wilson
Directory: /afs/cs.cmu.edu/user/dwilson
Mail is forwarded to
Plan:
Second year graduate student, Robotics Institute / CALD
Advisor: Chris Atkeson
Web Page:
Office: NSH A525
(412) 268-5909
Home: (412) 363-7462
Cell: (412) 478-2421
Login: ninghu Name: Ning Hu
Directory: /afs/cs.cmu.edu/user/ninghu
Mail is forwarded to
Plan:
.% ^"b e$$ Ning Hu Ph.D. Student
F $$e L d$$"'F --------------------------------------
.% $$$r L J$$P 4% Computer Science Department
4 .$$$$ ^r ..J$$P $ Carnegie Mellon University
J 4$$$$ ^*$$$$$$e.d 5000 Forbes Ave
P 3$$$F $$ $$$$$$$$$e. Pittsburgh, PA 15213
* ^$$$z$$$$$$$$$$$$$$.b
d J$$$$$$$$$$$$$$$$$' Email:
J$F ^"$$$$$P""**$$$L $ F
4$$ -$$$$$e." $$$$zdFd Phone: (412)268-1557(O)
$$$ $$$$$$$$$$$$$$.$.% (412)243-6285(H)
4$$$" 4$P*$$$$$$$$$$$$.*
$$$% $$$$$$$$$$$$$$c" Home Page:
$$% "" ^*$$$$J$$b^.
$% 4$$$b. " *$$* F :::::::::: :::::::: ::: ::: ::: :::
% ^$ee**"" :+: :+: :+: :+: :+: :+: :+:
4 F +:+ +:+ +:+ +:+ +:+ +:+ +:+
L .d :#::+::# +#+ +:+ +#++:+ +#++:
'*" d$ +#+ +#+ +#+ +#+ +#+ +#+
" .r$$%P%.@$" #+# #+# #+# #+# #+# #+#
### ######## ### ### ###
Login: yihchun Name: Yih-Chun Hu
Directory: /afs/cs.cmu.edu/user/yihchun
Mail is forwarded to
Plan:
I hope to graduate from CMU's Ph.D. program in Computer Science... eventually.
Office: 4114 Wean Hall, (412) 268-3075
Lab: 3418 Wean Hall, (412) 268-6972
Fax: (412) 268-5576
Home: (412) 688-0661
Web:
Snail: Yih-Chun Hu
Department of Computer Science
5000 Forbes Avenue
Carnegie Mellon University
Pittsburgh, PA 15213
Travel:
Login: jennylo Name: Hiu Yu Lo
Directory: /afs/cs.cmu.edu/user/jennylo
No Plan
Login: janiceb Name: Janice H. Brochetti
Directory: /afs/cs.cmu.edu/user/janiceb
Mail is forwarded to
No Plan
Login: changbo Name: Changbo Hu
Directory: /afs/cs.cmu.edu/user/changbo
Mail is forwarded to
No Plan
Login: hzhang Name: Hui Zhang
Directory: /afs/cs.cmu.edu/user/hzhang
Mail is forwarded to
Plan:
Professor
School of Computer Science Office: 7126 Wean Hall
Carnegie Mellon University Number: (412)268-8945
5000 Forbes Ave Email:
Pittsburgh, PA 15213-3891 URL:
Administrative Associate: Kathy McNiff
Phone: (412) 268-5099
Fax: (412) 268-6714
Email:
Login: hou Name: Lily Hou
Directory: /afs/cs.cmu.edu/user/hou
Mail is forwarded to
Plan:
Login: hyu Name: Hua Yu
Directory: /afs/cs.cmu.edu/user/hyu
Mail is forwarded to
Project:Remodel the wheel
Plan:
Hua Yu (thesis mode, reloaded)
Office:
2602B Newell Simon Hall (412) 268-5479
Language Technology Institute (LTI a.k.a. CMT)
Fax: (412) 268-6298
Delivery:
4502 Newell Simon Hall (LTI)
Carnegie Mellon Univ., 5000 Forbes Ave.
Pittsburgh, PA 15213
Home:
Apt.301, 5628 Hempstead St. (412) 422-2762
Pittsburgh, PA 15217
"Be who you are and say what you feel because the people who mind
don't matter and the people who matter don't mind." - Dr. Seuss
"I contend, that the Negro is the creative voice of America, is creative
America, and it was a happy day ... when the first unhappy slave landed
on its shores." - Duke Ellington
--------------------------------------------------------------------------------
finger命令使用方法
finger
finger [options]users
显示有关一个或多个用户的数据,包括每个用户目录下文件.plan和.project所列出的信息。可以把每个用户指定为一个登陆名(完全匹配)或指定为姓或名(显示所有匹配名字的信息)。网络环境中可识别参数的形式为user@host或@host。
选项
-s
显示短格式,包括登录名,真实名字,终端名,写状态,空闲时间,办公地点和办公室电话。
-l
强制采用长格式(默认),显示由-s选项所包含的所有信息,以及主目录,家庭电话,登录shell,邮件状态,.plan,.project和.forward。
-p
在显示中省略.plan和.project文件中的内容。
-m
禁止对用户“真实”名字的匹配。
说明
不指定finger的选项如果提供用户名的话,默认设为-l输出风格,否则为-s风格。注意在两种格式中,如果信息不足,都有一些域可能丢失,如果没有指定参数finger会为当前登录的每个用户打印一个条目。finger可以用来查看远程机器上的用户信息,格式是指定user为user@host或@host。前者的默认输出为-l风格,后者的默认输出为-s风格。-l是唯一的向远地机器传递的选项。
--------------------------------------------------------------------------------
如何改变finger信息内容
可以使用chfn命令修改finger的内容。看以下示例:
[root@localhost ~]# chfn zhangzijian
Changing finger information for zhangzijian.
Name [zhangzijian]: laojian
Office [11229]: China
Office Phone [13888888888]:
Home Phone [13888888888]:
Finger information changed.
讲解:不带选项的chfn命令进入了交互模式。在每个项目里,不输入任何内容会保持原值。
--------------------------------------------------------------------------------
使用-o选项
[root@localhost ~]# chfn -o 13800138000 zhangzijian
Changing finger information for zhangzijian.
Finger information changed.
讲解:在这里,我指定中国移动的充值电话为我的办公室电话。
--------------------------------------------------------------------------------
chfn命令使用方法
chfn [options][username]
当用户被验证后,可以修改存放在/etc/passwd中并被显示的信息。如果没有options 选项,那么chfn进入交互模式并提示可进行修改。为了得到一空白区域,输入关键字none。只有特权用户才可以为另一个用户改变信息,对于普通用户,在修改之前,chfn提示用户输入密码。
选项
-f,--full-name
指定新的全名。
-h,--home-phone
指定新的家庭电话号码。
-o,--office
指定新的办公室号。
-p,--office-phone
指定新的办公室电话号码。
-u,--help
显示帮助信息并退出。
-v,--version
显示版本信息并退出。
--------------------------------------------------------------------------------
安全性
最流行的finger应用是美国加州大学Berkeley分校开发的。但是,BSD版本提供很少选项针对特定站点安全政策的详细Finger RUIP(远程用户信息程序)或者保护用户以免受到危险数据的攻击。而且,它存在许多用户和管理员需要注意的安全隐患,特别因为协议的目的是返回系统用户信息,最有可能发生问题的部分。
某些Unix系统自带的fingerd实现上存在安全问题,远程攻击者可能通过利用此漏洞得到系统用户相关信息。以数字为用户名提交一个请求,远程攻击者可能获取系统上的某些帐号名。比如:finger 0@host 。
比如在以上卡内基--梅隆大学的示例中,可以获得cs.cmu.edu这台主机的管理员所使用的shell信息,以及他什么时候活动在这台主机上。这样就为不法者提供了很多关于主机的信息。在下面的例子里,著名的morris蠕虫,在1988年,导致占互联网1/10的约6000台unix主机崩溃,损失为1500万美圆。
回顾历史[Robert tappan morris的网络蠕虫用到了finger daemon。finger daemon允许从远端主机发送至多512比特作为Finger请求。然而,finger却有缓存溢出的漏洞,这是因为缺少正确的边界检查。被finger的主机将任何超过512比特的东西解释成在本地执行的指令,无论finger daemon的权限是什么。]
对策
如果有可能,就关闭掉finger的远程服务,可以保留本地服务。如果想禁止本地服务,可以直接删除掉finger命令。
关闭远程服务(linux下)
可以在inetd.d/xinetd.d中设置fingerd的启动脚本,把disable项设置为yes即可。
关闭远程服务(solaris下)
打开/etc/inetd.conf文件,找到如下行:
finger stream tcp nowait nobody /usr/sbin/in.fingerd in.fingerd
在该行的开始处增加#号来将其注释
#finger stream tcp nowait nobody /usr/sbin/in.fingerd in.fingerd
3. 重新启动inetd
# ps -ef|grep inetd
root 167 1 0 Oct 07 ? 0:07 /usr/sbin/inetd -s -t
# kill -HUP 167 (上面的例子中,167是inetd的pid)
--------------------------------------------------------------------------------
如果还想保留finger服务,那么就要经常注意服务器版本的更新。并且要把尝试连接该服务器的ip地址记录到日志里。
--------------------------------------------------------------------------------
关于finger的更多信息
《finger的故事》
RFC1288(中文)
RFC1288(英文)
阅读(6066) | 评论(0) | 转发(0) |