|
|
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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.