~ubuntu-branches/ubuntu/utopic/moonshot-gss-eap/utopic-backports

« back to all changes in this revision

Viewing changes to libeap/wpa_supplicant/README

  • Committer: Package Import Robot
  • Author(s): Sam Hartman
  • Date: 2014-09-16 08:38:39 UTC
  • Revision ID: package-import@ubuntu.com-20140916083839-ipqco3thb1wcwvs0
Tags: upstream-0.9.2
ImportĀ upstreamĀ versionĀ 0.9.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
WPA Supplicant
 
2
==============
 
3
 
 
4
Copyright (c) 2003-2010, Jouni Malinen <j@w1.fi> and contributors
 
5
All Rights Reserved.
 
6
 
 
7
This program is dual-licensed under both the GPL version 2 and BSD
 
8
license. Either license may be used at your option.
 
9
 
 
10
 
 
11
 
 
12
License
 
13
-------
 
14
 
 
15
GPL v2:
 
16
 
 
17
This program is free software; you can redistribute it and/or modify
 
18
it under the terms of the GNU General Public License version 2 as
 
19
published by the Free Software Foundation.
 
20
 
 
21
This program is distributed in the hope that it will be useful,
 
22
but WITHOUT ANY WARRANTY; without even the implied warranty of
 
23
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
24
GNU General Public License for more details.
 
25
 
 
26
You should have received a copy of the GNU General Public License
 
27
along with this program; if not, write to the Free Software
 
28
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
29
 
 
30
(this copy of the license is in COPYING file)
 
31
 
 
32
 
 
33
Alternatively, this software may be distributed, used, and modified
 
34
under the terms of BSD license:
 
35
 
 
36
Redistribution and use in source and binary forms, with or without
 
37
modification, are permitted provided that the following conditions are
 
38
met:
 
39
 
 
40
1. Redistributions of source code must retain the above copyright
 
41
   notice, this list of conditions and the following disclaimer.
 
42
 
 
43
2. Redistributions in binary form must reproduce the above copyright
 
44
   notice, this list of conditions and the following disclaimer in the
 
45
   documentation and/or other materials provided with the distribution.
 
46
 
 
47
3. Neither the name(s) of the above-listed copyright holder(s) nor the
 
48
   names of its contributors may be used to endorse or promote products
 
49
   derived from this software without specific prior written permission.
 
50
 
 
51
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 
52
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 
53
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 
54
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 
55
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 
56
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 
57
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 
58
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 
59
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 
60
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 
61
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
62
 
 
63
 
 
64
 
 
65
Features
 
66
--------
 
67
 
 
68
Supported WPA/IEEE 802.11i features:
 
69
- WPA-PSK ("WPA-Personal")
 
70
- WPA with EAP (e.g., with RADIUS authentication server) ("WPA-Enterprise")
 
71
  Following authentication methods are supported with an integrate IEEE 802.1X
 
72
  Supplicant:
 
73
  * EAP-TLS
 
74
  * EAP-PEAP/MSCHAPv2 (both PEAPv0 and PEAPv1)
 
75
  * EAP-PEAP/TLS (both PEAPv0 and PEAPv1)
 
76
  * EAP-PEAP/GTC (both PEAPv0 and PEAPv1)
 
77
  * EAP-PEAP/OTP (both PEAPv0 and PEAPv1)
 
78
  * EAP-PEAP/MD5-Challenge (both PEAPv0 and PEAPv1)
 
79
  * EAP-TTLS/EAP-MD5-Challenge
 
80
  * EAP-TTLS/EAP-GTC
 
81
  * EAP-TTLS/EAP-OTP
 
82
  * EAP-TTLS/EAP-MSCHAPv2
 
83
  * EAP-TTLS/EAP-TLS
 
84
  * EAP-TTLS/MSCHAPv2
 
85
  * EAP-TTLS/MSCHAP
 
86
  * EAP-TTLS/PAP
 
87
  * EAP-TTLS/CHAP
 
88
  * EAP-SIM
 
89
  * EAP-AKA
 
90
  * EAP-PSK
 
91
  * EAP-PAX
 
92
  * EAP-SAKE
 
93
  * EAP-IKEv2
 
94
  * EAP-GPSK
 
95
  * LEAP (note: requires special support from the driver for IEEE 802.11
 
96
          authentication)
 
97
  (following methods are supported, but since they do not generate keying
 
98
   material, they cannot be used with WPA or IEEE 802.1X WEP keying)
 
99
  * EAP-MD5-Challenge 
 
100
  * EAP-MSCHAPv2
 
101
  * EAP-GTC
 
102
  * EAP-OTP
 
103
- key management for CCMP, TKIP, WEP104, WEP40
 
104
- RSN/WPA2 (IEEE 802.11i)
 
105
  * pre-authentication
 
106
  * PMKSA caching
 
107
 
 
108
Supported TLS/crypto libraries:
 
109
- OpenSSL (default)
 
110
- GnuTLS
 
111
 
 
112
Internal TLS/crypto implementation (optional):
 
113
- can be used in place of an external TLS/crypto library
 
114
- TLSv1
 
115
- X.509 certificate processing
 
116
- PKCS #1
 
117
- ASN.1
 
118
- RSA
 
119
- bignum
 
120
- minimal size (ca. 50 kB binary, parts of which are already needed for WPA;
 
121
  TLSv1/X.509/ASN.1/RSA/bignum parts are about 25 kB on x86)
 
122
 
 
123
 
 
124
Requirements
 
125
------------
 
126
 
 
127
Current hardware/software requirements:
 
128
- Linux kernel 2.4.x or 2.6.x with Linux Wireless Extensions v15 or newer
 
129
- FreeBSD 6-CURRENT
 
130
- NetBSD-current
 
131
- Microsoft Windows with WinPcap (at least WinXP, may work with other versions)
 
132
- drivers:
 
133
        Linux drivers that support WPA/WPA2 configuration with the generic
 
134
        Linux wireless extensions (WE-18 or newer). Even though there are
 
135
        number of driver specific interface included in wpa_supplicant, please
 
136
        note that Linux drivers are moving to use generic wireless extensions
 
137
        and driver_wext (-Dwext on wpa_supplicant command line) should be the
 
138
        default option to start with before falling back to driver specific
 
139
        interface.
 
140
 
 
141
        Host AP driver for Prism2/2.5/3 (development snapshot/v0.2.x)
 
