Blame rfc1413.txt

Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
Network Working Group                                       M. St. Johns
Packit ddac9e
Request for Comments: 1413                      US Department of Defense
Packit ddac9e
Obsoletes: 931                                             February 1993
Packit ddac9e
Packit ddac9e
Packit ddac9e
                        Identification Protocol
Packit ddac9e
Packit ddac9e
Status of this Memo
Packit ddac9e
Packit ddac9e
   This RFC specifies an IAB standards track protocol for the Internet
Packit ddac9e
   community, and requests discussion and suggestions for improvements.
Packit ddac9e
   Please refer to the current edition of the "IAB Official Protocol
Packit ddac9e
   Standards" for the standardization state and status of this protocol.
Packit ddac9e
   Distribution of this memo is unlimited.
Packit ddac9e
Packit ddac9e
1.  INTRODUCTION
Packit ddac9e
Packit ddac9e
   The Identification Protocol (a.k.a., "ident", a.k.a., "the Ident
Packit ddac9e
   Protocol") provides a means to determine the identity of a user of a
Packit ddac9e
   particular TCP connection.  Given a TCP port number pair, it returns
Packit ddac9e
   a character string which identifies the owner of that connection on
Packit ddac9e
   the server's system.
Packit ddac9e
Packit ddac9e
   The Identification Protocol was formerly called the Authentication
Packit ddac9e
   Server Protocol.  It has been renamed to better reflect its function.
Packit ddac9e
   This document is a product of the TCP Client Identity Protocol
Packit ddac9e
   Working Group of the Internet Engineering Task Force (IETF).
Packit ddac9e
Packit ddac9e
2.  OVERVIEW
Packit ddac9e
Packit ddac9e
   This is a connection based application on TCP.  A server listens for
Packit ddac9e
   TCP connections on TCP port 113 (decimal).  Once a connection is
Packit ddac9e
   established, the server reads a line of data which specifies the
Packit ddac9e
   connection of interest.  If it exists, the system dependent user
Packit ddac9e
   identifier of the connection of interest is sent as the reply.  The
Packit ddac9e
   server may then either shut the connection down or it may continue to
Packit ddac9e
   read/respond to multiple queries.
Packit ddac9e
Packit ddac9e
   The server should close the connection down after a configurable
Packit ddac9e
   amount of time with no queries - a 60-180 second idle timeout is
Packit ddac9e
   recommended.  The client may close the connection down at any time;
Packit ddac9e
   however to allow for network delays the client should wait at least
Packit ddac9e
   30 seconds (or longer) after a query before abandoning the query and
Packit ddac9e
   closing the connection.
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
St. Johns                                                       [Page 1]
Packit ddac9e

Packit ddac9e
RFC 1413                Identification Protocol            February 1993
Packit ddac9e
Packit ddac9e
Packit ddac9e
3.  RESTRICTIONS
Packit ddac9e
Packit ddac9e
   Queries are permitted only for fully specified connections.  The
Packit ddac9e
   query contains the local/foreign port pair -- the local/foreign
Packit ddac9e
   address pair used to fully specify the connection is taken from the
Packit ddac9e
   local and foreign address of query connection.  This means a user on
Packit ddac9e
   address A may only query the server on address B about connections
Packit ddac9e
   between A and B.
Packit ddac9e
Packit ddac9e
4.  QUERY/RESPONSE FORMAT
Packit ddac9e
Packit ddac9e
   The server accepts simple text query requests of the form:
Packit ddac9e
Packit ddac9e
            <port-on-server> , <port-on-client>
Packit ddac9e
Packit ddac9e
   where <port-on-server> is the TCP port (decimal) on the target (where
Packit ddac9e
   the "ident" server is running) system, and <port-on-client> is the
Packit ddac9e
   TCP port (decimal) on the source (client) system.
Packit ddac9e
Packit ddac9e
   N.B - If a client on host A wants to ask a server on host B about a
Packit ddac9e
   connection specified locally (on the client's machine) as 23, 6191
Packit ddac9e
   (an inbound TELNET connection), the client must actually ask about
Packit ddac9e
   6191, 23 - which is how the connection would be specified on host B.
Packit ddac9e
Packit ddac9e
      For example:
Packit ddac9e
Packit ddac9e
                 6191, 23
Packit ddac9e
Packit ddac9e
   The response is of the form
Packit ddac9e
Packit ddac9e
   <port-on-server> , <port-on-client> : <resp-type> : <add-info>
Packit ddac9e
Packit ddac9e
   where <port-on-server>,<port-on-client> are the same pair as the
Packit ddac9e
   query, <resp-type> is a keyword identifying the type of response, and
Packit ddac9e
   <add-info> is context dependent.
Packit ddac9e
Packit ddac9e
   The information returned is that associated with the fully specified
Packit ddac9e
   TCP connection identified by <server-address>, <client-address>,
Packit ddac9e
   <port-on-server>, <port-on-client>, where <server-address> and
Packit ddac9e
   <client-address> are the local and foreign IP addresses of the
Packit ddac9e
   querying connection -- i.e., the TCP connection to the Identification
Packit ddac9e
   Protocol Server.  (<port-on-server> and <port-on-client> are taken
Packit ddac9e
   from the query.)
Packit ddac9e
Packit ddac9e
      For example:
Packit ddac9e
Packit ddac9e
         6193, 23 : USERID : UNIX : stjohns
Packit ddac9e
         6195, 23 : ERROR : NO-USER
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
St. Johns                                                       [Page 2]
Packit ddac9e

Packit ddac9e
RFC 1413                Identification Protocol            February 1993
Packit ddac9e
Packit ddac9e
Packit ddac9e
5.  RESPONSE TYPES
Packit ddac9e
Packit ddac9e
A response can be one of two types:
Packit ddac9e
Packit ddac9e
USERID
Packit ddac9e
Packit ddac9e
     In this case, <add-info> is a string consisting of an
Packit ddac9e
     operating system name (with an optional character set
Packit ddac9e
     identifier), followed by ":", followed by an
Packit ddac9e
     identification string.
Packit ddac9e
Packit ddac9e
     The character set (if present) is separated from the
Packit ddac9e
     operating system name by ",".  The character set
Packit ddac9e
     identifier is used to indicate the character set of the
Packit ddac9e
     identification string.  The character set identifier,
Packit ddac9e
     if omitted, defaults to "US-ASCII" (see below).
Packit ddac9e
Packit ddac9e
     Permitted operating system names and character set
Packit ddac9e
     names are specified in RFC 1340, "Assigned Numbers" or
Packit ddac9e
     its successors.
Packit ddac9e
Packit ddac9e
     In addition to those operating system and character set
Packit ddac9e
     names specified in "Assigned Numbers" there is one
Packit ddac9e
     special case operating system identifier - "OTHER".
Packit ddac9e
Packit ddac9e
     Unless "OTHER" is specified as the operating system
Packit ddac9e
     type, the server is expected to return the "normal"
Packit ddac9e
     user identification of the owner of this connection.
Packit ddac9e
     "Normal" in this context may be taken to mean a string
Packit ddac9e
     of characters which uniquely identifies the connection
Packit ddac9e
     owner such as a user identifier assigned by the system
Packit ddac9e
     administrator and used by such user as a mail
Packit ddac9e
     identifier, or as the "user" part of a user/password
Packit ddac9e
     pair used to gain access to system resources.  When an
Packit ddac9e
     operating system is specified (e.g., anything but
Packit ddac9e
     "OTHER"), the user identifier is expected to be in a
Packit ddac9e
     more or less immediately useful form - e.g., something
Packit ddac9e
     that could be used as an argument to "finger" or as a
Packit ddac9e
     mail address.
Packit ddac9e
Packit ddac9e
     "OTHER" indicates the identifier is an unformatted
Packit ddac9e
     character string consisting of printable characters in
Packit ddac9e
     the specified character set.  "OTHER" should be
Packit ddac9e
     specified if the user identifier does not meet the
Packit ddac9e
     constraints of the previous paragraph.  Sending an
Packit ddac9e
     encrypted audit token, or returning other non-userid
Packit ddac9e
     information about a user (such as the real name and
Packit ddac9e
     phone number of a user from a UNIX passwd file) are
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
St. Johns                                                       [Page 3]
Packit ddac9e

Packit ddac9e
RFC 1413                Identification Protocol            February 1993
Packit ddac9e
Packit ddac9e
Packit ddac9e
     both examples of when "OTHER" should be used.
Packit ddac9e
Packit ddac9e
     Returned user identifiers are expected to be printable
Packit ddac9e
     in the character set indicated.
Packit ddac9e
Packit ddac9e
     The identifier is an unformatted octet string - - all
Packit ddac9e
     octets are permissible EXCEPT octal 000 (NUL), 012 (LF)
Packit ddac9e
     and 015 (CR).  N.B. - space characters (040) following the
Packit ddac9e
     colon separator ARE part of the identifier string and
Packit ddac9e
     may not be ignored. A response string is still
Packit ddac9e
     terminated normally by a CR/LF.  N.B. A string may be
Packit ddac9e
     printable, but is not *necessarily* printable.
Packit ddac9e
Packit ddac9e
ERROR
Packit ddac9e
Packit ddac9e
   For some reason the port owner could not be determined, <add-info>
Packit ddac9e
   tells why.  The following are the permitted values of <add-info> and
Packit ddac9e
   their meanings:
Packit ddac9e
Packit ddac9e
          INVALID-PORT
Packit ddac9e
Packit ddac9e
          Either the local or foreign port was improperly
Packit ddac9e
          specified.  This should be returned if either or
Packit ddac9e
          both of the port ids were out of range (TCP port
Packit ddac9e
          numbers are from 1-65535), negative integers, reals or
Packit ddac9e
          in any fashion not recognized as a non-negative
Packit ddac9e
          integer.
Packit ddac9e
Packit ddac9e
          NO-USER
Packit ddac9e
Packit ddac9e
          The connection specified by the port pair is not
Packit ddac9e
          currently in use or currently not owned by an
Packit ddac9e
          identifiable entity.
Packit ddac9e
Packit ddac9e
          HIDDEN-USER
Packit ddac9e
Packit ddac9e
          The server was able to identify the user of this
Packit ddac9e
          port, but the information was not returned at the
Packit ddac9e
          request of the user.
Packit ddac9e
Packit ddac9e
          UNKNOWN-ERROR
Packit ddac9e
Packit ddac9e
          Can't determine connection owner; reason unknown.
Packit ddac9e
          Any error not covered above should return this
Packit ddac9e
          error code value.  Optionally, this code MAY be
Packit ddac9e
          returned in lieu of any other specific error code
Packit ddac9e
          if, for example, the server desires to hide
Packit ddac9e
          information implied by the return of that error
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
St. Johns                                                       [Page 4]
Packit ddac9e

Packit ddac9e
RFC 1413                Identification Protocol            February 1993
Packit ddac9e
Packit ddac9e
Packit ddac9e
          code, or for any other reason.  If a server
Packit ddac9e
          implements such a feature, it MUST be configurable
Packit ddac9e
          and it MUST default to returning the proper error
Packit ddac9e
          message.
Packit ddac9e
Packit ddac9e
   Other values may eventually be specified and defined in future
Packit ddac9e
   revisions to this document.  If an implementer has a need to specify
Packit ddac9e
   a non-standard error code, that code must begin with "X".
Packit ddac9e
Packit ddac9e
   In addition, the server is allowed to drop the query connection
Packit ddac9e
   without responding.  Any premature close (i.e., one where the client
Packit ddac9e
   does not receive the EOL, whether graceful or an abort should be
Packit ddac9e
   considered to have the same meaning as "ERROR : UNKNOWN-ERROR".
Packit ddac9e
Packit ddac9e
FORMAL SYNTAX
Packit ddac9e
Packit ddac9e
   <request> ::= <port-pair> <EOL>
Packit ddac9e
Packit ddac9e
   <port-pair> ::= <integer> "," <integer>
Packit ddac9e
Packit ddac9e
   <reply> ::= <reply-text> <EOL>
Packit ddac9e
Packit ddac9e
   <EOL> ::= "015 012"  ; CR-LF End of Line Indicator
Packit ddac9e
Packit ddac9e
   <reply-text> ::= <error-reply> | <ident-reply>
Packit ddac9e
Packit ddac9e
   <error-reply> ::= <port-pair> ":" "ERROR" ":" <error-type>
Packit ddac9e
Packit ddac9e
   <ident-reply> ::= <port-pair> ":" "USERID" ":" <opsys-field>
Packit ddac9e
                     ":" <user-id>
Packit ddac9e
Packit ddac9e
   <error-type> ::= "INVALID-PORT" | "NO-USER" | "UNKNOWN-ERROR"
Packit ddac9e
                    | "HIDDEN-USER" |  <error-token>
Packit ddac9e
Packit ddac9e
   <opsys-field> ::= <opsys> [ "," <charset>]
Packit ddac9e
Packit ddac9e
   <opsys> ::= "OTHER" | "UNIX" | <token> ...etc.
Packit ddac9e
               ;  (See "Assigned Numbers")
Packit ddac9e
Packit ddac9e
   <charset> ::= "US-ASCII" | ...etc.
Packit ddac9e
                 ;  (See "Assigned Numbers")
Packit ddac9e
Packit ddac9e
   <user-id> ::= <octet-string>
Packit ddac9e
Packit ddac9e
   <token> ::= 1*64<token-characters> ; 1-64 characters
Packit ddac9e
Packit ddac9e
   <error-token> ::= "X"1*63<token-characters>
Packit ddac9e
                     ; 2-64 chars beginning w/X
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
St. Johns                                                       [Page 5]
Packit ddac9e

Packit ddac9e
RFC 1413                Identification Protocol            February 1993
Packit ddac9e
Packit ddac9e
Packit ddac9e
   <integer> ::= 1*5<digit> ; 1-5 digits.
Packit ddac9e
Packit ddac9e
   <digit> ::= "0" | "1" ... "8" | "9" ; 0-9
Packit ddac9e
Packit ddac9e
   <token-characters> ::=
Packit ddac9e
                  
Packit ddac9e
                   - (dash), .!@#$%^&*()_=+.,<>/?"'~`{}[]; >
Packit ddac9e
                               ; upper and lowercase a-z plus
Packit ddac9e
                               ; printables minus the colon ":"
Packit ddac9e
                               ; character.
Packit ddac9e
Packit ddac9e
   <octet-string> ::= 1*512<octet-characters>
Packit ddac9e
Packit ddac9e
   <octet-characters> ::=
Packit ddac9e
                  
Packit ddac9e
                   ASCII NUL (000), CR (015) and LF (012)>
Packit ddac9e
Packit ddac9e
Notes on Syntax:
Packit ddac9e
Packit ddac9e
   1)   To promote interoperability among variant
Packit ddac9e
        implementations, with respect to white space the above
Packit ddac9e
        syntax is understood to embody the "be conservative in
Packit ddac9e
        what you send and be liberal in what you accept"
Packit ddac9e
        philosophy.  Clients and servers should not generate
Packit ddac9e
        unnecessary white space (space and tab characters) but
Packit ddac9e
        should accept white space anywhere except within a
Packit ddac9e
        token.  In parsing responses, white space may occur
Packit ddac9e
        anywhere, except within a token.  Specifically, any
Packit ddac9e
        amount of white space is permitted at the beginning or
Packit ddac9e
        end of a line both for queries and responses.  This
Packit ddac9e
        does not apply for responses that contain a user ID
Packit ddac9e
        because everything after the colon after the operating
Packit ddac9e
        system type until the terminating CR/LF is taken as
Packit ddac9e
        part of the user ID.  The terminating CR/LF is NOT
Packit ddac9e
        considered part of the user ID.
Packit ddac9e
Packit ddac9e
   2)   The above notwithstanding, servers should restrict the
Packit ddac9e
        amount of inter-token white space they send to the
Packit ddac9e
        smallest amount reasonable or useful.  Clients should
Packit ddac9e
        feel free to abort a connection if they receive 1000
Packit ddac9e
        characters without receiving an <EOL>.
Packit ddac9e
Packit ddac9e
   3)   The 512 character limit on user IDs and the 64
