Chinaunix首页 | 论坛 | 博客
  • 博客访问: 334861
  • 博文数量: 81
  • 博客积分: 2107
  • 博客等级: 大尉
  • 技术积分: 742
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-30 09:38
文章分类

全部博文(81)

文章存档

2011年(2)

2010年(28)

2009年(45)

2008年(6)

我的朋友

分类: LINUX

2009-10-29 13:47:53

古老的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(英文)
阅读(5886) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~