authenticating against local LDAP and Jumpcloud LDAP

Alan DeKok aland at deployingradius.com
Thu Feb 18 21:39:34 CET 2016


On Feb 18, 2016, at 3:03 PM, Michael Martinez <mwtzzz at gmail.com> wrote:
> 
> Ok, bit by bit I'm learning how freeradius works and making progress.
> The suggestion to look at the man page for unlang was very helpful,
> there's a lot of good information in there. Also the suggestion to
> test the inner tunnel with "radtest" has been useful.

  That's good.

> I've gotten a working configuration where my local ldap users are
> authenticated with PAM

  Please no.  Please use the LDAP module.  PAM has all kinds of problems.

> and jumpcloud users are authenticated with the
> little script I mentioned earlier. All this through the inner tunnel
> in EAP/TTLS-PAP. The way I have set this up is in inner-tunnel I have:
> 
> if ("%{User-Name}" =~ /jumpcloud/i) {
>                update control {
>                        Auth-Type := `/bin/bash
> /opt/RadiusCheck/CheckUser.sh '%{User-Name}' '%{User-Password}'`
>                }
>                update reply {
>                        Reply-Message = "Hello jumpcloud ldap user"
>                }
>        }

  You should really do instead:

	suffix
	if (Realm == "jumpcloud") {
		update control {
			Auth-Type := `/opt/RadiusCheck/CheckUser.sh '%{Stripped-User-Name}' '%{User-Password}'
		}
	}
	else {
		ldap	# local users
	}

  There's no need to run /bin/bash, if the CheckUser.sh script is executable.

  And you should key off of realms, like I suggested.  And use the Stripped-User-Name, which is the user name without the realm.


> If it doesn't match then it defaults to PAM because I have DEFAULT
> Auth-Type = PAM in the users file.

  And don't do that.  Just use LDAP in "authorize", and let the server figure it out.

> One question: I know Alan and the
> docs always say not to set the auth type manually. I would like to
> know how to configure it so it will automatically recognize and
> configure the user with PAM.

  You don't.  FreeRADIUS is an *authentication server*.   You should have *FreeRADIUS* do authentication.  Not anything else.

> I also at Alan's suggestion added the following lines at the end of proxy.conf:
> realm "jumpcloud" {
>        auth_pool = my_auth_failover
> }

  I didn't say that.  I suggested:

realm jumpcloud {
}

  which make it a local realm.  You don't need to proxy the jumpcloud users.

> Ok, moving on. I would like to use ldap instead of PAM. So what I did
> in the inner-tunnel file was uncomment "ldap" in the authorize
> section, and uncomment Auth-Type LDAP { ldap } in the authenticate
> section. Then I modified modules/ldap as follows:
> 
>        server = "<ip address>"
>        identity = "cn=Manager,dc=xxxx"
>        password = xxxxxxx
>        basedn = "ou=People,dc=xxxx"
>        filter = "(uid=%{%{Stripped-User-Name}:-%{User-Name}})"
>        #base_filter = "(objectclass=radiusprofile)"
> 
> then I uncommented the "DEFAULT Auth-Type = PAM" line in users, so
> that I'm not explicitly setting the auth-type anywhere.

  That's good.

> Then I run "
> radtest test2 testing 127.0.0.1:18120 0 xxxxx" and here's what the log
> shows. It binds to ldap, looks up the user and grabs the password. But
> bombs out with an error that the Auth-Type isn't set.  What am I doing
> wrong?
> 
> Thu Feb 18 11:43:42 2016 : Info: [ldap]         expand: %{Stripped-User-Name} ->
> Thu Feb 18 11:43:42 2016 : Info: [ldap]         ... expanding second conditional
> Thu Feb 18 11:43:42 2016 : Info: [ldap]         expand: %{User-Name} -> test2
> Thu Feb 18 11:43:42 2016 : Info: [ldap]         expand:
> (uid=%{%{Stripped-User-Name}:-%{User-Name}}) -> (uid=test2)
> Thu Feb 18 11:43:42 2016 : Info: [ldap]         expand:
> ou=People,dc=xxxx -> ou=People,dc=xxxx
> Thu Feb 18 11:43:42 2016 : Debug:   [ldap] ldap_get_conn: Checking Id: 0
> Thu Feb 18 11:43:42 2016 : Debug:   [ldap] ldap_get_conn: Got Id: 0
> Thu Feb 18 11:43:42 2016 : Debug:   [ldap] attempting LDAP reconnection
> Thu Feb 18 11:43:42 2016 : Debug:   [ldap] (re)connect to <ip>:389,
> authentication 0
> Thu Feb 18 11:43:42 2016 : Debug:   [ldap] bind as
> cn=Manager,dc=xxxx/xxxxxx to <ip.>:389
> Thu Feb 18 11:43:42 2016 : Debug:   [ldap] waiting for bind result ...
> Thu Feb 18 11:43:42 2016 : Debug:   [ldap] Bind was successful
> Thu Feb 18 11:43:42 2016 : Debug:   [ldap] performing search in
> ou=People,dc=xxxx, with filter (uid=test2)
> Thu Feb 18 11:43:42 2016 : Debug:   [ldap] userPassword ->
> Password-With-Header == "{crypt}v0EA8plSCTsuk"
> Thu Feb 18 11:43:42 2016 : Debug:   [ldap] ldap_release_conn: Release Id: 0
> Thu Feb 18 11:43:42 2016 : Info: ++[ldap] returns ok
> Thu Feb 18 11:43:42 2016 : Info: ++[expiration] returns noop
> Thu Feb 18 11:43:42 2016 : Info: ++[logintime] returns noop
> Thu Feb 18 11:43:42 2016 : Info: ++[pap] returns noop
> Thu Feb 18 11:43:42 2016 : Info: ERROR: No authenticate method

 Which version are you running?  If it's 2.1.12, stop wasting your time, and upgrade to 3.0.  Or even 2.2.9.

  The PAP module *should* recognize crypt'd passwords and authenticate them.

> Unfortunately jumpcloud doesn't permit an "@" symbol in their
> usernames. I've submitted a feature request to them to allow this.
> I've gotten around this meanwhile by creating a username as
> "user.jumpcloud"

  So tell your users "user at jumpcloud", configure a "jumpcloud" realm as I suggested, use Stripped-user-Name, and the server will figure it out.

  Alan DeKok.




More information about the Freeradius-Users mailing list