Packit ddac9e
        character limit on tokens should be understood to mean
Packit ddac9e
        as follows: a) No new token (i.e., OPSYS or ERROR-TYPE)
Packit ddac9e
        token will be defined that has a length greater than 64
Packit ddac9e
        and b) a server SHOULD NOT send more than 512 octets of
Packit ddac9e
        user ID and a client MUST accept at least 512 octets of
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
St. Johns                                                       [Page 6]
Packit ddac9e

Packit ddac9e
RFC 1413                Identification Protocol            February 1993
Packit ddac9e
Packit ddac9e
Packit ddac9e
        user ID.  Because of this limitation, a server MUST
Packit ddac9e
        return the most significant portion of the user ID in
Packit ddac9e
        the first 512 octets.
Packit ddac9e
Packit ddac9e
   4)   The character sets and character set identifiers should
Packit ddac9e
        map directly to those defined in or referenced by RFC 1340,
Packit ddac9e
        "Assigned Numbers" or its successors.  Character set
Packit ddac9e
        identifiers only apply to the user identification field
Packit ddac9e
        - all other fields will be defined in and must be sent
Packit ddac9e
        as US-ASCII.
Packit ddac9e
Packit ddac9e
   5)   Although <user-id> is defined as an <octet-string>
Packit ddac9e
        above, it must follow the format and character set
