LDAP authorizedService attribute matching
Kostas Kalevras
kkalev at noc.ntua.gr
Thu Oct 12 11:02:07 CEST 2006
Owen DeLong wrote:
> I've got an LDAP database which works with PAM and uses PosixAccounts
> to describe
> users. It uses the authorizedService attribute to specify which
> services the user is
> allowed to log into.
>
> I've configured freeradius to map authorizedService -> Service-Type
> and have set
> up Service-Type as a check attribute.
>
> I'm running:
> (radiusd: FreeRADIUS Version 1.1.3, for host i686-pc-linux-gnu, built
> on Oct 10 2006 at 13:13:55)
>
> For example, say user foo has:
>
> dn: uid=foo, ou=people, dc=zone, dc=example, dc=com
> ...
> authorizedService: sshd
> authorizedService: vpn
> authorizedService: xdm
> ...
>
> I would like this user to succeed authenticating against RADIUS if
> Service-Type in the
> request matches sshd, vpn, or xdm, but, not if it contains anything
> else.
>
> Is there a way to set up this comparison in freeradius?
See the checkval module
>
> I've read the FAQ, but, I haven't found a way to do this. I've
> included debug output below,
> just in case. Any help, especially a sepecific set of "put this in x
> configuration file here
> and it should work" type help is greatly appreciated.
>
>
>
> Thanks,
>
> Owen
>
>
> Test authentication command (the username, password, and domain name
> have
> been replaced to preserve the anonymity of the implementation in
> question):
>
> In this case, user foo has authorizedService attributes with the
> following values:
> passwd
> login
> sshd
> xdm
> gdm
> sudo
> su
>
>
> (echo "User-Name = foo" ; echo "User-Password = xyzzy"; echo "Service-
> type = sshd" ) | \
> radclient localhost auth testing123
>
> results in:
> rad_recv: Access-Request packet from host 127.0.0.1:32772, id=37,
> length=50
> User-Name = "foo"
> User-Password = "xyzzy"
> Service-Type = sshd
> Processing the authorize section of radiusd.conf
> modcall: entering group authorize for request 0
> modcall[authorize]: module "preprocess" returns ok for request 0
> modcall[authorize]: module "chap" returns noop for request 0
> modcall[authorize]: module "mschap" returns noop for request 0
> rlm_realm: No '@' in User-Name = "foo", looking up realm NULL
> rlm_realm: Found realm "NULL"
> rlm_realm: Adding Stripped-User-Name = "foo"
> rlm_realm: Proxying request from user owen to realm NULL
> rlm_realm: Adding Realm = "NULL"
> rlm_realm: Authentication realm is LOCAL.
> modcall[authorize]: module "suffix" returns noop for request 0
> rlm_ldap: - authorize
> rlm_ldap: performing user authorization for foo
> radius_xlat: '(uid=foo)'
> radius_xlat: 'ou=people,dc=zone,dc=example,dc=com'
> rlm_ldap: ldap_get_conn: Checking Id: 0
> rlm_ldap: ldap_get_conn: Got Id: 0
> rlm_ldap: attempting LDAP reconnection
> rlm_ldap: (re)connect to localhost:389, authentication 0
> rlm_ldap: bind as / to localhost:389
> rlm_ldap: waiting for bind result ...
> rlm_ldap: Bind was successful
> rlm_ldap: performing search in ou=people,dc=zone,dc=example,dc=com,
> with filter (uid=foo)
> rlm_ldap: checking if remote access for owen is allowed by
> authorizedService
> rlm_ldap: looking for check items in directory...
> rlm_ldap: Adding authorizedService as Service-Type, value passwd & op=21
> rlm_ldap: Adding authorizedService as Service-Type, value login & op=21
> rlm_ldap: Adding authorizedService as Service-Type, value sshd & op=21
> rlm_ldap: Adding authorizedService as Service-Type, value xdm & op=21
> rlm_ldap: Adding authorizedService as Service-Type, value gdm & op=21
> rlm_ldap: Adding authorizedService as Service-Type, value sudo & op=21
> rlm_ldap: Adding authorizedService as Service-Type, value su & op=21
> rlm_ldap: looking for reply items in directory...
> rlm_ldap: Setting Auth-Type = ldap
> rlm_ldap: user foo authorized to use remote access
> rlm_ldap: ldap_release_conn: Release Id: 0
> modcall[authorize]: module "ldap" returns ok for request 0
> modcall: leaving group authorize (returns ok) for request 0
> rad_check_password: Found Auth-Type ldap
> auth: type "LDAP"
> Processing the authenticate section of radiusd.conf
> modcall: entering group LDAP for request 0
> rlm_ldap: - authenticate
> rlm_ldap: login attempt by "foo" with password "xyzzy"
> rlm_ldap: user DN: uid=foo,ou=people,dc=zone,dc=example,dc=com
> rlm_ldap: (re)connect to localhost:389, authentication 1
> rlm_ldap: bind as uid=foo,ou=people,dc=zone,dc=example,dc=com/xyzzy
> to localhost:389
> rlm_ldap: waiting for bind result ...
> rlm_ldap: Bind was successful
> rlm_ldap: user owen authenticated succesfully
> modcall[authenticate]: module "ldap" returns ok for request 0
> modcall: leaving group LDAP (returns ok) for request 0
> Sending Access-Accept of id 37 to 127.0.0.1 port 32772
> Finished request 0
> Going to the next request
> --- Walking the entire request list ---
> Received response ID 37, code 2, length = 20
> Waking up in 6 seconds...
>
> Which is correct. However, because the following does not fail:
>
> (echo "User-Name = foo" ; echo "User-Password = xyzzy"; echo "Service-
> type = vpn" ) | \
> radclient localhost auth testing123
>
> I suspect it's just that anything succeeds whether it matches or not.
>
> Here is the debug output for the VPN test:
>
> rad_recv: Access-Request packet from host 127.0.0.1:32772, id=39,
> length=50
> User-Name = "foo"
> User-Password = "xyzzy"
> Service-Type = vpn
> Processing the authorize section of radiusd.conf
> modcall: entering group authorize for request 1
> modcall[authorize]: module "preprocess" returns ok for request 1
> modcall[authorize]: module "chap" returns noop for request 1
> modcall[authorize]: module "mschap" returns noop for request 1
> rlm_realm: No '@' in User-Name = "foo", looking up realm NULL
> rlm_realm: Found realm "NULL"
> rlm_realm: Adding Stripped-User-Name = "foo"
> rlm_realm: Proxying request from user foo to realm NULL
> rlm_realm: Adding Realm = "NULL"
> rlm_realm: Authentication realm is LOCAL.
> modcall[authorize]: module "suffix" returns noop for request 1
> rlm_ldap: - authorize
> rlm_ldap: performing user authorization for foo
> radius_xlat: '(uid=foo)'
> radius_xlat: 'ou=people,dc=zone,dc=example,dc=com'
> rlm_ldap: ldap_get_conn: Checking Id: 0
> rlm_ldap: ldap_get_conn: Got Id: 0
> rlm_ldap: performing search in ou=people,dc=zone,dc=example,dc=com,
> with filter (uid=foo)
> rlm_ldap: checking if remote access for foo is allowed by
> authorizedService
> rlm_ldap: looking for check items in directory...
> rlm_ldap: Adding authorizedService as Service-Type, value passwd & op=21
> rlm_ldap: Adding authorizedService as Service-Type, value login & op=21
> rlm_ldap: Adding authorizedService as Service-Type, value sshd & op=21
> rlm_ldap: Adding authorizedService as Service-Type, value xdm & op=21
> rlm_ldap: Adding authorizedService as Service-Type, value gdm & op=21
> rlm_ldap: Adding authorizedService as Service-Type, value sudo & op=21
> rlm_ldap: Adding authorizedService as Service-Type, value su & op=21
> rlm_ldap: looking for reply items in directory...
> rlm_ldap: Setting Auth-Type = ldap
> rlm_ldap: user foo authorized to use remote access
> rlm_ldap: ldap_release_conn: Release Id: 0
> modcall[authorize]: module "ldap" returns ok for request 1
> modcall: leaving group authorize (returns ok) for request 1
> rad_check_password: Found Auth-Type ldap
> auth: type "LDAP"
> Processing the authenticate section of radiusd.conf
> modcall: entering group LDAP for request 1
> rlm_ldap: - authenticate
> rlm_ldap: login attempt by "foo" with password "xyzzy"
> rlm_ldap: user DN: uid=foo,ou=people,dc=zone,dc=example,dc=com
> rlm_ldap: (re)connect to localhost:389, authentication 1
> rlm_ldap: bind as uid=foo,ou=people,dc=zone,dc=example,dc=com/
> n0t4u2c! to localhost:389
> rlm_ldap: waiting for bind result ...
> rlm_ldap: Bind was successful
> rlm_ldap: user foo authenticated succesfully
> modcall[authenticate]: module "ldap" returns ok for request 1
> modcall: leaving group LDAP (returns ok) for request 1
> Sending Access-Accept of id 39 to 127.0.0.1 port 32772
> Finished request 1
> Going to the next request
> --- Walking the entire request list ---
> Waking up in 6 seconds...
> Received response ID 39, code 2, length = 20
>
>
>
>------------------------------------------------------------------------
>
>-
>List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html
>
More information about the Freeradius-Users
mailing list