Annotation of 43BSDReno/contrib/isode-beta/doc/manual/q-security.tex, revision 1.1

1.1     ! root        1: % Run this through LaTeX with the appropriate wrapper.
        !             2: 
        !             3: \chapter{Introduction to Security Features}
        !             4: \label{Security}
        !             5: 
        !             6: \section{Passwords}
        !             7: \label{Passwords}\index{user password attribute}
        !             8: 
        !             9: When you bind to a DSA, to get write access you need to tell the DSA who you
        !            10: are --- you do this by supplying your distinguished name.
        !            11: So that the DSA can authenticate you, you also need to supply your Quipu
        !            12: password.
        !            13: Anyone knowing your
        !            14: password can act as you and alter your data. Therefore your password should be well-chosen
        !            15: and kept safe.
        !            16: 
        !            17: \subsection{Choosing a Password}
        !            18: 
        !            19: \begin{itemize}
        !            20: \item
        !            21: Don't use the same password for QUIPU as you do for login.
        !            22: 
        !            23: It is always bad practise (but convenient!) to use the same password on
        !            24: different systems. The manager of your QUIPU DSA can discover your QUIPU
        !            25: password. This doesn't affect the security of QUIPU (as your DSA manager
        !            26: can alter local data anyway), 
        !            27: but the QUIPU manager is probably not allowed access to
        !            28: your login account.
        !            29: \item
        !            30: Don't choose an obvious word.
        !            31: 
        !            32: Your password should {\bf not} be any of the following:
        !            33: \begin{itemize}
        !            34: \item
        !            35: Your name, initials, date of birth, place of work or similar
        !            36: personal details.
        !            37: \item
        !            38: Any girl's name in any language.
        !            39: \item
        !            40: The name of a film star, television personality etc.
        !            41: \item
        !            42: The name of a character from a science-fiction or fantasy novel.
        !            43: \item
        !            44: Computer jargon e.g. ``foobar''.
        !            45: \item
        !            46: Any of the above, spelt backwards.
        !            47: \item
        !            48: Any word from your system's on-line dictionary. Ideally, your password
        !            49: should not be a word at all (it could be the concatenation of two unrelated
        !            50: words, for example).
        !            51: \end{itemize}
        !            52: \item
        !            53: Change your password from time to time.
        !            54: \end{itemize}
        !            55: 
        !            56: \subsection{Taking Care of Your Password}
        !            57: 
        !            58: \begin{itemize}
        !            59: \item
        !            60: Configuration Files
        !            61: 
        !            62: It is possible to put your QUIPU password in a configuration file in your
        !            63: home directory (see the later chapters on user interfaces).
        !            64: If you do this, you must make sure that the configuration file (.quipurc)
        !            65: is not publicly readable (by using the \unix/ {\em chmod} command, for
        !            66: example).
        !            67: \item
        !            68: Access Control Lists
        !            69: 
        !            70: Your QUIPU password is itself stored in QUIPU, as the {\em userPassword}
        !            71: attribute of your entry. You should make sure that the access control list
        !            72: for your entry grants public {\em compare} but not {\em read} access to
        !            73: this attribute. (The attribute must be publicly comparable so that QUIPU
        !            74: can check that have presented the right password when you start a session).
        !            75: 
        !            76: The next section will explain how to set up access control lists.
        !            77: \item
        !            78: Don't give your password to other people.
        !            79: 
        !            80: If several people need to be able
        !            81: to modify the same data, the access control lists can be set up so that this
        !            82: is possible without them sharing passwords.
        !            83: \item
        !            84: Don't write your password down!
        !            85: \end{itemize}
        !            86: 
        !            87: \section{Discretionary Access Control}
        !            88: \label{disc_acl}\index{acl}
        !            89: 
        !            90: ``Discretionary Access Control'' is any means by which users can (at their
        !            91: discretion) give other users access to data which they control. In QUIPU,
        !            92: access control lists are used to provide discretionary access control.
        !            93: 
        !            94: \subsection{Model}
        !            95: 
        !            96: Each node in the DIT held by a QUIPU DSA has a QUIPU access control list (ACL).
        !            97: The ACL is divided into three parts :
        !            98: 
        !            99: \begin{enumerate}
        !           100: \item
        !           101: Child ACL
        !           102: 
        !           103: This controls who may discover or change which entries are placed immediately
        !           104: below the node in the DIT.
        !           105: \item
        !           106: Entry ACL
        !           107: 
        !           108: This controls who may access the entry placed at the node.
        !           109: \item
        !           110: Attribute ACL
        !           111: 
        !           112: For every attribute of the entry, there is an Attribute ACL which controls who 
        !           113: may access that attribute. To keep the representation compact, each entry has
        !           114: a default Attribute ACL. This is used for all the attributes of the entry that
        !           115: have not been explicitly given a different Attribute ACL.
        !           116: \end{enumerate}
        !           117: 
        !           118: Each Entry, Child or Attribute ACL (henceforth called an Object ACL) consists
        !           119: of a list of (access selector, access level) pairs. It associates every
        !           120: Distinguished Name with an access level, according to the following rule:
        !           121: 
        !           122: \begin{quote} 
        !           123: Take every pair where the selector
        !           124: (left hand side) matches the name; The associated access level is the maximum 
        !           125: of the corresponding right hand sides. If no selectors match the name, the
        !           126: associated access level is {\em none}.
        !           127: \end{quote}
        !           128: 
        !           129: The levels of access are as follows :
        !           130: 
        !           131: \begin{enumerate}
        !           132: \item
        !           133: None
        !           134: 
        !           135: No accesses to the object are allowed.
        !           136: \item
        !           137: Detect
        !           138: 
        !           139: A DUA can detect that the protected object exists.
        !           140: \item
        !           141: Compare
        !           142: 
        !           143: A filter (e.g. test for equality to some value) may be applied to the object.
        !           144: \item
        !           145: Read
        !           146: 
        !           147: The contents of the object may be read.
        !           148: \item
        !           149: Add
        !           150: 
        !           151: The contents of the object may be added to, but not removed from.
        !           152: \item
        !           153: Write
        !           154: 
        !           155: The contents of the object may be modified in any way.
        !           156: \end{enumerate}
        !           157: 
        !           158: The possible Access Selectors are as follows :
        !           159: 
        !           160: \begin{enumerate}
        !           161: \item
        !           162: Entry
        !           163: 
        !           164: Matches the entry itself only.
        !           165: \item
        !           166: Other
        !           167: 
        !           168: Matches everything.
        !           169: \item
        !           170: Prefix $<$name$>$
        !           171: 
        !           172: Matches $<$name$>$ and everything below it in the DIT.
        !           173: \item
        !           174: Group $<$name$>$
        !           175: 
        !           176: Matches $<$name$>$.
        !           177: (This is not what the `group' selector was originally designed for, but it is
        !           178: currently what it does!)
        !           179: 
        !           180: \end{enumerate}
        !           181: 
        !           182: The attribute syntax used to represent this is defined in Section~\ref{acl_syntax}, 
        !           183: with the ASN definition shown in Figure~\ref{acl-py}.
        !           184: 
        !           185: \tagrind {acl}{ACL definition}{acl-py}
        !           186: 
        !           187: 
        !           188: 
        !           189: \subsection{Detect Access}
        !           190: 
        !           191: QUIPU treats the access level {\em none} as though it were {\em detect}.
        !           192: This means that is often possible to detect the presence of protected data,
        !           193: even if you have no access to it.
        !           194: 
        !           195: The reason for this is that it is very difficult for the Directory to
        !           196: pretend that data isn't there; carefully chosen queries can catch it out.
        !           197: Access control mechanisms that can be by-passed are very dangerous; they
        !           198: give a false sense of security. Accordingly, we have decided not to
        !           199: implement ``undetectable data''.
        !           200: 
        !           201: \subsection{Effect of ACLs on Operations}
        !           202: 
        !           203: This section explains which ACLs are checked for each of the X.500 operations.
        !           204: 
        !           205: \begin{enumerate}
        !           206: \item
        !           207: List
        !           208: 
        !           209: The Child ACL of the target must give at least {\em read} access. In addition,
        !           210: each child will only be listed if its Entry ACL gives at least {\em read}.
        !           211: Later versions of QUIPU may also require that the Attribute ACL of the
        !           212: distinguished (naming) attribute of the child give at least {\em read} access.
        !           213: \item
        !           214: Search
        !           215: 
        !           216: To search the immediate descendants of a node, that node's Child ACL must give
        !           217: at least {\em read} access. In addition, each child will only be searched
        !           218: if its Entry ACL gives at least {\em compare} access. The filter `present'
        !           219: may be applied to any attribute. Other basic
        !           220: filters evaluate to {\em maybe} unless the relevant Attribute ACL gives at
        !           221: least compare access.
        !           222: \item
        !           223: Read
        !           224: 
        !           225: The Entry ACL of the target must give at least {\em read} access and the 
        !           226: Attribute ACL of each attribute read must give at least {\em read} access.
        !           227: \item
        !           228: Compare
        !           229: 
        !           230: The Entry ACL of the target must give at least {\em compare} access. The
        !           231: Attribute ACL of the tested attribute must give at least {\em compare}
        !           232: access.
        !           233: \item
        !           234: Modify
        !           235: 
        !           236: The Entry ACL of the target must give at least {\em add} access if attributes
        !           237: or values are to be added, and at least {\em write} access if they are to
        !           238: be removed. For each attribute changed, the Attribute ACL must give at
        !           239: least {\em add} access for an attribute or value to be added, and at least
        !           240: {\em write} access for an attribute or value to be removed.
        !           241: \item
        !           242: Add Entry
        !           243: 
        !           244: To add an entry below a node, that node's Child ACL must give at least
        !           245: {\em add} access.
        !           246: \item
        !           247: Remove Entry
        !           248: 
        !           249: To remove an entry, the Child ACL of its parent must give at least {\em write}
        !           250: access. No rights to the entry itself are required.
        !           251: \item
        !           252: Modify RDN
        !           253: 
        !           254: The Child ACL of the target's parent must give at least {\em write} access.
        !           255: If the operation needs to add an attribute (value), the target's Entry ACL must
        !           256: give {\em add} access and the Attribute ACL of the attribute must give
        !           257: {\em add} access.
        !           258: If the operation needs to remove an attribute (value), the target's Entry ACL 
        !           259: must give {\em write} access and the Attribute ACL of the attribute must give
        !           260: {\em write} access.
        !           261: \end{enumerate}
        !           262: 
        !           263: \subsection {Example Use of ACLs}
        !           264: 
        !           265: A node representing a user might be given the following ACL:
        !           266: 
        !           267: \begin{itemize}
        !           268: \item
        !           269: ChildACL is not applicable, and so omitted.
        !           270: \item
        !           271: EntryACL is \{other, read\} + \{self, write\} + \{group=$<$Manager Name$>$,
        !           272: write\}, so that only the user or a manager can change the entry.
        !           273: Using the ACL syntax, this is expressed as:
        !           274: \begin{quote}\begin{verbatim}
        !           275: acl= other # read # entry
        !           276: acl= self # write # entry
        !           277: acl= group # <Manager Name> # write # entry
        !           278: \end{verbatim}\end{quote}
        !           279: \item
        !           280: DefaultAttributeACL is \{other, read\} + \{self, write\}, which leads to
        !           281: publicly readable attributes modifyable by the user.
        !           282: Using the ACL syntax, this is expressed as:
        !           283: \begin{quote}\begin{verbatim}
        !           284: acl= other # read # default
        !           285: acl= self # write # default
        !           286: \end{verbatim}\end{quote}
        !           287: \item
        !           288: The Attribute ACL for ACL is \{other, read\} + \{group = $<$Manager Name$>$,
        !           289: write\},  so that only the manager can change the ACL.
        !           290: Using the ACL syntax, this is expressed as:
        !           291: \begin{quote}\small\begin{verbatim}
        !           292: acl= other # read # attributes # acl
        !           293: acl= group # <Manager Name> # write # attributes # acl
        !           294: \end{verbatim}\end{quote}
        !           295: \item
        !           296: The Attribute ACL for Password is \{self, write\} + \{other, compare\} so that
        !           297: the user can change the password, DSA's can check the password, and only
        !           298: the user can read it.
        !           299: \begin{quote}\begin{verbatim}
        !           300: acl= self # write # attributes # userPassword
        !           301: acl= other # compare # attributes # userPassword
        !           302: \end{verbatim}\end{quote}
        !           303: \end{itemize}
        !           304: 
        !           305: A node representing an organisation or organisational unit might be given the
        !           306: following ACL:
        !           307: 
        !           308: \begin{itemize}
        !           309: \item
        !           310: ChildACL is \{other, read\} + \{group=$<$Manager Name$>$, write\}. Everybody can
        !           311: search the members of the organisation, but only the manager is allowed to add
        !           312: or delete members.
        !           313: This is represented as an attribute with:
        !           314: \begin{quote}\begin{verbatim}
        !           315: acl= other # read # child
        !           316: acl= group # <Manager Name> # write # child
        !           317: \end{verbatim}\end{quote}
        !           318: \item
        !           319: EntryACL is \{other, read\} + \{group=$<$Manager Name$>$, write\}.
        !           320: This is represented as an attribute with:
        !           321: \begin{quote}\begin{verbatim}
        !           322: acl= other # read # entry
        !           323: acl= group # <Manager Name> # write # entry
        !           324: \end{verbatim}\end{quote}
        !           325: \item
        !           326: DefaultAttributeACL is \{other, read\} + \{group=$<$Manager Name$>$, write\}.
        !           327: This is represented as an attribute with:
        !           328: \begin{quote}\begin{verbatim}
        !           329: acl= other # read # default
        !           330: acl= group # <Manager Name> # write # default
        !           331: \end{verbatim}\end{quote}
        !           332: \end{itemize}
        !           333: 
        !           334: Every entry in the QUIPU DIT must have an acl attribute.
        !           335: If you do not supply one, the the default is added.
        !           336: The default ACL is often printed as
        !           337: \begin{quote}\begin{verbatim}
        !           338: acl=
        !           339: \end{verbatim}\end{quote}
        !           340: with no value.
        !           341: The default ACL is everybody read everything, but self can write, in long
        !           342: form this is expressed as:
        !           343: \begin{quote}\begin{verbatim}
        !           344: acl= self # write # entry
        !           345: acl= self # write # child
        !           346: acl= self # write # default
        !           347: acl= others # read # entry
        !           348: acl= others # read # child
        !           349: acl= others # read # default
        !           350: \end{verbatim}\end{quote}
        !           351: For many entries this is sufficient.  
        !           352: 
        !           353: It can be seen that this scheme gives a great deal of flexibility,
        !           354: without the addition of any protocol elements.
        !           355: The encoding is designed so that the volume overhead is not excessive
        !           356: for sensible access policies.
        !           357: 
        !           358: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.