Packit ddac9e
        constraints implied by the <opsys-field>; see the
Packit ddac9e
        discussion above.
Packit ddac9e
Packit ddac9e
   6)   The character set provides context for the client to
Packit ddac9e
        print or store the returned user identification string.
Packit ddac9e
        If the client does not recognize or implement the
Packit ddac9e
        returned character set, it should handle the returned
Packit ddac9e
        identification string as OCTET, but should in addition
Packit ddac9e
        store or report the character set.  An OCTET string
Packit ddac9e
        should be printed, stored or handled in hex notation
Packit ddac9e
        (0-9a-f) in addition to any other representation the
Packit ddac9e
        client implements - this provides a standard
Packit ddac9e
        representation among differing implementations.
Packit ddac9e
Packit ddac9e
6.  Security Considerations
Packit ddac9e
Packit ddac9e
   The information returned by this protocol is at most as trustworthy
Packit ddac9e
   as the host providing it OR the organization operating the host.  For
Packit ddac9e
   example, a PC in an open lab has few if any controls on it to prevent
Packit ddac9e
   a user from having this protocol return any identifier the user
Packit ddac9e
   wants.  Likewise, if the host has been compromised the information
Packit ddac9e
   returned may be completely erroneous and misleading.
Packit ddac9e
Packit ddac9e
   The Identification Protocol is not intended as an authorization or
