(RADIATOR) Sample Radiator access rules for OpenLDAP
Karl O. Pinc
kop at meme.com
Tue Jul 20 20:48:01 CDT 2004
FYI,
Here's a working (sub)set of access rules for OpenLDAP's
slapd.conf file to ensure that the minimum amount of
information is exposed via LDAP.
I haven't tried it out in this truncated and abbreviated
form, but it worked until I started deleting stuff for this
example.
The background is:
Radiator configured to:
AuthDN cn=radiator,ou=service,dc=example,dc=com
PasswordAttr userPassword
SearchFilter (&(uid=%1)(useWireless=TRUE))
Notice that our entries have an attribute useWireless,
as Radiator is authenticating for wireless, and we've
configured a search filter for that.
Notice this requires a ou=service,dc=example,dc=com ldap
entry and a cn=radiator,ou=service,dc=example,dc=com entry
like:
dn: ou=Service,dc=example,dc=com
ou: Service
objectClass: organizationalUnit
objectClass: top
dn: cn=radiator,ou=Service,dc=example,dc=com
userPassword:: ...
objectClass: applicationProcess
objectClass: simpleSecurityObject
objectClass: top
description:: ...
cn: radiator
Here's the slapd.conf file. Note the use of the "by * + break"
construct,
which means "don't stop here just because you saw an attribute you
recognized, but keep going until you find a 'by dn' you recognise too'.
Without the "by * + break" OpenLDAP access rules are either extremely
simple or, IMO, totally incomprehensible.
See:
http://www.openldap.org/doc/admin22/slapdconfig.html#Access%20Control
# Order of access controls is very important! First "access ..." match
wins!
# Without a <control> after the <who>, it's only <what> that determines
# the match.
# As many of the 2.1 rules use the "by * + break" construct it might
# be possible to enhance performance by re-ordering the rules so that
# the most common matches are done early, but care is in (*ahem*) order.
#
# Control access to the Service branch of the ldap database.
#
access to dn.subtree=ou=Service,dc=example,dc=com
by dn.exact="uid=joesysadm,ou=People,dc=example,dc=com" write
by dn.exact="uid=jrsysadm,ou=People,dc=example,dc=com" read
by anonymous auth
# What the different services have access to.
# Radiator
access to dn.subtree="ou=People,dc=example,dc=com"
attrs=entry,userPassword
by dn.exact="cn=radiator,ou=Service,dc=example,dc=com" read
by * + break
access to dn.subtree="ou=People,dc=example,dc=com"
attrs=uid,useWireless
by dn.exact="cn=radiator,ou=Service,dc=example,dc=com" search
by * + break
access to dn.subtree="ou=People,dc=example,dc=com"
by dn.exact="cn=radiator,ou=Service,dc=example,dc=com" none
by * + break
# More services ...
#
#
# Access by 'maintainers': godlike folk, and the user himself
#
#
#
# Password changeers
access to dn.subtree="ou=People,dc=example,dc=com"
attrs=userpassword,shadowLastChange,entry
by dn.exact="uid=joesysadm,ou=People,dc=example,dc=com" write
by dn.exact="uid=jrsysadm,ou=People,dc=example,dc=com" write
by self write
by * + break
# The true sysadm can chagge anything.
access to dn.subtree="ou=People,dc=example,dc=com"
attrs=loginShell,shadowMin,shadowMax,shadowWarning,shadowInactive,shadow\Expire,shadowFlag
by dn.exact="uid=joesysadm,ou=People,dc=example,dc=com" write
by dn.exact="uid=jrsysadm,ou=People,dc=example,dc=com" read
by self write
by * + break
#
# Defaults for the People subtree.
#
# Nobody else can get to the shadow atributes or the shell.
access to dn.subtree="ou=People,dc=example,dc=com"
attrs=loginShell,shadowLastChange,shadowMin,shadowMax,shadowWarning,shad\owInactive,shadowExpire,shadowFlag
by * none
# Nobody can get to other people's 'sensitive' info.
# (really, we did birthdate for self already above)
access to dn.subtree="ou=People,dc=example,dc=com"
attrs=someofyourpersonalinfo
by self read
by * none
# Allow people to authenticate.
access to dn.subtree="ou=People,dc=example,dc=com" attrs=userpassword
by * auth
# Anybody bound can read the rest of the People tree attributes, but
# anonymous users can only use them to authenticate.
access to dn.subtree=ou=People,dc=example,dc=com
by anonymous auth
by * read
For those interested, here's the schema for useWireless:
# For explanation of the SYNTAX see RFC 2252 # sections 4.3.2 and 6,
also see RFC 2252 for
# EQUALITY, ORDERING, SUBSTR etc. See
# http://www.alvestrand.no/objectid/top.html
# for general oid number lookup.
# See also: http://www.iana.org/assignments/enterprise-numbers
# For how to get your own oid namespace see:
# http://www.iana.org/cgi-bin/enterprise.pl
# User can use wireless when present and true.
attributetype ( 1.3.6.1.4.1.<example>.1.13
NAME 'useWireless'
DESC 'Accept password for wireless Internet
access
when present and true'
EQUALITY booleanMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 )
objectClass ( 1.3.6.1.4.1.<example>.2.1
NAME 'examplePerson'
DESC 'X-Person'
SUP inetOrgPerson
STRUCTURAL
MAY ( useWireless )
)
Karl <kop at meme.com>
Free Software: "You don't pay back, you pay forward."
-- Robert A. Heinlein
--
Archive at http://www.open.com.au/archives/radiator/
Announcements on radiator-announce at open.com.au
To unsubscribe, email 'majordomo at open.com.au' with
'unsubscribe radiator' in the body of the message.
More information about the radiator
mailing list