Problem with CHAP, rlm_ldap, edir
Arran Cudbard-Bell
A.Cudbard-Bell at sussex.ac.uk
Sun May 18 13:08:56 CEST 2008
Lothar.Haeger at steria-mummert.de wrote:
> Hi all,
>
> I am trying to get freradius with edir to work. PAP is working already,
> but CHAP does some strange things... here's a trace
>
>
> Started freeradius 2.0.4 on SLES10SP1 by typing: "radiusd -X"
>
> hamburgauth01:~ # radiusd -X
> FreeRADIUS Version 2.0.4, for host i686-suse-linux-gnu, built on May 7
> 2008 at 21:45:01
> Copyright (C) 1999-2008 The FreeRADIUS server project and contributors.
> There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
> PARTICULAR PURPOSE.
> You may redistribute copies of FreeRADIUS under the terms of the
> GNU General Public License.
> Starting - reading configuration files ...
> including configuration file /etc/raddb/radiusd.conf
> including configuration file /etc/raddb/proxy.conf
> including configuration file /etc/raddb/clients.conf
> including configuration file /etc/raddb/snmp.conf
> including configuration file /etc/raddb/eap.conf
> including configuration file /etc/raddb/sql.conf
> including configuration file /etc/raddb/sql/mysql/dialup.conf
> including configuration file /etc/raddb/sql/mysql/counter.conf
> including configuration file /etc/raddb/policy.conf
> including files in directory /etc/raddb/sites-enabled/
> including configuration file /etc/raddb/sites-enabled/smc
> including dictionary file /etc/raddb/dictionary
> main {
> prefix = "/usr"
> localstatedir = "/var"
> logdir = "/var/log/radius"
> libdir = "/usr/lib/freeradius"
> radacctdir = "/var/log/radius/radacct"
> hostname_lookups = no
> max_request_time = 30
> cleanup_delay = 5
> max_requests = 1024
> allow_core_dumps = no
> pidfile = "/var/run/radiusd/radiusd.pid"
> user = "radiusd"
> group = "radiusd"
> checkrad = "/usr/sbin/checkrad"
> debug_level = 0
> proxy_requests = no
> security {
> max_attributes = 200
> reject_delay = 1
> status_server = yes
> }
> }
> client localhost {
> ipaddr = 127.0.0.1
> require_message_authenticator = no
> secret = "testing123"
> nastype = "other"
> }
> client 10.110.0.0/16 {
> require_message_authenticator = no
> secret = "radiustest"
> shortname = "SMC_GS_LAN"
> }
> radiusd: #### Loading Realms and Home Servers ####
> proxy server {
> retry_delay = 5
> retry_count = 3
> default_fallback = no
> dead_time = 120
> wake_all_if_all_dead = no
> }
> home_server localhost {
> ipaddr = 127.0.0.1
> port = 1812
> type = "auth"
> secret = "testing123"
> response_window = 20
> max_outstanding = 65536
> zombie_period = 40
> status_check = "status-server"
> ping_check = "none"
> ping_interval = 30
> check_interval = 30
> num_answers_to_alive = 3
> num_pings_to_alive = 3
> revive_interval = 120
> status_check_timeout = 4
> }
> home_server_pool my_auth_failover {
> type = fail-over
> home_server = localhost
> }
> realm example.com {
> auth_pool = my_auth_failover
> }
> realm LOCAL {
> }
> realm NULL {
> }
> realm DEFAULT {
> }
> radiusd: #### Instantiating modules ####
> instantiate {
> Module: Linked to module rlm_exec
> Module: Instantiating exec
> exec {
> wait = yes
> input_pairs = "request"
> shell_escape = yes
> }
> Module: Linked to module rlm_expr
> Module: Instantiating expr
> Module: Linked to module rlm_expiration
> Module: Instantiating expiration
> expiration {
> reply-message = "Password Has Expired "
> }
> Module: Linked to module rlm_logintime
> Module: Instantiating logintime
> logintime {
> reply-message = "You are calling outside your allowed timespan "
> minimum-timeout = 60
> }
> }
> radiusd: #### Loading Virtual Servers ####
> server {
> modules {
> Module: Checking authenticate {...} for more modules to load
> Module: Linked to module rlm_pap
> Module: Instantiating pap
> pap {
> encryption_scheme = "auto"
> auto_header = yes
> }
> Module: Linked to module rlm_chap
> Module: Instantiating chap
> Module: Linked to module rlm_mschap
> Module: Instantiating mschap
> mschap {
> use_mppe = yes
> require_encryption = no
> require_strong = no
> with_ntdomain_hack = no
> }
> Module: Linked to module rlm_unix
> Module: Instantiating unix
> unix {
> radwtmp = "/var/log/radius/radwtmp"
> }
> Module: Linked to module rlm_ldap
> Module: Instantiating ldap
> ldap {
> server = "hamburgauth01.hamburg.mummert.de"
> port = 389
> password = "*******"
> identity = "cn=radiusadmin,o=admin"
> net_timeout = 1
> timeout = 4
> timelimit = 3
> tls_mode = no
> start_tls = no
> tls_require_cert = "allow"
> tls {
> start_tls = yes
> cacertfile = "/etc/raddb/certs/AUTH-TREE_CA.b64"
> require_cert = "demand"
> }
> basedn = "o=data"
> filter = "(uid=%{Stripped-User-Name:-%{User-Name}})"
> base_filter = "(objectclass=radiusprofile)"
> password_attribute = "nspmPassword"
> auto_header = no
> access_attr = "dialupAccess"
> access_attr_used_for_allow = yes
> groupname_attribute = "cn"
> groupmembership_filter =
> "(|(&(objectClass=GroupOfNames)(member=%{Ldap-UserDn}))(&(objectClass=GroupOfUniqueNames)(uniquemember=%{Ldap-UserDn})))"
> dictionary_mapping = "/etc/raddb/ldap.attrmap"
> ldap_debug = 0
> ldap_connections_number = 5
> compare_check_items = no
> do_xlat = yes
> edir_account_policy_check = yes
> set_auth_type = yes
> }
> rlm_ldap: Registering ldap_groupcmp for Ldap-Group
> rlm_ldap: Registering ldap_xlat with xlat_name ldap
> rlm_ldap: reading ldap<->radius mappings from file /etc/raddb/ldap.attrmap
> rlm_ldap: LDAP radiusCheckItem mapped to RADIUS $GENERIC$
> rlm_ldap: LDAP radiusReplyItem mapped to RADIUS $GENERIC$
> rlm_ldap: LDAP radiusAuthType mapped to RADIUS Auth-Type
> rlm_ldap: LDAP radiusSimultaneousUse mapped to RADIUS Simultaneous-Use
> rlm_ldap: LDAP radiusCalledStationId mapped to RADIUS Called-Station-Id
> rlm_ldap: LDAP radiusCallingStationId mapped to RADIUS Calling-Station-Id
> rlm_ldap: LDAP lmPassword mapped to RADIUS LM-Password
> rlm_ldap: LDAP ntPassword mapped to RADIUS NT-Password
> rlm_ldap: LDAP sambaLmPassword mapped to RADIUS LM-Password
> rlm_ldap: LDAP sambaNtPassword mapped to RADIUS NT-Password
> rlm_ldap: LDAP acctFlags mapped to RADIUS SMB-Account-CTRL-TEXT
> rlm_ldap: LDAP radiusExpiration mapped to RADIUS Expiration
> rlm_ldap: LDAP radiusNASIpAddress mapped to RADIUS NAS-IP-Address
> rlm_ldap: LDAP radiusServiceType mapped to RADIUS Service-Type
> rlm_ldap: LDAP radiusFramedProtocol mapped to RADIUS Framed-Protocol
> rlm_ldap: LDAP radiusFramedIPAddress mapped to RADIUS Framed-IP-Address
> rlm_ldap: LDAP radiusFramedIPNetmask mapped to RADIUS Framed-IP-Netmask
> rlm_ldap: LDAP radiusFramedRoute mapped to RADIUS Framed-Route
> rlm_ldap: LDAP radiusFramedRouting mapped to RADIUS Framed-Routing
> rlm_ldap: LDAP radiusFilterId mapped to RADIUS Filter-Id
> rlm_ldap: LDAP radiusFramedMTU mapped to RADIUS Framed-MTU
> rlm_ldap: LDAP radiusFramedCompression mapped to RADIUS Framed-Compression
> rlm_ldap: LDAP radiusLoginIPHost mapped to RADIUS Login-IP-Host
> rlm_ldap: LDAP radiusLoginService mapped to RADIUS Login-Service
> rlm_ldap: LDAP radiusLoginTCPPort mapped to RADIUS Login-TCP-Port
> rlm_ldap: LDAP radiusCallbackNumber mapped to RADIUS Callback-Number
> rlm_ldap: LDAP radiusCallbackId mapped to RADIUS Callback-Id
> rlm_ldap: LDAP radiusFramedIPXNetwork mapped to RADIUS Framed-IPX-Network
> rlm_ldap: LDAP radiusClass mapped to RADIUS Class
> rlm_ldap: LDAP radiusSessionTimeout mapped to RADIUS Session-Timeout
> rlm_ldap: LDAP radiusIdleTimeout mapped to RADIUS Idle-Timeout
> rlm_ldap: LDAP radiusTerminationAction mapped to RADIUS Termination-Action
> rlm_ldap: LDAP radiusLoginLATService mapped to RADIUS Login-LAT-Service
> rlm_ldap: LDAP radiusLoginLATNode mapped to RADIUS Login-LAT-Node
> rlm_ldap: LDAP radiusLoginLATGroup mapped to RADIUS Login-LAT-Group
> rlm_ldap: LDAP radiusFramedAppleTalkLink mapped to RADIUS
> Framed-AppleTalk-Link
> rlm_ldap: LDAP radiusFramedAppleTalkNetwork mapped to RADIUS
> Framed-AppleTalk-Network
> rlm_ldap: LDAP radiusFramedAppleTalkZone mapped to RADIUS
> Framed-AppleTalk-Zone
> rlm_ldap: LDAP radiusPortLimit mapped to RADIUS Port-Limit
> rlm_ldap: LDAP radiusLoginLATPort mapped to RADIUS Login-LAT-Port
> rlm_ldap: LDAP radiusReplyMessage mapped to RADIUS Reply-Message
> conns: 0x81690c8
> Module: Linked to module rlm_eap
> Module: Instantiating eap
> eap {
> default_eap_type = "peap"
> timer_expire = 60
> ignore_unknown_eap_types = no
> cisco_accounting_username_bug = no
> }
> Module: Linked to sub-module rlm_eap_md5
> Module: Instantiating eap-md5
> Module: Linked to sub-module rlm_eap_leap
> Module: Instantiating eap-leap
> Module: Linked to sub-module rlm_eap_gtc
> Module: Instantiating eap-gtc
> gtc {
> challenge = "Password: "
> auth_type = "PAP"
> }
> Module: Linked to sub-module rlm_eap_tls
> Module: Instantiating eap-tls
> tls {
> rsa_key_exchange = no
> dh_key_exchange = yes
> rsa_key_length = 512
> dh_key_length = 512
> verify_depth = 0
> pem_file_type = yes
> private_key_file = "/etc/raddb/certs/server.pem"
> certificate_file = "/etc/raddb/certs/server.pem"
> CA_file = "/etc/raddb/certs/ca.pem"
> private_key_password = "whatever"
> dh_file = "/etc/raddb/certs/dh"
> random_file = "/etc/raddb/certs/random"
> fragment_size = 1024
> include_length = yes
> check_crl = no
> cipher_list = "DEFAULT"
> make_cert_command = "/etc/raddb/certs/bootstrap"
> }
> Module: Linked to sub-module rlm_eap_ttls
> Module: Instantiating eap-ttls
> ttls {
> default_eap_type = "md5"
> copy_request_to_tunnel = yes
> use_tunneled_reply = yes
> }
> Module: Linked to sub-module rlm_eap_peap
> Module: Instantiating eap-peap
> peap {
> default_eap_type = "mschapv2"
> copy_request_to_tunnel = yes
> use_tunneled_reply = yes
> proxy_tunneled_request_as_eap = yes
> }
> Module: Linked to sub-module rlm_eap_mschapv2
> Module: Instantiating eap-mschapv2
> mschapv2 {
> with_ntdomain_hack = no
> }
> Module: Checking authorize {...} for more modules to load
> Module: Linked to module rlm_preprocess
> Module: Instantiating preprocess
> preprocess {
> huntgroups = "/etc/raddb/huntgroups"
> hints = "/etc/raddb/hints"
> with_ascend_hack = no
> ascend_channels_per_line = 23
> with_ntdomain_hack = no
> with_specialix_jetstream_hack = no
> with_cisco_vsa_hack = no
> with_alvarion_vsa_hack = no
> }
> Module: Linked to module rlm_realm
> Module: Instantiating suffix
> realm suffix {
> format = "suffix"
> delimiter = "@"
> ignore_default = no
> ignore_null = no
> }
> Module: Linked to module rlm_files
> Module: Instantiating files
> files {
> usersfile = "/etc/raddb/users"
> acctusersfile = "/etc/raddb/acct_users"
> preproxy_usersfile = "/etc/raddb/preproxy_users"
> compat = "no"
> }
> Module: Checking preacct {...} for more modules to load
> Module: Linked to module rlm_acct_unique
> Module: Instantiating acct_unique
> acct_unique {
> key = "User-Name, Acct-Session-Id, NAS-IP-Address,
> Client-IP-Address, NAS-Port"
> }
> Module: Checking accounting {...} for more modules to load
> Module: Linked to module rlm_detail
> Module: Instantiating detail
> detail {
> detailfile =
> "/var/log/radius/radacct/%{Client-IP-Address}/detail-%Y%m%d"
> header = "%t"
> detailperm = 384
> dirperm = 493
> locking = no
> log_packet_header = no
> }
> Module: Linked to module rlm_radutmp
> Module: Instantiating radutmp
> radutmp {
> filename = "/var/log/radius/radutmp"
> username = "%{User-Name}"
> case_sensitive = yes
> check_with_nas = yes
> perm = 384
> callerid = yes
> }
> Module: Linked to module rlm_attr_filter
> Module: Instantiating attr_filter.accounting_response
> attr_filter attr_filter.accounting_response {
> attrsfile = "/etc/raddb/attrs.accounting_response"
> key = "%{User-Name}"
> }
> Module: Checking session {...} for more modules to load
> Module: Checking post-proxy {...} for more modules to load
> Module: Checking post-auth {...} for more modules to load
> Module: Instantiating attr_filter.access_reject
> attr_filter attr_filter.access_reject {
> attrsfile = "/etc/raddb/attrs.access_reject"
> key = "%{User-Name}"
> }
> }
> }
> radiusd: #### Opening IP addresses and Ports ####
> listen {
> type = "auth"
> ipaddr = *
> port = 0
> }
> listen {
> type = "acct"
> ipaddr = *
> port = 0
> }
> main {
> snmp = no
> smux_password = ""
> snmp_write_access = no
> }
> Listening on authentication address * port 1812
> Listening on accounting address * port 1813
> Ready to process requests.
>
>
> used ntradping to try to aithenticate with PAP - successfully. Note that
> the password used to bind to edir is "test345":
>
>
> rad_recv: Access-Request packet from host 10.110.9.60 port 57834, id=19,
> length=55
> User-Name = "test user at realm"
> User-Password = "test345"
> +- entering group authorize
> ++[preprocess] returns ok
> ++[chap] returns noop
> ++[mschap] returns noop
> rlm_realm: Looking up realm "realm" for User-Name = "test user at realm"
> rlm_realm: Found realm "DEFAULT"
> rlm_realm: Adding Stripped-User-Name = "test user"
> rlm_realm: Adding Realm = "DEFAULT"
> rlm_realm: Authentication realm is LOCAL.
> ++[suffix] returns noop
> rlm_ldap: - authorize
> rlm_ldap: performing user authorization for test user
> WARNING: Deprecated conditional expansion ":-". See "man unlang" for
> details
> expand: (uid=%{Stripped-User-Name:-%{User-Name}}) -> (uid=test user)
> expand: o=data -> o=data
> 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 hamburgauth01.hamburg.mummert.de:389,
> authentication 0
> rlm_ldap: setting TLS CACert File to /etc/raddb/certs/AUTH-TREE_CA.b64
> rlm_ldap: setting TLS Require Cert to demand
> rlm_ldap: starting TLS
> rlm_ldap: bind as cn=radiusadmin,o=admin/******** to
> hamburgauth01.hamburg.mummert.de:389
> rlm_ldap: waiting for bind result ...
> rlm_ldap: Bind was successful
> rlm_ldap: performing search in o=data, with filter (uid=test user)
> rlm_ldap: checking if remote access for test user is allowed by dialupAccess
> rlm_ldap: Added the eDirectory password test345 in check items as
> Cleartext-Password
> rlm_ldap: No default NMAS login sequence
> rlm_ldap: looking for check items in directory...
> rlm_ldap: LDAP attribute radiusAuthType as RADIUS attribute Auth-Type ==
> LDAP
> rlm_ldap: looking for reply items in directory...
> rlm_ldap: LDAP attribute radiusServiceType as RADIUS attribute
> Service-Type = Login-User
> rlm_ldap: user test user authorized to use remote access
> rlm_ldap: ldap_release_conn: Release Id: 0
> ++[ldap] returns ok
> rlm_eap: No EAP-Message, not doing EAP
> ++[eap] returns noop
> ++[unix] returns notfound
> ++[files] returns noop
> ++[expiration] returns noop
> ++[logintime] returns noop
> rlm_pap: Found existing Auth-Type, not changing it.
> ++[pap] returns noop
> rad_check_password: Found Auth-Type LDAP
> auth: type "LDAP"
> +- entering group LDAP
> rlm_ldap: - authenticate
> rlm_ldap: login attempt by "test user" with password "test345"
> rlm_ldap: user DN: cn=test user,ou=users,o=data
> rlm_ldap: (re)connect to hamburgauth01.hamburg.mummert.de:389,
> authentication 1
> rlm_ldap: setting TLS CACert File to /etc/raddb/certs/AUTH-TREE_CA.b64
> rlm_ldap: setting TLS Require Cert to demand
> rlm_ldap: starting TLS
> rlm_ldap: bind as cn=test user,ou=users,o=data/test345 to
> hamburgauth01.hamburg.mummert.de:389
> rlm_ldap: waiting for bind result ...
> rlm_ldap: Bind was successful
> rlm_ldap: user test user authenticated succesfully
> ++[ldap] returns ok
> Login OK: [test user at realm/test345] (from client SMC_GS_LAN port 0)
> +- entering group post-auth
> ++[ldap] returns noop
> ++[exec] returns noop
> Sending Access-Accept of id 19 to 10.110.9.60 port 57834
> Service-Type = Login-User
> Finished request 0.
> Going to the next request
> Waking up in 4.9 seconds.
> Cleaning up request 0 ID 19 with timestamp +15
> Ready to process requests.
>
>
> Now changed ntradping to use CHAP, everything else left as before, incl.
> the password:
>
>
> rad_recv: Access-Request packet from host 10.110.9.60 port 57851, id=20,
> length=56
> User-Name = "test user at realm"
> CHAP-Password = 0x161b57b44ca4d299bb697e24be03e881a8
> +- entering group authorize
> ++[preprocess] returns ok
> rlm_chap: Setting 'Auth-Type := CHAP'
> ++[chap] returns ok
> ++[mschap] returns noop
> rlm_realm: Looking up realm "realm" for User-Name = "test user at realm"
> rlm_realm: Found realm "DEFAULT"
> rlm_realm: Adding Stripped-User-Name = "test user"
> rlm_realm: Adding Realm = "DEFAULT"
> rlm_realm: Authentication realm is LOCAL.
> ++[suffix] returns noop
> rlm_ldap: - authorize
> rlm_ldap: performing user authorization for test user
> WARNING: Deprecated conditional expansion ":-". See "man unlang" for
> details
> expand: (uid=%{Stripped-User-Name:-%{User-Name}}) -> (uid=test user)
> expand: o=data -> o=data
> rlm_ldap: ldap_get_conn: Checking Id: 0
> rlm_ldap: ldap_get_conn: Got Id: 0
> rlm_ldap: performing search in o=data, with filter (uid=test user)
> rlm_ldap: checking if remote access for test user is allowed by dialupAccess
> rlm_ldap: Added the eDirectory password test345 in check items as
> Cleartext-Password
> rlm_ldap: No default NMAS login sequence
> rlm_ldap: looking for check items in directory...
> rlm_ldap: LDAP attribute radiusAuthType as RADIUS attribute Auth-Type ==
> LDAP
> rlm_ldap: looking for reply items in directory...
> rlm_ldap: LDAP attribute radiusServiceType as RADIUS attribute
> Service-Type = Login-User
> rlm_ldap: user test user authorized to use remote access
> rlm_ldap: ldap_release_conn: Release Id: 0
> ++[ldap] returns ok
> rlm_eap: No EAP-Message, not doing EAP
> ++[eap] returns noop
> ++[unix] returns notfound
> ++[files] returns noop
> ++[expiration] returns noop
> ++[logintime] returns noop
> rlm_pap: Found existing Auth-Type, not changing it.
> ++[pap] returns noop
> rad_check_password: Found Auth-Type LDAP
> auth: type "LDAP"
> +- entering group LDAP
> rlm_ldap: - authenticate
> rlm_ldap: Attribute "User-Password" is required for authentication.
> Cannot use "CHAP-Password".
> ++[ldap] returns invalid
> auth: Failed to validate the user.
> Login incorrect: [test user at realm/<CHAP-Password>] (from client
> SMC_GS_LAN port 0)
> Found Post-Auth-Type Reject
> +- entering group REJECT
> 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 hamburgauth01.hamburg.mummert.de:389,
> authentication 0
> rlm_ldap: setting TLS CACert File to /etc/raddb/certs/AUTH-TREE_CA.b64
> rlm_ldap: setting TLS Require Cert to demand
> rlm_ldap: starting TLS
> rlm_ldap: bind as cn=test user,ou=users,o=data/aest345 to
> hamburgauth01.hamburg.mummert.de:389
> rlm_ldap: waiting for bind result ...
> rlm_ldap: LDAP login failed: check identity, password settings in ldap
> section of radiusd.conf
> rlm_ldap: eDirectory account policy check failed.
> rlm_ldap: NDS error: failed authentication (-669)
> rlm_ldap: ldap_release_conn: Release Id: 0
> ++[ldap] returns reject
> Delaying reject of request 1 for 1 seconds
> Going to the next request
> Sending delayed reject for request 1
> Sending Access-Reject of id 20 to 10.110.9.60 port 57851
> Service-Type = Login-User
> Reply-Message = "NDS error: failed authentication (-669)"
> Waking up in 2.9 seconds.
> Cleaning up request 1 ID 20 with timestamp +28
> Ready to process requests.
>
>
> ldap bind fails because the password is now "aest345"!!! this happens to
> whatever password is typed in at the client: the first char os replaced
> with an "a", so auth always fails. Funnily, if i set the account's
> password to "abcd345" CHAP troes to authenticate with "bbcd345".... any
> ideas?
>
> Thanks, Lothar
>
Your using LDAP for authorisation and and authentication, that won't
work. Using the LDAP module in the authenticate stanza means that LDAP
attempts to do a V3 bind to the LDAP directory using the credentials
supplied by the user, the result of the bind operation is then used to
allow/ deny the user access.
in radiusd.conf
Ensure that
ldap {
...
set_auth_type = no
}
Is set to no.
In authorize the modules are listed in this order
authorize {
ldap
pap
chap
}
In authenticate ensure you have stanzas for auth-type PAP and auth-type
chap. Do not list LDAP in authenticate.
NOTE: Authentication will only work with CHAP if the password in your
LDAP directory is in plaintext.
Regards,
Arrn
>
> ------------------------------------------------------------------------
>
> -
> List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html
More information about the Freeradius-Users
mailing list