Packit ddac9e
   access control protocol.  At best, it provides some additional
Packit ddac9e
   auditing information with respect to TCP connections.  At worst, it
Packit ddac9e
   can provide misleading, incorrect, or maliciously incorrect
Packit ddac9e
   information.
Packit ddac9e
Packit ddac9e
   The use of the information returned by this protocol for other than
Packit ddac9e
   auditing is strongly discouraged.  Specifically, using Identification
Packit ddac9e
   Protocol information to make access control decisions - either as the
Packit ddac9e
   primary method (i.e., no other checks) or as an adjunct to other
Packit ddac9e
   methods may result in a weakening of normal host security.
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
St. Johns                                                       [Page 7]
Packit ddac9e

Packit ddac9e
RFC 1413                Identification Protocol            February 1993
Packit ddac9e
Packit ddac9e
Packit ddac9e
   An Identification server may reveal information about users,
Packit ddac9e
   entities, objects or processes which might normally be considered
Packit ddac9e
   private.  An Identification server provides service which is a rough
Packit ddac9e
   analog of the CallerID services provided by some phone companies and
Packit ddac9e
   many of the same privacy considerations and arguments that apply to
Packit ddac9e
   the CallerID service apply to Identification.  If you wouldn't run a
Packit ddac9e
   "finger" server due to privacy considerations you may not want to run