142
        (http://hostap.epitest.fi/)
 
143
        Driver need to be set in Managed mode ('iwconfig wlan0 mode managed').
 
144
        Please note that station firmware version needs to be 1.7.0 or newer
 
145
        to work in WPA mode.
 
146
 
 
147
        Linuxant DriverLoader (http://www.linuxant.com/driverloader/)
 
148
        with Windows NDIS driver for your wlan card supporting WPA.
 
149
 
 
150
        Agere Systems Inc. Linux Driver
 
151
        (http://www.agere.com/support/drivers/)
 
152
        Please note that the driver interface file (driver_hermes.c) and
 
153
        hardware specific include files are not included in the
 
154
        wpa_supplicant distribution. You will need to copy these from the
 
155
        source package of the Agere driver.
 
156
 
 
157
        madwifi driver for cards based on Atheros chip set (ar521x)
 
158
        (http://sourceforge.net/projects/madwifi/)
 
159
        Please note that you will need to modify the wpa_supplicant .config
 
160
        file to use the correct path for the madwifi driver root directory
 
161
        (CFLAGS += -I../madwifi/wpa line in example defconfig).
 
162
 
 
163
        ATMEL AT76C5XXx driver for USB and PCMCIA cards
 
164
        (http://atmelwlandriver.sourceforge.net/).
 
165
 
 
166
        Linux ndiswrapper (http://ndiswrapper.sourceforge.net/) with
 
167
        Windows NDIS driver.
 
168
 
 
169
        Broadcom wl.o driver (old version only)
 
170
        This is a generic Linux driver for Broadcom IEEE 802.11a/g cards.
 
171
        However, it is proprietary driver that is not publicly available
 
172
        except for couple of exceptions, mainly Broadcom-based APs/wireless
 
173
        routers that use Linux. The driver binary can be downloaded, e.g.,
 
174
        from Linksys support site (http://www.linksys.com/support/gpl.asp)
 
175
        for Linksys WRT54G. The GPL tarball includes cross-compiler and
 
176
        the needed header file, wlioctl.h, for compiling wpa_supplicant.
 
177
        This driver support in wpa_supplicant is expected to work also with
 
178
        other devices based on Broadcom driver (assuming the driver includes
 
179
        client mode support). Please note that the newer Broadcom driver
 
180
        ("hybrid Linux driver") supports Linux wireless extensions and does
 
181
        not need (or even work) with the specific driver wrapper. Use -Dwext
 
182
        with that driver.
 
183
 
 
184
        Intel ipw2100 driver
 
185
        (http://sourceforge.net/projects/ipw2100/)
 
186
 
 
187
        Intel ipw2200 driver
 
188
        (http://sourceforge.net/projects/ipw2200/)
 
189
 
 
190
        In theory, any driver that supports Linux wireless extensions can be
 
191
        used with IEEE 802.1X (i.e., not WPA) when using ap_scan=0 option in
 
192
        configuration file.
 
193
 
 
194
        Wired Ethernet drivers (with ap_scan=0)
 
195
 
 
196
        BSD net80211 layer (e.g., Atheros driver)
 
197
        At the moment, this is for FreeBSD 6-CURRENT branch and NetBSD-current.
 
198
 
 
199
        Windows NDIS
 
200
        The current Windows port requires WinPcap (http://winpcap.polito.it/).
 
201
        See README-Windows.txt for more information.
 
202
 
 
203
wpa_supplicant was designed to be portable for different drivers and
 
204
operating systems. Hopefully, support for more wlan cards and OSes will be
 
205
added in the future. See developer's documentation
 
206
(http://hostap.epitest.fi/wpa_supplicant/devel/) for more information about the
 
207
design of wpa_supplicant and porting to other drivers. One main goal
 
208
is to add full WPA/WPA2 support to Linux wireless extensions to allow
 
209
new drivers to be supported without having to implement new
 
210
driver-specific interface code in wpa_supplicant.
 
211
 
 
212
Optional libraries for layer2 packet processing:
 
213
- libpcap (tested with 0.7.2, most relatively recent versions assumed to work,
 
214
        this is likely to be available with most distributions,
 
215
        http://tcpdump.org/)
 
216
- libdnet (tested with v1.4, most versions assumed to work,
 
217
        http://libdnet.sourceforge.net/)
 
218
 
 
219
These libraries are _not_ used in the default Linux build. Instead,
 
220
internal Linux specific implementation is used. libpcap/libdnet are
 
221
more portable and they can be used by adding CONFIG_L2_PACKET=pcap into
 
222
.config. They may also be selected automatically for other operating
 
223
systems. In case of Windows builds, WinPcap is used by default
 
224
(CONFIG_L2_PACKET=winpcap).
 
225
 
 
226
 
 
227
Optional libraries for EAP-TLS, EAP-PEAP, and EAP-TTLS:
 
228
- OpenSSL (tested with 0.9.7c and 0.9.7d, and 0.9.8 versions; assumed to
 
229
  work with most relatively recent versions; this is likely to be
 
230
  available with most distributions, http://www.openssl.org/)
 
231
- GnuTLS
 
232
- internal TLSv1 implementation
 
233
 
 
234
TLS options for EAP-FAST:
 
235
- OpenSSL 0.9.8d _with_ openssl-0.9.8d-tls-extensions.patch applied
 
236
  (i.e., the default OpenSSL package does not include support for
 
237
  extensions needed for EAP-FAST)
 
238
- internal TLSv1 implementation
 
239
 
 
240
One of these libraries is needed when EAP-TLS, EAP-PEAP, EAP-TTLS, or
 
241
EAP-FAST support is enabled. WPA-PSK mode does not require this or EAPOL/EAP
 
242
implementation. A configuration file, .config, for compilation is
 
243
needed to enable IEEE 802.1X/EAPOL and EAP methods. Note that EAP-MD5,
 
244
EAP-GTC, EAP-OTP, and EAP-MSCHAPV2 cannot be used alone with WPA, so
 
245
they should only be enabled if testing the EAPOL/EAP state
 
246
machines. However, there can be used as inner authentication
 
247
algorithms with EAP-PEAP and EAP-TTLS.
 
248
 
 
249
See Building and installing section below for more detailed
 
250
information about the wpa_supplicant build time configuration.
 
251
 
 
252
 
 
253
 
 
254
WPA
 
255
---
 
256
 
 
257
The original security mechanism of IEEE 802.11 standard was not
 
258
designed to be strong and has proven to be insufficient for most
 
259
networks that require some kind of security. Task group I (Security)
 
260
of IEEE 802.11 working group (http://www.ieee802.org/11/) has worked
 
261
to address the flaws of the base standard and has in practice
 
262
completed its work in May 2004. The IEEE 802.11i amendment to the IEEE
 
263
802.11 standard was approved in June 2004 and published in July 2004.
 
264
 
 
265
Wi-Fi Alliance (http://www.wi-fi.org/) used a draft version of the
 
266
IEEE 802.11i work (draft 3.0) to define a subset of the security
 
267
enhancements that can be implemented with existing wlan hardware. This
 
268
is called Wi-Fi Protected Access<TM> (WPA). This has now become a
 
269
mandatory component of interoperability testing and certification done
 
270
by Wi-Fi Alliance. Wi-Fi provides information about WPA at its web
 
271
site (http://www.wi-fi.org/OpenSection/protected_access.asp).
 
272
 
 
273
IEEE 802.11 standard defined wired equivalent privacy (WEP) algorithm
 
274
for protecting wireless networks. WEP uses RC4 with 40-bit keys,
 
275
24-bit initialization vector (IV), and CRC32 to protect against packet
 
276
forgery. All these choices have proven to be insufficient: key space is
 
277
too small against current attacks, RC4 key scheduling is insufficient
 
278
(beginning of the pseudorandom stream should be skipped), IV space is
 
279
too small and IV reuse makes attacks easier, there is no replay
 
280
protection, and non-keyed authentication does not protect against bit
 
281
flipping packet data.
 
282
 
 
283
WPA is an intermediate solution for the security issues. It uses
 
284
Temporal Key Integrity Protocol (TKIP) to replace WEP. TKIP is a
 
285
compromise on strong security and possibility to use existing
 
286
hardware. It still uses RC4 for the encryption like WEP, but with
 
287
per-packet RC4 keys. In addition, it implements replay protection,
 
288
keyed packet authentication mechanism (Michael MIC).
 
289
 
 
290
Keys can be managed using two different mechanisms. WPA can either use
 
291
an external authentication server (e.g., RADIUS) and EAP just like
 
292
IEEE 802.1X is using or pre-shared keys without need for additional
 
293
servers. Wi-Fi calls these "WPA-Enterprise" and "WPA-Personal",
 
294
respectively. Both mechanisms will generate a master session key for
 
295
the Authenticator (AP) and Supplicant (client station).
 
296
 
 
297
WPA implements a new key handshake (4-Way Handshake and Group Key
 
298
Handshake) for generating and exchanging data encryption keys between
 
299
the Authenticator and Supplicant. This handshake is also used to
 
300
verify that both Authenticator and Supplicant know the master session
 
301
key. These handshakes are identical regardless of the selected key
 
302
management mechanism (only the method for generating master session
 
303
key changes).
 
304
 
 
305
 
 
306
 
 
307
IEEE 802.11i / WPA2
 
308
-------------------
 
309
 
 
310
The design for parts of IEEE 802.11i that were not included in WPA has
 
311
finished (May 2004) and this amendment to IEEE 802.11 was approved in
 
312
June 2004. Wi-Fi Alliance is using the final IEEE 802.11i as a new
 
313
version of WPA called WPA2. This includes, e.g., support for more
 
314
robust encryption algorithm (CCMP: AES in Counter mode with CBC-MAC)
 
315
to replace TKIP and optimizations for handoff (reduced number of
 
316
messages in initial key handshake, pre-authentication, and PMKSA caching).
 
317
 
 
318
 
 
319
 
 
320
wpa_supplicant
 
321
--------------
 
322
 
 
323
wpa_supplicant is an implementation of the WPA Supplicant component,
 
324
i.e., the part that runs in the client stations. It implements WPA key
 
325
negotiation with a WPA Authenticator and EAP authentication with
 
326
Authentication Server. In addition, it controls the roaming and IEEE
 
327
802.11 authentication/association of the wlan driver.
 
328
 
 
329
wpa_supplicant is designed to be a "daemon" program that runs in the
 
330
background and acts as the backend component controlling the wireless
 
331
connection. wpa_supplicant supports separate frontend programs and an
 
332
example text-based frontend, wpa_cli, is included with wpa_supplicant.
 
333
 
 
334
Following steps are used when associating with an AP using WPA:
 
335
 
 
336
- wpa_supplicant requests the kernel driver to scan neighboring BSSes
 
337
- wpa_supplicant selects a BSS based on its configuration
 
338
- wpa_supplicant requests the kernel driver to associate with the chosen
 
339
  BSS
 
340
- If WPA-EAP: integrated IEEE 802.1X Supplicant completes EAP
 
341
  authentication with the authentication server (proxied by the
 
342
  Authenticator in the AP)
 
343
- If WPA-EAP: master key is received from the IEEE 802.1X Supplicant
 
344
- If WPA-PSK: wpa_supplicant uses PSK as the master session key
 
345
- wpa_supplicant completes WPA 4-Way Handshake and Group Key Handshake
 
346
  with the Authenticator (AP)
 
347
- wpa_supplicant configures encryption keys for unicast and broadcast
 
348
- normal data packets can be transmitted and received
 
349
 
 
350
 
 
351
 
 
352
Building and installing
 
353
-----------------------
 
354
 
 
355
In order to be able to build wpa_supplicant, you will first need to
 
356
select which parts of it will be included. This is done by creating a
 
357
build time configuration file, .config, in the wpa_supplicant root
 
358
directory. Configuration options are text lines using following
 
359
format: CONFIG_<option>=y. Lines starting with # are considered
 
360
comments and are ignored. See defconfig file for an example configuration
 
361
and a list of available options and additional notes.
 
362
 
 
363
The build time configuration can be used to select only the needed
 
364
features and limit the binary size and requirements for external
 
365
libraries. The main configuration parts are the selection of which
 
366
driver interfaces (e.g., hostap, madwifi, ..) and which authentication
 
367
methods (e.g., EAP-TLS, EAP-PEAP, ..) are included.
 
368
 
 
369
Following build time configuration options are used to control IEEE
 
370
802.1X/EAPOL and EAP state machines and all EAP methods. Including
 
371
TLS, PEAP, or TTLS will require linking wpa_supplicant with OpenSSL
 
372
library for TLS implementation. Alternatively, GnuTLS or the internal
 
373
TLSv1 implementation can be used for TLS functionaly.
 
374
 
 
375
CONFIG_IEEE8021X_EAPOL=y
 
376
CONFIG_EAP_MD5=y
 
377
CONFIG_EAP_MSCHAPV2=y
 
378
CONFIG_EAP_TLS=y
 
379
CONFIG_EAP_PEAP=y
 
380
CONFIG_EAP_TTLS=y
 
381
CONFIG_EAP_GTC=y
 
382
CONFIG_EAP_OTP=y
 
383
CONFIG_EAP_SIM=y
 
384
CONFIG_EAP_AKA=y
 
385
CONFIG_EAP_PSK=y
 
386
CONFIG_EAP_SAKE=y
 
387
CONFIG_EAP_GPSK=y
 
388
CONFIG_EAP_PAX=y
 
389
CONFIG_EAP_LEAP=y
 
390
CONFIG_EAP_IKEV2=y
 
391
 
 
392
Following option can be used to include GSM SIM/USIM interface for GSM/UMTS
 
393
authentication algorithm (for EAP-SIM/EAP-AKA). This requires pcsc-lite
 
394
(http://www.linuxnet.com/) for smart card access.
 
395
 
 
396
CONFIG_PCSC=y
 
397
 
 
398
Following options can be added to .config to select which driver
 
399
interfaces are included. Hermes driver interface needs to be downloaded
 
400
from Agere (see above).
 
401
 
 
402
CONFIG_DRIVER_HOSTAP=y
 
403
CONFIG_DRIVER_HERMES=y
 
404
CONFIG_DRIVER_MADWIFI=y
 
405
CONFIG_DRIVER_ATMEL=y
 
406
CONFIG_DRIVER_WEXT=y
 
407
CONFIG_DRIVER_RALINK=y
 
408
CONFIG_DRIVER_NDISWRAPPER=y
 
409
CONFIG_DRIVER_BROADCOM=y
 
410
CONFIG_DRIVER_IPW=y
 
411
CONFIG_DRIVER_BSD=y
 
412
CONFIG_DRIVER_NDIS=y
 
413
 
 
414
Following example includes all features and driver interfaces that are
 
415
included in the wpa_supplicant package:
 
416
 
 
417
CONFIG_DRIVER_HOSTAP=y
 
418
CONFIG_DRIVER_HERMES=y
 
419
CONFIG_DRIVER_MADWIFI=y
 
420
CONFIG_DRIVER_ATMEL=y
 
421
CONFIG_DRIVER_WEXT=y
 
422
CONFIG_DRIVER_NDISWRAPPER=y
 
423
CONFIG_DRIVER_BROADCOM=y
 
424
CONFIG_DRIVER_IPW=y
 
425
CONFIG_DRIVER_BSD=y
 
426
CONFIG_DRIVER_NDIS=y
 
427
CONFIG_IEEE8021X_EAPOL=y
 
428
CONFIG_EAP_MD5=y
 
429
CONFIG_EAP_MSCHAPV2=y
 
430
CONFIG_EAP_TLS=y
 
431
CONFIG_EAP_PEAP=y
 
432
CONFIG_EAP_TTLS=y
 
433
CONFIG_EAP_GTC=y
 
434
CONFIG_EAP_OTP=y
 
435
CONFIG_EAP_SIM=y
 
436
CONFIG_EAP_AKA=y
 
437
CONFIG_EAP_PSK=y
 
438
CONFIG_EAP_SAKE=y
 
439
CONFIG_EAP_GPSK=y
 
440
CONFIG_EAP_PAX=y
 
441
CONFIG_EAP_LEAP=y
 
442
CONFIG_EAP_IKEV2=y
 
443
CONFIG_PCSC=y
 
444
 
 
445
EAP-PEAP and EAP-TTLS will automatically include configured EAP
 
446
methods (MD5, OTP, GTC, MSCHAPV2) for inner authentication selection.
 
447
 
 
448
 
 
449
After you have created a configuration file, you can build
 
450
wpa_supplicant and wpa_cli with 'make' command. You may then install
 
451
the binaries to a suitable system directory, e.g., /usr/local/bin.
 
452
 
 
453
Example commands:
 
454
 
 
455
# build wpa_supplicant and wpa_cli
 
456
make
 
457
# install binaries (this may need root privileges)
 
458
cp wpa_cli wpa_supplicant /usr/local/bin
 
459
 
 
460
 
 
461
You will need to make a configuration file, e.g.,
 
462
/etc/wpa_supplicant.conf, with network configuration for the networks
 
463
you are going to use. Configuration file section below includes
 
464
explanation fo the configuration file format and includes various
 
465
examples. Once the configuration is ready, you can test whether the
 
466
configuration work by first running wpa_supplicant with following
 
467
command to start it on foreground with debugging enabled:
 
468
 
 
469
wpa_supplicant -iwlan0 -c/etc/wpa_supplicant.conf -d
 
470
 
 
471
Assuming everything goes fine, you can start using following command
 
472
to start wpa_supplicant on background without debugging:
 
473
 
 
474
wpa_supplicant -iwlan0 -c/etc/wpa_supplicant.conf -B
 
475
 
 
476
Please note that if you included more than one driver interface in the
 
477
build time configuration (.config), you may need to specify which
 
478
interface to use by including -D<driver name> option on the command
 
479
line. See following section for more details on command line options
 
480
for wpa_supplicant.
 
481
 
 
482
 
 
483
 
 
484
Command line options
 
485
--------------------
 
486
 
 
487
usage:
 
488
  wpa_supplicant [-BddfhKLqqtuvwW] [-P<pid file>] [-g<global ctrl>] \
 
489
        -i<ifname> -c<config file> [-C<ctrl>] [-D<driver>] [-p<driver_param>] \
 
490
        [-b<br_ifname> [-N -i<ifname> -c<conf> [-C<ctrl>] [-D<driver>] \
 
491
        [-p<driver_param>] [-b<br_ifname>] ...]
 
492
 
 
493
options:
 
494
  -b = optional bridge interface name
 
495
  -B = run daemon in the background
 
496
  -c = Configuration file
 
497
  -C = ctrl_interface parameter (only used if -c is not)
 
498
  -i = interface name
 
499
  -d = increase debugging verbosity (-dd even more)
 
500
  -D = driver name (can be multiple drivers: nl80211,wext)
 
501
  -f = Log output to default log location (normally /tmp)
 
502
  -g = global ctrl_interface
 
503
  -K = include keys (passwords, etc.) in debug output
 
504
  -t = include timestamp in debug messages
 
505
  -h = show this help text
 
506
  -L = show license (GPL and BSD)
 
507
  -p = driver parameters
 
508
  -P = PID file
 
509
  -q = decrease debugging verbosity (-qq even less)
 
510
  -u = enable DBus control interface
 
511
  -v = show version
 
512
  -w = wait for interface to be added, if needed
 
513
  -W = wait for a control interface monitor before starting
 
514
  -N = start describing new interface
 
515
 
 
516
drivers:
 
517
  hostap = Host AP driver (Intersil Prism2/2.5/3) [default]
 
518
        (this can also be used with Linuxant DriverLoader)
 
519
  hermes = Agere Systems Inc. driver (Hermes-I/Hermes-II)
 
520
  madwifi = MADWIFI 802.11 support (Atheros, etc.) (deprecated; use wext)
 
521
  atmel = ATMEL AT76C5XXx (USB, PCMCIA)
 
522
  wext = Linux wireless extensions (generic)
 
523
  ralink = Ralink Client driver
 
524
  ndiswrapper = Linux ndiswrapper (deprecated; use wext)
 
525
  broadcom = Broadcom wl.o driver
 
526
  ipw = Intel ipw2100/2200 driver (old; use wext with Linux 2.6.13 or newer)
 
527
  wired = wpa_supplicant wired Ethernet driver
 
528
  roboswitch = wpa_supplicant Broadcom switch driver
 
529
  bsd = BSD 802.11 support (Atheros, etc.)
 
530
  ndis = Windows NDIS driver
 
531
 
 
532
In most common cases, wpa_supplicant is started with
 
533
 
 
534
wpa_supplicant -B -c/etc/wpa_supplicant.conf -iwlan0
 
535
 
 
536
This makes the process fork into background.
 
537
 
 
538
The easiest way to debug problems, and to get debug log for bug
 
539
reports, is to start wpa_supplicant on foreground with debugging
 
540
enabled:
 
541
 
 
542
wpa_supplicant -c/etc/wpa_supplicant.conf -iwlan0 -d
 
543
 
 
544
If the specific driver wrapper is not known beforehand, it is possible
 
545
to specify multiple comma separated driver wrappers on the command
 
546
line. wpa_supplicant will use the first driver wrapper that is able to
 
547
initialize the interface.
 
548
 
 
549
wpa_supplicant -Dnl80211,wext -c/etc/wpa_supplicant.conf -iwlan0
 
550
 
 
551
 
 
552
wpa_supplicant can control multiple interfaces (radios) either by
 
553
running one process for each interface separately or by running just
 
554
one process and list of options at command line. Each interface is
 
555
separated with -N argument. As an example, following command would
 
556
start wpa_supplicant for two interfaces:
 
557
 
 
558
wpa_supplicant \
 
559
        -c wpa1.conf -i wlan0 -D hostap -N \
 
560
        -c wpa2.conf -i ath0 -D madwifi
 
561
 
 
562
 
 
563
If the interface is added in a Linux bridge (e.g., br0), the bridge
 
564
interface needs to be configured to wpa_supplicant in addition to the
 
565
main interface:
 
566
 
 
567
wpa_supplicant -cw.conf -Dmadwifi -iath0 -bbr0
 
568
 
 
569
 
 
570
Configuration file
 
571
------------------
 
572
 
 
573
wpa_supplicant is configured using a text file that lists all accepted
 
574
networks and security policies, including pre-shared keys. See
 
575
example configuration file, wpa_supplicant.conf, for detailed
 
576
information about the configuration format and supported fields.
 
577
 
 
578
Changes to configuration file can be reloaded be sending SIGHUP signal
 
579
to wpa_supplicant ('killall -HUP wpa_supplicant'). Similarly,
 
580
reloading can be triggered with 'wpa_cli reconfigure' command.
 
581
 
 
582
Configuration file can include one or more network blocks, e.g., one
 
583
for each used SSID. wpa_supplicant will automatically select the best
 
584
betwork based on the order of network blocks in the configuration
 
585
file, network security level (WPA/WPA2 is preferred), and signal
 
586
strength.
 
587
 
 
588
Example configuration files for some common configurations:
 
589
 
 
590
1) WPA-Personal (PSK) as home network and WPA-Enterprise with EAP-TLS as work
 
591
   network
 
592
 
 
593
# allow frontend (e.g., wpa_cli) to be used by all users in 'wheel' group
 
594
ctrl_interface=/var/run/wpa_supplicant
 
595
ctrl_interface_group=wheel
 
596
#
 
597
# home network; allow all valid ciphers
 
598
network={
 
599
        ssid="home"
 
600
        scan_ssid=1
 
601
        key_mgmt=WPA-PSK
 
602
        psk="very secret passphrase"
 
603
}
 
604
#
 
605
# work network; use EAP-TLS with WPA; allow only CCMP and TKIP ciphers
 
606
network={
 
607
        ssid="work"
 
608
        scan_ssid=1
 
609
        key_mgmt=WPA-EAP
 
610
        pairwise=CCMP TKIP
 
611
        group=CCMP TKIP
 
612
        eap=TLS
 
613
        identity="user@example.com"
 
614
        ca_cert="/etc/cert/ca.pem"
 
615
        client_cert="/etc/cert/user.pem"
 
616
        private_key="/etc/cert/user.prv"
 
617
        private_key_passwd="password"
 
618
}
 
619
 
 
620
 
 
621
2) WPA-RADIUS/EAP-PEAP/MSCHAPv2 with RADIUS servers that use old peaplabel
 
622
   (e.g., Funk Odyssey and SBR, Meetinghouse Aegis, Interlink RAD-Series)
 
623
 
 
624
ctrl_interface=/var/run/wpa_supplicant
 
625
ctrl_interface_group=wheel
 
626
network={
 
627
        ssid="example"
 
628
        scan_ssid=1
 
629
        key_mgmt=WPA-EAP
 
630
        eap=PEAP
 
631
        identity="user@example.com"
 
632
        password="foobar"
 
633
        ca_cert="/etc/cert/ca.pem"
 
634
        phase1="peaplabel=0"
 
635
        phase2="auth=MSCHAPV2"
 
636
}
 
637
 
 
638
 
 
639
3) EAP-TTLS/EAP-MD5-Challenge configuration with anonymous identity for the
 
640
   unencrypted use. Real identity is sent only within an encrypted TLS tunnel.
 
641
 
 
642
ctrl_interface=/var/run/wpa_supplicant
 
643
ctrl_interface_group=wheel
 
644
network={
 
645
        ssid="example"
 
646
        scan_ssid=1
 
647
        key_mgmt=WPA-EAP
 
648
        eap=TTLS
 
649
        identity="user@example.com"
 
650
        anonymous_identity="anonymous@example.com"
 
651
        password="foobar"
 
652
        ca_cert="/etc/cert/ca.pem"
 
653
        phase2="auth=MD5"
 
654
}
 
655
 
 
656
 
 
657
4) IEEE 802.1X (i.e., no WPA) with dynamic WEP keys (require both unicast and
 
658
   broadcast); use EAP-TLS for authentication
 
659
 
 
660
ctrl_interface=/var/run/wpa_supplicant
 
661
ctrl_interface_group=wheel
 
662
network={
 
663
        ssid="1x-test"
 
664
        scan_ssid=1
 
665
        key_mgmt=IEEE8021X
 
666
        eap=TLS
 
667
        identity="user@example.com"
 
668
        ca_cert="/etc/cert/ca.pem"
 
669
        client_cert="/etc/cert/user.pem"
 
670
        private_key="/etc/cert/user.prv"
 
671
        private_key_passwd="password"
 
672
        eapol_flags=3
 
673
}
 
674
 
 
675
 
 
676
5) Catch all example that allows more or less all configuration modes. The
 
677
   configuration options are used based on what security policy is used in the
 
678
   selected SSID. This is mostly for testing and is not recommended for normal
 
679
   use.
 
680
 
 
681
ctrl_interface=/var/run/wpa_supplicant
 
682
ctrl_interface_group=wheel
 
683
network={
 
684
        ssid="example"
 
685
        scan_ssid=1
 
686
        key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE
 
687
        pairwise=CCMP TKIP
 
688
        group=CCMP TKIP WEP104 WEP40
 
689
        psk="very secret passphrase"
 
690
        eap=TTLS PEAP TLS
 
691
        identity="user@example.com"
 
692
        password="foobar"
 
693
        ca_cert="/etc/cert/ca.pem"
 
694
        client_cert="/etc/cert/user.pem"
 
695
        private_key="/etc/cert/user.prv"
 
696
        private_key_passwd="password"
 
697
        phase1="peaplabel=0"
 
698
        ca_cert2="/etc/cert/ca2.pem"
 
699
        client_cert2="/etc/cer/user.pem"
 
700
        private_key2="/etc/cer/user.prv"
 
701
        private_key2_passwd="password"
 
702
}
 
703
 
 
704
 
 
705
6) Authentication for wired Ethernet. This can be used with 'wired' or
 
706
   'roboswitch' interface (-Dwired or -Droboswitch on command line).
 
707
 
 
708
ctrl_interface=/var/run/wpa_supplicant
 
709
ctrl_interface_group=wheel
 
710
ap_scan=0
 
711
network={
 
712
        key_mgmt=IEEE8021X
 
713
        eap=MD5
 
714
        identity="user"
 
715
        password="password"
 
716
        eapol_flags=0
 
717
}
 
718
 
 
719
 
 
720
 
 
721
Certificates
 
722
------------
 
723
 
 
724
Some EAP authentication methods require use of certificates. EAP-TLS
 
725
uses both server side and client certificates whereas EAP-PEAP and
 
726
EAP-TTLS only require the server side certificate. When client
 
727
certificate is used, a matching private key file has to also be
 
728
included in configuration. If the private key uses a passphrase, this
 
729
has to be configured in wpa_supplicant.conf ("private_key_passwd").
 
730
 
 
731
wpa_supplicant supports X.509 certificates in PEM and DER
 
732
formats. User certificate and private key can be included in the same
 
733
file.
 
734
 
 
735
If the user certificate and private key is received in PKCS#12/PFX
 
736
format, they need to be converted to suitable PEM/DER format for
 
737
wpa_supplicant. This can be done, e.g., with following commands:
 
738
 
 
739
# convert client certificate and private key to PEM format
 
740
openssl pkcs12 -in example.pfx -out user.pem -clcerts
 
741
# convert CA certificate (if included in PFX file) to PEM format
 
742
openssl pkcs12 -in example.pfx -out ca.pem -cacerts -nokeys
 
743
 
 
744
 
 
745
 
 
746
wpa_cli
 
747
-------
 
748
 
 
749
wpa_cli is a text-based frontend program for interacting with
 
750
wpa_supplicant. It is used to query current status, change
 
751
configuration, trigger events, and request interactive user input.
 
752
 
 
753
wpa_cli can show the current authentication status, selected security
 
754
mode, dot11 and dot1x MIBs, etc. In addition, it can configure some
 
755
variables like EAPOL state machine parameters and trigger events like
 
756
reassociation and IEEE 802.1X logoff/logon. wpa_cli provides a user
 
757
interface to request authentication information, like username and
 
758
password, if these are not included in the configuration. This can be
 
759
used to implement, e.g., one-time-passwords or generic token card
 
760
authentication where the authentication is based on a
 
761
challenge-response that uses an external device for generating the
 
762
response.
 
763
 
 
764
The control interface of wpa_supplicant can be configured to allow
 
765
non-root user access (ctrl_interface_group in the configuration
 
766
file). This makes it possible to run wpa_cli with a normal user
 
767
account.
 
768
 
 
769
wpa_cli supports two modes: interactive and command line. Both modes
 
770
share the same command set and the main difference is in interactive
 
771
mode providing access to unsolicited messages (event messages,
 
772
username/password requests).
 
773
 
 
774
Interactive mode is started when wpa_cli is executed without including
 
775
the command as a command line parameter. Commands are then entered on
 
776
the wpa_cli prompt. In command line mode, the same commands are
 
777
entered as command line arguments for wpa_cli.
 
778
 
 
779
 
 
780
Interactive authentication parameters request
 
781
 
 
782
When wpa_supplicant need authentication parameters, like username and
 
783
password, which are not present in the configuration file, it sends a
 
784
request message to all attached frontend programs, e.g., wpa_cli in
 
785
interactive mode. wpa_cli shows these requests with
 
786
"CTRL-REQ-<type>-<id>:<text>" prefix. <type> is IDENTITY, PASSWORD, or
 
787
OTP (one-time-password). <id> is a unique identifier for the current
 
788
network. <text> is description of the request. In case of OTP request,
 
789
it includes the challenge from the authentication server.
 
790
 
 
791
The reply to these requests can be given with 'identity', 'password',
 
792
and 'otp' commands. <id> needs to be copied from the the matching
 
793
request. 'password' and 'otp' commands can be used regardless of
 
794
whether the request was for PASSWORD or OTP. The main difference
 
795
between these two commands is that values given with 'password' are
 
796
remembered as long as wpa_supplicant is running whereas values given
 
797
with 'otp' are used only once and then forgotten, i.e., wpa_supplicant
 
798
will ask frontend for a new value for every use. This can be used to
 
799
implement one-time-password lists and generic token card -based
 
800
authentication.
 
801
 
 
802
Example request for password and a matching reply:
 
803
 
 
804
CTRL-REQ-PASSWORD-1:Password needed for SSID foobar
 
805
> password 1 mysecretpassword
 
806
 
 
807
Example request for generic token card challenge-response:
 
808
 
 
809
CTRL-REQ-OTP-2:Challenge 1235663 needed for SSID foobar
 
810
> otp 2 9876
 
811
 
 
812
 
 
813
wpa_cli commands
 
814
 
 
815
  status = get current WPA/EAPOL/EAP status
 
816
  mib = get MIB variables (dot1x, dot11)
 
817
  help = show this usage help
 
818
  interface [ifname] = show interfaces/select interface
 
819
  level <debug level> = change debug level
 
820
  license = show full wpa_cli license
 
821
  logoff = IEEE 802.1X EAPOL state machine logoff
 
822
  logon = IEEE 802.1X EAPOL state machine logon
 
823
  set = set variables (shows list of variables when run without arguments)
 
824
  pmksa = show PMKSA cache
 
825
  reassociate = force reassociation
 
826
  reconfigure = force wpa_supplicant to re-read its configuration file
 
827
  preauthenticate <BSSID> = force preauthentication
 
828
  identity <network id> <identity> = configure identity for an SSID
 
829
  password <network id> <password> = configure password for an SSID
 
830
  pin <network id> <pin> = configure pin for an SSID
 
831
  otp <network id> <password> = configure one-time-password for an SSID
 
832
  passphrase <network id> <passphrase> = configure private key passphrase
 
833
    for an SSID
 
834
  bssid <network id> <BSSID> = set preferred BSSID for an SSID
 
835
  list_networks = list configured networks
 
836
  select_network <network id> = select a network (disable others)
 
837
  enable_network <network id> = enable a network
 
838
  disable_network <network id> = disable a network
 
839
  add_network = add a network
 
840
  remove_network <network id> = remove a network
 
841
  set_network <network id> <variable> <value> = set network variables (shows
 
842
    list of variables when run without arguments)
 
843
  get_network <network id> <variable> = get network variables
 
844
  save_config = save the current configuration
 
845
  disconnect = disconnect and wait for reassociate command before connecting
 
846
  scan = request new BSS scan
 
847
  scan_results = get latest scan results
 
848
  get_capability <eap/pairwise/group/key_mgmt/proto/auth_alg> = get capabilies
 
849
  terminate = terminate wpa_supplicant
 
850
  quit = exit wpa_cli
 
851
 
 
852
 
 
853
wpa_cli command line options
 
854
 
 
855
wpa_cli [-p<path to ctrl sockets>] [-i<ifname>] [-hvB] [-a<action file>] \
 
856
        [-P<pid file>] [-g<global ctrl>]  [command..]
 
857
  -h = help (show this usage text)
 
858
  -v = shown version information
 
859
  -a = run in daemon mode executing the action file based on events from
 
860
       wpa_supplicant
 
861
  -B = run a daemon in the background
 
862
  default path: /var/run/wpa_supplicant
 
863
  default interface: first interface found in socket path
 
864
 
 
865
 
 
866
Using wpa_cli to run external program on connect/disconnect
 
867
-----------------------------------------------------------
 
868
 
 
869
wpa_cli can used to run external programs whenever wpa_supplicant
 
870
connects or disconnects from a network. This can be used, e.g., to
 
871
update network configuration and/or trigget DHCP client to update IP
 
872
addresses, etc.
 
873
 
 
874
One wpa_cli process in "action" mode needs to be started for each
 
875
interface. For example, the following command starts wpa_cli for the
 
876
default ingterface (-i can be used to select the interface in case of
 
877
more than one interface being used at the same time):
 
878
 
 
879
wpa_cli -a/sbin/wpa_action.sh -B
 
880
 
 
881
The action file (-a option, /sbin/wpa_action.sh in this example) will
 
882
be executed whenever wpa_supplicant completes authentication (connect
 
883
event) or detects disconnection). The action script will be called
 
884
with two command line arguments: interface name and event (CONNECTED
 
885
or DISCONNECTED). If the action script needs to get more information
 
886
about the current network, it can use 'wpa_cli status' to query
 
887
wpa_supplicant for more information.
 
888
 
 
889
Following example can be used as a simple template for an action
 
890
script:
 
891
 
 
892
#!/bin/sh
 
893
 
 
894
IFNAME=$1
 
895
CMD=$2
 
896
 
 
897
if [ "$CMD" == "CONNECTED" ]; then
 
898
    SSID=`wpa_cli -i$IFNAME status | grep ^ssid= | cut -f2- -d=`
 
899
    # configure network, signal DHCP client, etc.
 
900
fi
 
901
 
 
902
if [ "$CMD" == "DISCONNECTED" ]; then
 
903
    # remove network configuration, if needed
 
904
fi
 
905
 
 
906
 
 
907
 
 
908
Integrating with pcmcia-cs/cardmgr scripts
 
909
------------------------------------------
 
910
 
 
911
wpa_supplicant needs to be running when using a wireless network with
 
912
WPA. It can be started either from system startup scripts or from
 
913
pcmcia-cs/cardmgr scripts (when using PC Cards). WPA handshake must be
 
914
completed before data frames can be exchanged, so wpa_supplicant
 
915
should be started before DHCP client.
 
916
 
 
917
For example, following small changes to pcmcia-cs scripts can be used
 
918
to enable WPA support:
 
919
 
 
920
Add MODE="Managed" and WPA="y" to the network scheme in
 
921
/etc/pcmcia/wireless.opts.
 
922
 
 
923
Add the following block to the end of 'start' action handler in
 
924
/etc/pcmcia/wireless:
 
925
 
 
926
    if [ "$WPA" = "y" -a -x /usr/local/bin/wpa_supplicant ]; then
 
927
        /usr/local/bin/wpa_supplicant -B -c/etc/wpa_supplicant.conf \
 
928
                -i$DEVICE
 
929
    fi
 
930
 
 
931
Add the following block to the end of 'stop' action handler (may need
 
932
to be separated from other actions) in /etc/pcmcia/wireless:
 
933
 
 
934
    if [ "$WPA" = "y" -a -x /usr/local/bin/wpa_supplicant ]; then
 
935
        killall wpa_supplicant
 
936
    fi
 
937
 
 
938
This will make cardmgr start wpa_supplicant when the card is plugged
 
939
in.
 
940
 
 
941
 
 
942
 
 
943
Dynamic interface add and operation without configuration files
 
944
---------------------------------------------------------------
 
945
 
 
946
wpa_supplicant can be started without any configuration files or
 
947
network interfaces. When used in this way, a global (i.e., per
 
948
wpa_supplicant process) control interface is used to add and remove
 
949
network interfaces. Each network interface can then be configured
 
950
through a per-network interface control interface. For example,
 
951
following commands show how to start wpa_supplicant without any
 
952
network interfaces and then add a network interface and configure a
 
953
network (SSID):
 
954
 
 
955
# Start wpa_supplicant in the background
 
956
wpa_supplicant -g/var/run/wpa_supplicant-global -B
 
957
 
 
958
# Add a new interface (wlan0, no configuration file, driver=wext, and
 
959
# enable control interface)
 
960
wpa_cli -g/var/run/wpa_supplicant-global interface_add wlan0 \
 
961
        "" wext /var/run/wpa_supplicant
 
962
 
 
963
# Configure a network using the newly added network interface:
 
964
wpa_cli -iwlan0 add_network
 
965
wpa_cli -iwlan0 set_network 0 ssid '"test"'
 
966
wpa_cli -iwlan0 set_network 0 key_mgmt WPA-PSK
 
967
wpa_cli -iwlan0 set_network 0 psk '"12345678"'
 
968
wpa_cli -iwlan0 set_network 0 pairwise TKIP
 
969
wpa_cli -iwlan0 set_network 0 group TKIP
 
970
wpa_cli -iwlan0 set_network 0 proto WPA
 
971
wpa_cli -iwlan0 enable_network 0
 
972
 
 
973
# At this point, the new network interface should start trying to associate
 
974
# with the WPA-PSK network using SSID test.
 
975
 
 
976
# Remove network interface
 
977
wpa_cli -g/var/run/wpa_supplicant-global interface_remove wlan0
 
978
 
 
979
 
 
980
Privilege separation
 
981
--------------------
 
982
 
 
983
To minimize the size of code that needs to be run with root privileges
 
984
(e.g., to control wireless interface operation), wpa_supplicant
 
985
supports optional privilege separation. If enabled, this separates the
 
986
privileged operations into a separate process (wpa_priv) while leaving
 
987
rest of the code (e.g., EAP authentication and WPA handshakes) into an
 
988
unprivileged process (wpa_supplicant) that can be run as non-root
 
989
user. Privilege separation restricts the effects of potential software
 
990
errors by containing the majority of the code in an unprivileged
 
991
process to avoid full system compromise.
 
992
 
 
993
Privilege separation is not enabled by default and it can be enabled
 
994
by adding CONFIG_PRIVSEP=y to the build configuration (.config). When
 
995
enabled, the privileged operations (driver wrapper and l2_packet) are
 
996
linked into a separate daemon program, wpa_priv. The unprivileged
 
997
program, wpa_supplicant, will be built with a special driver/l2_packet
 
998
wrappers that communicate with the privileged wpa_priv process to
 
999
perform the needed operations. wpa_priv can control what privileged
 
1000
are allowed.
 
1001
 
 
1002
wpa_priv needs to be run with network admin privileges (usually, root
 
1003
user). It opens a UNIX domain socket for each interface that is
 
1004
included on the command line; any other interface will be off limits
 
1005
for wpa_supplicant in this kind of configuration. After this,
 
1006
wpa_supplicant can be run as a non-root user (e.g., all standard users
 
1007
on a laptop or as a special non-privileged user account created just
 
1008
for this purpose to limit access to user files even further).
 
1009
 
 
1010
 
 
1011
Example configuration:
 
1012
- create user group for users that are allowed to use wpa_supplicant
 
1013
  ('wpapriv' in this example) and assign users that should be able to
 
1014
  use wpa_supplicant into that group
 
1015
- create /var/run/wpa_priv directory for UNIX domain sockets and control
 
1016
  user access by setting it accessible only for the wpapriv group:
 
1017
  mkdir /var/run/wpa_priv
 
1018
  chown root:wpapriv /var/run/wpa_priv
 
1019
  chmod 0750 /var/run/wpa_priv
 
1020
- start wpa_priv as root (e.g., from system startup scripts) with the
 
1021
  enabled interfaces configured on the command line:
 
1022
  wpa_priv -B -P /var/run/wpa_priv.pid wext:ath0
 
1023
- run wpa_supplicant as non-root with a user that is in wpapriv group:
 
1024
  wpa_supplicant -i ath0 -c wpa_supplicant.conf
 
1025
 
 
1026
wpa_priv does not use the network interface before wpa_supplicant is
 
1027
started, so it is fine to include network interfaces that are not
 
1028
available at the time wpa_priv is started. As an alternative, wpa_priv
 
1029
can be started when an interface is added (hotplug/udev/etc. scripts).
 
1030
wpa_priv can control multiple interface with one process, but it is
 
1031
also possible to run multiple wpa_priv processes at the same time, if
 
1032
desired.