Finger
Семёнов Ю.А. (ГНЦ ИТЭФ), book.itep.ru
Finger является простым протоколом (RFC-1288), который служит для получения информации о пользователях узлов Internet. Протокол использует TCP-порт 79. Команда Finger может дать вам данные о списке пользователей, которые работают в данный момент на интересующей вас ЭВМ, о конкретном пользователе (дата последнего сеанса входа в систему и т.д.), о списке загруженных задач, о типах интерфейсов (например, терминалов). Данный протокол обеспечивает интерфейс для удаленной информационной программы пользователя (RUIP - Remote User Information Program).
Первоначальная версия такой программы была написана Les Earnest. Окончательная версия протокола была подготовлена Earl Killian из Мессачусетского Технологического Института и Brian Harvey (SAIL).
Протокол Finger базируется на TCP. Локальная ЭВМ осуществляет TCP-соединение с удаленным узлом через указанный порт. После этого становится доступной программа RUIP и пользователь может посылать ей свои запросы. Каждый запрос представляет собой строку текста. RUIP, получив запрос, анализирует его и присылает ответ, после чего соединение закрывается.
Любые пересылаемые данные должны иметь формат ASCII, не иметь контроля по четности и каждая строка должна завершаться последовательностью CRLF (ASCII 13, за которым следует ASCII 10).
Программа RUIP должна воспринимать любые запросы Finger. Такие запросы могут иметь следующий формат:
{Q1} ::= [{W}|{W}{S}{U}]{C}
{Q2} ::= [{W}{S}][{U}]{H}{C}
где {U} ::= имя_пользователя
{H} ::= @hostname | @hostname{H}
{W} ::= /W
{S} ::= | {S}
{C} ::=
{H}, является рекурсивным, по этой причине не существует каких-либо ограничений на число лексем типа @hostname в запросе. В примере спецификации {Q2}, число лексем @hostname не может превышать двух.
Следует иметь в виду, что в случае запросов "finger user@host". Программа RUIP в действительности получит "user".
Запрос {Q2} требует переадресации запроса другой программе RUIP. Программа RUIP может либо осуществить эту процедуру, либо отказать в переадресации.
В случае выполнения запроса она должна это подтвердить:
Сообщая, что:
ЭВМ <H1> открывает соединение Finger <F1-2> с RUIP на ЭВМ <H2>.
<H1> выдает <H2> RUIP запрос <Q1-2> типа {Q2} (например, FOO@HOST1@HOST2).
При этом следует извлечь информацию о том, что:
ЭВМ <H2> является самой правой ЭВМ в запросе <Q1-2> (например, HOST2)
Запрос <Q2-3> является остатком запроса <Q1-2> после удаления правой части "@hostname" (например, FOO@HOST1)
Таким образом:
<H2> RUIP должна открыть соединение <F2-3> с <H3>, используя <Q2-3>.
<H2> RUIP должна прислать любую информацию, посланную от <F2-3> к <H1> через <F1-2> .
<H2> RUIP должна закрыть <F1-2> в нормальных обстоятельствах только когда <H3> RUIP закрывает <F2-3> .
По большей части вывод RUIP не следует каким-либо жестким регламентациям, так как он предназначен для чтения людьми, а не программами. Главное требование - информативность может ограничиваться только соображениями безопасности.
Запрос {C} требует выдачи списка всех работающих пользователей. RUIP должна либо ответить, либо активно отказаться. Если она отвечает, тогда она должна выдать, по крайней мере, полные имена пользователей. Системный администратор может включить в выдачу и другую полезную информацию, такую как:
Положение терминала
Расположение офиса
Рабочий номер телефона
Должность
Время пребывания в пассивном состоянии (число минут с момента ввода последнего символа или со времени завершения последней сессии).
Запрос {U}{C} является требованием присылки информации о статусе определенного пользователя {U}. Если вы не хотите выдавать такую информацию, тогда следует заблокировать работу Finger.
Ответ должен включать в себя полное имя пользователя. Если пользователь активно работает в сети, то присылаемые данные должны включать, по крайней мере, тот же объем информации что и при запросе {C}.
Так как это запрос информации об отдельном пользователе, администратор может добавить определенную информации об этом человеке, например:
Расположение офиса
Рабочий номер телефона
Номер домашнего телефона
Статус работы в системе ( not logged in, logout time, и т.д.)
Информационный файл пользователя
Информационный файл пользователя может содержать короткое сообщение, которое оставляет пользователь для передачи по запросу Finger. (Это иногда называется "plan" файлом). Это легко реализуется путем поиска программой в корневом каталоге (или в специально выделенном каталоге) пользователя файла с заданным именем. Системному администратору должно быть разрешено включать и выключать эту опцию.
При запросе Finger существует возможность запуска определенной программы пользователя. Если такая опция предусмотрена, системному администратору должно быть позволено запрещать эту процедуру. Данная опция, создавая определенные угрозы, практически беспредельно расширяет возможности Finger (см. примеры в конце раздела).
В командной строке допустимо имя пользователя или имя, под которым он входит в систему. Если имя неопределенно, реакция системы определяется системным администратором.
Лексема /W в запросе типа {Q1} или {Q2} в лучшем случае интерпретируется последней RUIP и означает требование выдачи максимально возможной информации о пользователе, в худшем случае она игнорируется.
Продающие автоматы должны реагировать на запрос {C} выдачей списка всех предметов, предлагаемых для продажи в данный момент Продающие автоматы должны откликаться на запросы {U}{C}, сообщая число различных продуктов или отделений для размещения продуктов.
Корректная реализация Finger крайне важна. В частности, RUIP должна защищать себя от некорректного ввода. Конкретная реализация программы должна проходить столь же тщательную проверку, как Telnet, FTP или SMTP.
Следует учитывать, что Finger раскрывает информацию о пользователях. Лица, ответственные за сетевую безопасность, должны решить разрешать или нет работу Finger, и какую информацию о пользователях следует рассылать.
Сетевой администратор должен иметь возможность разрешать и запрещать прохождение запросов {Q2}.
Если обработка запросов {Q2} RUIP заблокировано, программа должна отсылать соответствующее сообщение (например, "Finger forwarding service denied"). По умолчанию обработка запросов {Q2} должна быть запрещена.
Программа RUIP при отправке данных должна отфильтровывать все символы вне диапазона (ASCII 32 - ASCII 126), за исключением TAB (ASCII 9) и CRLF. Такая мера обезопасит получателя.
Примеры реализации запросов.
Узел: elbereth.rutgers.edu
Командная строка: <CRLF>
Login Name TTY Idle When Office
rinehart Mark J.Rinehart p0 1:11 Mon 12:15 019 Hill x3166
greenfie Stephen J.Greenfiel p1 Mon 15:46 542 Hill x3074
rapatel Rocky - Rakesh Patel p3 4d Thu 00:58 028 Hill x2287
pleasant Mel Pleasant p4 3d Thu 21:32 019 Hill 908-932-
dphillip Dave Phillips p5 021: Sun 18:24 265 Hill x3792
dmk David Katinsky p6 2d Thu 14:11 028 Hill x2492
cherniss Cary Cherniss p7 5 Mon 15:42 127 Psychol x2008
harnaga Doug Harnaga p8 2:01 Mon 10:15 055 Hill x2351
brisco Thomas P.Brisco pe 2:09 Mon 13:37 h055 x2351
laidlaw Angus Laidlaw q0 1:55 Mon 11:26 E313C 648-5592
cje Chris Jarocha-Ernst q1 8 Mon 13:43 259 Hill x2413
Узел: dimacs.rutgers.edu
Командная строка: pirmann<CRLF>
Login name: pirmann In real life: David Pirmann
Office: 016 Hill, x2443 Home phone: 989-8482
Directory: /dimacs/u1/pirmann Shell: /bin/tcsh
Last login Sat Jun 23 10:47 on ttyp0 from romulus.rutgers.
No unread mail
Project:
Plan:
Work Schedule, Summer 1990
Rutgers LCSR Operations, 908-932-2443
Monday 5pm - 12am
Tuesday 5pm - 12am
Wednesday 9am - 5pm
Thursday 9am - 5pm
Saturday 9am - 5pm
larf larf hoo hoo
Login name: surak In real life: Ron Surak
Office: 000 OMB Dou, x9256
Directory: /u2/surak Shell: /bin/tcsh
Last login Fri Jul 27 09:55 on ttyq3
No Plan.
Login name: etter In real life: Ron Etter
Directory: /u2/etter Shell: /bin/tcsh
Never logged in.
No Plan.
Узел: dimacs.rutgers.edu
Командная строка: hedrick@math.rutgers.edu@pilot.njin.net
[pilot.njin.net]
[math.rutgers.edu]
Login name: hedrick In real life: Charles Hedrick
Office: 484 Hill, x3088
Directory: /math/u2/hedrick Shell: /bin/tcsh
Last login Sun Jun 24 00:08 on ttyp1 from monster-gw.rutge
No unread mail
No Plan.
Формат применения команды Finger:
finger [ опции ] имя...
По умолчанию finger отображает информацию обо всех активно работающих пользователях, включая имя-идентификатор, полное имя, имя терминала и т.д. В качестве имени может использоваться имя-идентификатор, фамилия или имя пользователя. Ниже приводится краткий перечень допустимых опций.
-l | Запрос подробной информации |
-s | Запрос краткой информации |
-q | Запрос имени-идентификатора, имени терминала и времени входа в систему |
-i | Запрос, аналогичный -q, но выдается и время пребывания терминала в пассивном состоянии |
-w | Блокирует печать полного имени для -s |
-h | Блокирует печать файла .project в режиме -l |
-p | Блокирует печать файла .plan в режиме -l |
Список работающих пользователей хранится в файле /etc/utmp, полный список имен пользователей размещен в файле /etc/passwd, времена и даты входа в систему записаны в файле /var/adm/lastlog, имена и расположение терминалов можно найти в файле /etc/ttytab, для записи информации о планах и проектах используются файлы ~/.plan и ~/.project, соответственно.
Ниже приведен пример отклика на команду finger -l (запрос подробной информации, ЭВМ SUN):
Login name: Ivanov | In real life: Andrey Bobyshev |
Directory: /u1/SunITEP/bobyshev | Shell: /bin/csh |
On since Aug 10 10:16:35 on ttyp0 from x4u2.desy.de
1 minute 37 seconds Idle Time
Mail last read Thu Aug 10 12:06:20 1995
No Plan. | (Никаких планов) |
Login name: Petrov | In real life: Yuri Semenov |
Directory: /u1/SunITEP/semenov Shell: /bin/csh
On since Aug 10 12:14:19 on ttyp3 from semenov.itep.ru
33 seconds Idle Time
No unread mail
No Plan.
Login name: Sidorov In real life: UU | Ekatirin |
Directory: /var/spool/uucppublic Shell:
/usr/local/lib/uucp/uucico
On since Aug 10 12:16:04 on ttyy01 57 minutes Idle Time
Mail last read Wed Nov 16 18:17:50 1994
No Plan.
В общем случае при обращении к finger может использоваться символьный Интернет-адрес:
Finger <имя_адресата>@Internet_адрес.
Возможности команды Finger варьируются в широких пределах в зависимости от конкретной реализации. Так команда (PCTCP): finger semenov@vxdesy.desy.de выдаст на экран:
[vxdesy.desy.de]
SEMENOV Semenov, Yuri SEMENOV not logged in (и это истинная правда)
Last login Thu 5-Jan-95 2:35PM-CET
[No plan]
Дополнительную информацию о команде finger можно получить:
Описание протокола | ftp nic.merit.edu | documents/rfc/rfc1288.txt |
| pub/fingerinfo |
Информация по электронной почте | dlangley@netcom.com | в поле subject:"#finger USER@HOST.DOMAIN" |
Через удаленный доступ | telnet rpi.edu :79 | |
Через WWW |
http www.dlr.de cgi-greving/mfinger http sundae.triumf.ca fingerinfo.html | |
Через finger | finger help@dir.su.oz.au | |
Цифра после двоеточия - номер порта. Последняя строка говорит о некоторых необычных возможностях Finger. Опция выдачи содержимого файла пользователя и исполнения программы пользователя расширяет возможности Finger почти беспредельно. Так, выдав команду finger help@dir.su.oz.au (Австралия), получим:
[extra.ucc.su.OZ.AU]
**** This is an experimental service offered free of charge by ****
**** The University Computing Service, University of Sydney. ****
**** Please mail support@is.su.edu.au if you have any queries. ****
Finger offers these additional services (Finger предлагает некоторые дополнительные возможности):
Access to a database facility (доступ к базе данных)
Usage (использование): finger %@dir.su.edu.au
is usually an "egrep" regular expression and can be (в качестве обычно используется стандартное "egrep"-выражение, а вместо можно записать):
Aarnet | resources available on AARNet (ресурсы AARNet) |
Buildings | buildings and their codes at Sydney Uni (коды зданий сиднейского университета) |
Archie | query anonymous FTP databases (анонимный поиск по FTP-депозитариям) |
Internet | resources available on the Internet (ресурсы Internet) |
Library | library access available via AARNet (доступ к библиотечным базам данных) |
Newsgroups | find NetNews newsgroups (поиск новостей) |
Phone | The Sydney Uni Phone Book (телефонная книга Сиднейского университета) |
Postcodes | Australian Postcodes (австралийские почтовые коды) |
Shop | prices at the UCS shop (цены в университетском магазине) |
Usage (использование):
Finger help@dir.su.edu.au | this help (данный справочный материал) |
Finger help%@dir.su.edu.au | on a particular database facility |
Finger copyright@dir.su.edu.au | please read this copyright notice |
Finger egrep@dir.su.edu.au |
a manual on egrep regular expressions (справочные материалы по допустимым egrep-выражениям). |
Замечание. Задавая ключевые слова, избегайте применения специальных символов, пробелы относятся к их числу.
Выдав команду:
Finger 2%AArnet@dir.su.edu.au |
(запрос содержимого второй раздела базы данных aarnet); |
получим:
[extra.ucc.su.oz.au]
Index for Chapter 2 (список библиотек):
Australian Defense Force Academy Library
The Australian National University Library
Curtin University Of Technology T.L. Robertson Library
Deakin University Library
Griffith University, Division of Information Services
La Trobe University Library
Macquarie University Library
Murdoch University Library
R.M.I.T. Library - MATLAS Library Catalogue.
Swinburne Library
The University of Adelaide, Barr Smith Library
The University of Melbourne Baillieu Library
The University of New England Library
The University of New South Wales
The University of Newcastle Libraries
The University of Queensland Libraries
The University of Western Australia, Reid Library
The University of Wollongong Library
University College of Central Queensland Library
University of South Australia Library Systems Dept
Victoria University of Wellington
Таким образом, даже с помощью Finger можно организовать доступ к базам данных. Finger не сработает для узлов, не имеющих IP-адресов (например, электронный почтовый адрес). Эта команда всегда позволит руководителю проекта узнать, например, когда последний раз тот или иной участник проекта работал на ЭВМ. :-)
Содержание раздела