Packit ddac9e
   this protocol.
Packit ddac9e
Packit ddac9e
7.  ACKNOWLEDGEMENTS
Packit ddac9e
Packit ddac9e
   Acknowledgement is given to Dan Bernstein who is primarily
Packit ddac9e
   responsible for renewing interest in this protocol and for pointing
Packit ddac9e
   out some annoying errors in RFC 931.
Packit ddac9e
Packit ddac9e
References
Packit ddac9e
Packit ddac9e
   [1] St. Johns, M., "Authentication Server", RFC 931, TPSC, January
Packit ddac9e
       1985.
Packit ddac9e
Packit ddac9e
   [2] Reynolds, J., and J. Postel, "Assigned Numbers", STD 2, RFC 1340,
Packit ddac9e
       USC/Information Sciences Institute, July 1992.
Packit ddac9e
Packit ddac9e
Author's Address
Packit ddac9e
Packit ddac9e
       Michael C. St. Johns
Packit ddac9e
       DARPA/CSTO
Packit ddac9e
       3701 N. Fairfax Dr
Packit ddac9e
       Arlington, VA 22203
Packit ddac9e
Packit ddac9e
       Phone: (703) 696-2271
Packit ddac9e
       EMail: stjohns@DARPA.MIL
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
Packit ddac9e
St. Johns                                                       [Page 8]
Packit ddac9e