diff options
| author | Barry Jaspan <bjaspan@mit.edu> | 1996-05-16 19:28:04 +0000 |
|---|---|---|
| committer | Barry Jaspan <bjaspan@mit.edu> | 1996-05-16 19:28:04 +0000 |
| commit | aebfe751f67a015464698034557ce2f96227f9b7 (patch) | |
| tree | a5631ab016caafc7abf8f2faad47707a5fe963d5 | |
| parent | 05d16d1bba34f3718dffa8c602f148499198e199 (diff) | |
| download | krb5-aebfe751f67a015464698034557ce2f96227f9b7.tar.gz krb5-aebfe751f67a015464698034557ce2f96227f9b7.tar.xz krb5-aebfe751f67a015464698034557ce2f96227f9b7.zip | |
separate from server and tools information, rename into separate document
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@8034 dc483132-0cff-0310-8789-dd5450dbe970
| -rw-r--r-- | doc/kadm5/api-funcspec.tex | 303 |
1 files changed, 18 insertions, 285 deletions
diff --git a/doc/kadm5/api-funcspec.tex b/doc/kadm5/api-funcspec.tex index 6f70b7d0d..54c4ec600 100644 --- a/doc/kadm5/api-funcspec.tex +++ b/doc/kadm5/api-funcspec.tex @@ -15,7 +15,7 @@ \def\v#1{\verb+#1+} \title{Kerberos Administration System \\ - Functional Specifications\thanks{\rcsId}} + KADM5 API Functional Specifications\thanks{\rcsId}} \author{Barry Jaspan} \begin{document} @@ -25,12 +25,7 @@ {\setlength{\parskip}{0pt}\tableofcontents} -%\section{Multi-realm Operation} -% -%The behavior of any function when called with a principal name that is -%not in the host's local realm is currently undefined. -% -\section{Admin API functional specification} +\section{Introduction} This section describes the Admin API that can be used to maintain principals and policies. It describes the data structures used for @@ -43,7 +38,7 @@ Kerberos master server. It is also be possible for a program running on the Kerberos master server to use the Admin API directly, without going through the admin server. -\subsection{Versions of the API} +\section{Versions of the API} The versions of this API and a brief description of the changes for each are: @@ -86,7 +81,7 @@ kadm5_get_policies have been added. \end{enumerate} \end{description} -\subsection{Policies and Password Quality} +\section{Policies and Password Quality} The Admin API Password Quality mechanism provides the following controls. Note that two strings are defined to be ``significantly @@ -114,12 +109,12 @@ users; a password that is not significantly different from every word in the dictionary will not be accepted. \end{itemize} -\subsection{Data Structures} +\section{Data Structures} This section describes the data structures used by the Admin API. They are defined in $<$kadm5/admin.h$>$. -\subsubsection{Principals, kadm5_principal_ent_t} +\subsection{Principals, kadm5_principal_ent_t} \label{sec:principal-structure} A Kerberos principal entry is represented by a kadm5_principal_ent_t. @@ -336,7 +331,7 @@ See section \ref{sec:keys} for a discussion of the krb5_key_data structure. \end{description} -\subsubsection{Policies, kadm5_policy_ent_t} +\subsection{Policies, kadm5_policy_ent_t} \label{sec:policy-fields} If the POLICY bit is set in aux_attributes, the \v{policy} name field @@ -392,7 +387,7 @@ password to its current value. A policy cannot be deleted unless this number is zero. \end{description} -\subsubsection{Configuration parameters} +\subsection{Configuration parameters} \label{sec:configparams} The KADM5 API acquires configuration information from the Kerberos @@ -444,7 +439,7 @@ typedef struct _kadm5_config_params { will actually be used) \end{description} -\subsubsection{Principal keys} +\subsection{Principal keys} \label{sec:keys} In KADM5_API_VERSION_1, all principals had a single key. The @@ -497,7 +492,7 @@ In a version 2 structure, the second element is the contents of the salt for this key. \end{description} -\subsubsection{Field masks} +\subsection{Field masks} \label{sec:masks} The API functions for creating, retrieving, and modifying principals @@ -582,7 +577,7 @@ REF_COUNT & 0x080000 & pw_refcnt & F & F \label{tab:policy-bits} \end{table} -\subsection{Constants, Header Files, Libraries} +\section{Constants, Header Files, Libraries} $<$kadm5/admin.h$>$ includes a number of required header files, including RPC, Kerberos 5, com_err, and admin com_err @@ -630,7 +625,7 @@ libcom_err.a, and libdyn.a. Server applications must also link against: libkdb5.a, libkrb5.a, libcrypto.a, librpclib.a, libcom_err.a, and libdyn.a. -\subsection{Error Codes} +\section{Error Codes} The error codes that can be returned by admin functions are listed below. Error codes indicated with a ``*'' can be returned by every @@ -705,7 +700,7 @@ Admin Server) \item[KADM5_SECURE_PRINC_MISSING] Database error! Required principal missing \end{description} -\subsection{Authentication and Authorization} +\section{Authentication and Authorization} \label{sec:auth} XXX Everything about server authorization has changed in version 2! @@ -744,13 +739,15 @@ and policies. \end{description} Privileges are specified via an external configuration file on the -Kerberos master server (see section \ref{sec:acls}). +Kerberos master server. Table \ref{tab:func-overview} summarizes the authorization requirements of each function. Additionally, each API function description identifies the privilege required to perform it. -\subsection{Function Overview} +\section{Functions} + +\subsection{Overview} The functions provided by the Admin API, and the authorization they require, are listed in the table \ref{tab:func-overview}. The @@ -1246,9 +1243,7 @@ principal's attributes, return KADM5_PASS_TOOSOON. return KADM5_PROTECT_PRINCIPAL. \item If the password does not meet the quality standards, return the appropriate KADM5_PASS_Q_* error code. -\item Convert password to key. The key is generated with -Kerberos' string-to-key function, using the salt method specified on -the admin server's command line; see section \ref{sec:commandline}. +\item Convert password to key; see section \ref{sec:keys}. \item If the new key is in the principal's password history, return KADM5_PASS_REUSE. \item Store old key in history. @@ -1760,266 +1755,4 @@ this function for any length of time; applications using this function must still be prepared to handle all possible KADM5_AUTH_* error codes. -\section{Server} - -The Admin API will be implemented by a server process running on the -same machine as the Kerberos server, and a client library to -communicate with the server. - -\subsection{Command Line} -\label{sec:commandline} - -The command line syntax of the admin server is - -\begin{verbatim} -ovsec_adm_server [-m] [-r realm] [-createsalt normal|none] - [-modifysalt normal|none|keep] -\end{verbatim} - -The -m argument specifies that the Kerberos master key should be read -from the keyboard instead of from the stash file. If the stash file -does not exist and this argument is not specified, the server will -not start. - -The -r argument specifies the Kerberos realm. If this argument is not -specified, the host's default realm is used. - -The -createsalt and -modifysalt arguments control the type of salt -used when creating and modifying keys in the Kerberos database, -respectively. ``normal'' means the standard V5 salt which uses the -principal and realm name. ``none'' means no salt, which is compatible -with Kerberos V4. ``keep'' means maintain the previous salt when a -key is changed. - -If the either admin principal or policy databases are reloaded using -the tools described in section \ref{sec:tools}, the admin server must -be shut down during the process. If the admin server is left running -during the import process, at best the server may use old information -and at worst the database may become inconsistent. - -\subsection{Protocol and Port Number} - -The admin server accepts TCP Sun RPC connections. The port number -(which the server listens on, and which clients should use to contact -it) is determined by a three step process: - -\begin{enumerate} -\item If kadm5/tcp exists in /etc/services, the specified port -number is used. - -\item Otherwise, if kerberos_adm/tcp exists in /etc/services, the -specified port number is used. - -\item Otherwise, port number 752 is used. -\end{enumerate} - -\subsection{Key Table, Authorization ACLs} -\label{sec:acls} - -The admin server's keytable is stored in /krb5/kadmin.srvtab. It -contains entries for the principals KADM5_ADMIN_SERVICE and -KADM5_CHANGEPW_SERVICE. - -The admin server will use a simple ACL mechanism to grant privileges -to principals. The file KADM5_ACLFILE will contain a -list of principals and their privileges. It is read at start-up, and -can only be reread by restarting the admin server. - -The format of this file is: - -\begin{itemize} -\item Blank lines or lines beginning with ``\#'' are ignored. - -\item ACL entry lines contain two fields separated by any number of -spaces, tabs, or newlines, and are terminated with a semi-colon. The -first field is a Kerberos name and the second field is the privilege -list. - -\item The privilege list can contain a comma separated list of the -words ``get'', ``add'', ``modify'', and ``delete''. -\end{itemize} - -The principal named in the first field of each ACL entry has the -privileges listed in the second field the ACL entry. - -\subsection{Logging} - -The Admin server will log various events via the syslog mechanism (see -the syslog(3) manual page). The level depends on the notice, the -facility is LOG_LOCAL6, and notices are identified with the name -``ovsec_adm_server''. Each syslog message described below begins with -a prefix including the time the message was logged, the host name of -the logging machine, and the pid of the logging process: - -\begin{verbatim} -Nov 11 12:37:26 suan-la-chow-show ovsec_adm_server[9229]: <message> -\end{verbatim} - -\subsubsection{Miscellaneous Messages} - -When the server starts successfully and is ready to handle requests, -is logs the message ``starting'' at the LOG_INFO level. When it exits -(due to a signal, for example) it logs the message ``finished, -exiting'' at the LOG_INFO level. - -If the dictionary file does not exist, the server logs the message -``WARNING: Cannot find the dictionary file $<$name$>$, continuing -without one.'' at the LOG_ERR level and continues with dictionary -checking disabled. - -If the server cannot register itself as an RPC server via the portmap -daemon, it logs the message ``Cannot register RPC service, failing.'' -at the LOG_ERR level and exits with non-zero status. This error can -happen if the portmapper is not running. - -If the GSS-API authentication system cannot be initialized, the server -logs the message ``Cannot initialize GSS-API authentication, -failing.'' at the LOG_ERR level and exits with non-zero status. This -error can happen if, for example, the file ovsec_adm.srvtab does not -exist or is incorrect. - -\subsubsection{Request Messages} - -In the event descriptions below, IP address refers to the originating -remote IP address, procedure name refers to the name of the API -function, client name refers to the authenticated name of the caller, -service name refers to the service the client authenticated to (see -section \ref{sec:auth}), primary argument refers to the name of the -principal or policy affected by the call,\footnote{The first release -only logs the primary argument, rather than logging the old and new -values of all fields.} and status refers to the com_err string -corresponding to the error code generated. All of these messages are -logged at the LOG_NOTICE level. - -\begin{itemize} -\item Unsuccessful authentication attempts (e.g.: failures during -GSS-API context establishment). This error occurs inside the RPC; the -admin server is notified via a callback. - -\begin{verbatim} -Authentication attempt failed: <IP address>, <GSS-API error strings> -\end{verbatim} - -Example: A buggy client attempts to authenticate to the admin server -as the existing but invalid service name ``mailserver@REALM.COM'': - -\begin{verbatim} -Authentication attempt failed: 192.231.148.11, Miscellaneous error, -Wrong principal in request -\end{verbatim} - -\item Authentication failure. This error can occur both within the -RPC, while parsing the RPC call header, and while arguments are -decoded by the admin server. It can be the result of a a garbled -{\it or retransmitted} packet, a replay attack, a packet-modification -attack, or a header/argument splicing attack. - -\begin{verbatim} -WARNING! Forged/garbled request: <procedure name>, claimed client = -<client name>, service = <service name>, addr = <IP address> -\end{verbatim} - -Example: An attacker attempts to replay a previously valid ``create -principal'' message from jon/admin@REALM.COM: - -\begin{verbatim} -WARNING! Forged/garbled request: kadm5_create_principal, claimed -client = jon/admin@REALM.COM, service = admin@REALM.COM, addr = -192.231.148.12 -\end{verbatim} - -\item Unauthorized request. This error occurs when a properly -authenticated caller attempts to perform an operation for which it is -not authorized. - -\begin{verbatim} -Unauthorized request: <procedure name>, <primary argument>, client = -<client name>, service = <service name>, addr = <IP address> -\end{verbatim} - -Example: An attacker cracker@REALM.COM attempts to modify the Kerberos -master principal: - -\begin{verbatim} -Unauthorized request: kadm5_modify_principal, K/M@REALM.COM, -client = cracker@REALM.COM, service = admin@REALM.COM, addr = -192.231.148.12 -\end{verbatim} - -\item Authorized requests and miscellaneous errors. A message is -logged when an authorized request succeeds or fails for any reason -other than those listed above. In the case of success, the status is -``success''; otherwise, the status can be anything from ``no space -left on device'' (ENOSPC) to an KADM5 error such as ``principal -does not exist'' (KADM5_UNK_PRINC). - -\begin{verbatim} -Request: <procedure name>, <primary argument>, <status>, client = -<client name>, service = <service name>, addr = <IP address> -\end{verbatim} - -Example: jon/admin@REALM.COM creates a new principal new@REALM.COM: - -\begin{verbatim} -Request: kadm5_create_principal, new@REALM.COM, success, -client = jon/admin@REALM.COM, service = admin@REALM.COM, addr = -192.231.148.12 -\end{verbatim} - -Example: A buggy client program attempts to create a principal with a -NULL name: - -\begin{verbatim} -Request: kadm5_create_principal, (null), Invalid argument, client -= jon/admin@REALM.COM, service = admin@REALM.COM, addr = -192.231.148.12 -\end{verbatim} - -Example: joe/user@REALM.COM changes its own password: - -\begin{verbatim} -Request: kadm5_chpass_principal, joe/user@REALM.COM, success, -client = joe/user@REALM.COM, server = kadmin/changepw@REALM.COM, -addr = 192.231.148.12 -\end{verbatim} - -Example: jon/admin@REALM.COM attempts to get a principal that does not -exist: - -\begin{verbatim} -Request: kadm5_get_principal, does/not/exist@REALM.COM, principal -does not exist, client = jon/admin@REALM.COM, server = -admin@REALM.COM, addr = 192.231.148.12 -\end{verbatim} - -\end{itemize} - -\subsection{Password Dictionary} - -The Admin server's password dictionary is stored in -KADM5_WORDFILE. It is read once when the server starts. It -contains a list of entries, separated by newlines. An entry may -include any character except a newline and NULL, including spaces. -The dictionary does not need to be sorted. - -\section{Tools} -\label{sec:tools} - -Three tools will be provided to create and manage the admin databases. -This need only run on the admin server machine and do not need to -operate remotely. The tools are: - -\begin{description} -\item[ovsec_adm_create] create the admin service principal, the admin -history principal, the admin password-changing principal, and empty -admin policy database, and an admin principal database with an empty -entry for every exist principal. -\item[ovsec_adm_db_export/import] dump or load the admin policy and -principal databases -\item[ovsec_adm_check] check the KDC and admin databases for -inconsistencies and repair them.\footnote{Not yet implemented.} -\end{description} - -The details of these tools are described in their own documents. - \end{document} |
