WPA_SUPPLICANT(8) WPA_SUPPLICANT(8)

wpa_supplicant - کارخواه تأیید هویت و مدیریت اتصالات امن بی‌سیم (Wi-Fi)

wpa_supplicant [ -BddfhKLqqsTtuvW ] [ -iifname ] [ -cconfig file ] [ -Ddriver ] [ -PPID_file ] [ -foutput file ] [ -Iadditional config file ]

شبکه‌های بی‌سیم بر خلاف شبکه‌های باسیم، نیازی به دسترسی فیزیکی به تجهیزات شبکه ندارند. این امر پایش غیرفعال شبکه و دریافت تمام فریم‌های ارسالی را برای کاربران غیرمجاز آسان‌تر می‌کند. علاوه بر این، استفاده غیرمجاز از شبکه بسیار ساده‌تر است. در بسیاری از موارد، این رویداد حتی می‌تواند بدون آگاهی صریح کاربر رخ دهد؛ چرا که ممکن است آداپتور شبکه محلی بی‌سیم (WLAN) به گونه‌ای پیکربندی شده باشد که به صورت خودکار به هر شبکه در دسترسی متصل شود.

رمزگذاری لایه پیوند می‌تواند برای فراهم آوردن یک لایه امنیتی در شبکه‌های بی‌سیم به کار رود. استاندارد اولیه شبکه محلی بی‌سیم، یعنی IEEE 802.11، شامل یک سازوکار رمزگذاری ساده به نام WEP بود. با این حال، ثابت شد که این سازوکار در زمینه‌های بسیاری دچار نقص است و شبکه‌های محافظت‌شده با WEP را نمی‌توان امن تلقی کرد. احراز هویت IEEE 802.1X و کلیدهای پویای WEP با تغییرات مکرر می‌توانند برای بهبود امنیت شبکه استفاده شوند، اما حتی این روش نیز به دلیل استفاده از WEP برای رمزگذاری، مشکلات امنیتی آن را به ارث برده است. پروتکل Wi-Fi Protected Access (دسترسی حفاظت‌شده وای‌فای) و اصلاحیه IEEE 802.11i برای استاندارد شبکه محلی بی‌سیم، سازوکار بسیار بهبودیافته‌ای را برای ایمن‌سازی شبکه‌های بی‌سیم معرفی کردند. شبکه‌های مجهز به IEEE 802.11i که از CCMP (یک سازوکار رمزگذاری مبتنی بر الگوریتم قدرتمند رمزنگاری AES) استفاده می‌کنند را سرانجام می‌توان امن نامید و برای برنامه‌هایی که نیازمند حفاظت کارآمد در برابر دسترسی‌های غیرمجاز هستند به کار برد.

دستور wpa_supplicant یک پیاده‌سازی از مؤلفه متقاضی WPA (یا WPA Supplicant) است، یعنی بخشی که در ایستگاه‌های کارخواه (کلاینت) اجرا می‌شود. این برنامه مذاکره کلید WPA با احراز هویت‌کننده WPA (WPA Authenticator) و احراز هویت EAP با سرور احراز هویت (Authentication Server) را پیاده‌سازی می‌کند. علاوه بر این، رومینگ (پیمایش میان نقاط دسترسی) و احراز هویت/اتصال IEEE 802.11 در راه‌انداز شبکه محلی بی‌سیم را کنترل می‌نماید.

دستور wpa_supplicant به گونه‌ای طراحی شده است که یک برنامه «دیمن» (daemon) باشد که در پس‌زمینه اجرا شده و به عنوان مؤلفه پشت‌صحنه جهت کنترل اتصال بی‌سیم عمل می‌کند. برنامه wpa_supplicant از برنامه‌های پیش‌صحنه (frontend) مجزا پشتیبانی می‌کند و یک پیش‌صحنه متنی نمونه به نام wpa_cli همراه با wpa_supplicant گنجانده شده است.

پیش از آنکه wpa_supplicant بتواند کار خود را انجام دهد، رابط شبکه باید در دسترس باشد. این بدان معناست که دستگاه فیزیکی باید حاضر و فعال بوده و راه‌انداز دستگاه نیز بارگذاری شده باشد. در صورتی که دستگاه از قبل در دسترس نباشد، دیمن فوراً خارج خواهد شد.

پس از آنکه wpa_supplicant دستگاه شبکه را پیکربندی کرد، پیکربندی‌های سطوح بالاتر دستگاه مانند DHCP می‌تواند ادامه یابد. روش‌های گوناگونی برای ادغام wpa_supplicant در اسکریپت‌های شبکه سیستم وجود دارد که چند مورد از آن‌ها در بخش‌های زیر شرح داده شده است.

مراحل زیر هنگام اتصال به یک نقطه دسترسی (AP) با استفاده از WPA طی می‌شوند:

•
برنامه wpa_supplicant از راه‌انداز هسته درخواست می‌کند تا مجموعه‌های سرویس پایه (BSS) همسایه را پویش کند.
•
برنامه wpa_supplicant بر اساس پیکربندی خود یک BSS را انتخاب می‌کند.
•
برنامه wpa_supplicant از راه‌انداز هسته درخواست می‌کند تا با BSS انتخاب‌شده ارتباط برقرار کند (associate شود).
•
در صورت استفاده از WPA-EAP: متقاضی مجتمع IEEE 802.1X احراز هویت EAP را با سرور احراز هویت (که توسط احراز هویت‌کننده موجود در AP پروکسی می‌شود) تکمیل می‌کند.
•
در صورت استفاده از WPA-EAP: کلید اصلی از متقاضی IEEE 802.1X دریافت می‌شود.
•
در صورت استفاده از WPA-PSK: برنامه wpa_supplicant از کلید PSK به عنوان کلید اصلی نشست استفاده می‌کند.
•
برنامه wpa_supplicant دست‌تکانی ۴ مرحله‌ای WPA (WPA 4-Way Handshake) و دست‌تکانی کلید گروهی را با احراز هویت‌کننده (AP) تکمیل می‌کند.
•
برنامه wpa_supplicant کلیدهای رمزگذاری را برای ترافیک‌های تک‌پخشی (unicast) و همه‌پخشی (broadcast) پیکربندی می‌کند.
•
بسته‌های داده عادی اکنون می‌توانند ارسال و دریافت شوند.

ویژگی‌های پشتیبانی‌شده WPA/IEEE 802.11i:

•
حالت WPA-PSK ("WPA-شخصی" یا "WPA-Personal")
•
حالت WPA به همراه EAP (مثلاً با سرور احراز هویت RADIUS) ("WPA-سازمانی" یا "WPA-Enterprise"). روش‌های احراز هویت زیر با متقاضی مجتمع IEEE 802.1X پشتیبانی می‌شوند:
•
پروتکل EAP-TLS
•
پروتکل EAP-PEAP/MSCHAPv2 (هر دو نسخه PEAPv0 و PEAPv1)
•
پروتکل EAP-PEAP/TLS (هر دو نسخه PEAPv0 و PEAPv1)
•
پروتکل EAP-PEAP/GTC (هر دو نسخه PEAPv0 و PEAPv1)
•
پروتکل EAP-PEAP/OTP (هر دو نسخه PEAPv0 و PEAPv1)
•
پروتکل EAP-PEAP/MD5-Challenge (هر دو نسخه PEAPv0 و PEAPv1)
•
پروتکل EAP-TTLS/EAP-MD5-Challenge
•
پروتکل EAP-TTLS/EAP-GTC
•
پروتکل EAP-TTLS/EAP-OTP
•
پروتکل EAP-TTLS/EAP-MSCHAPv2
•
پروتکل EAP-TTLS/EAP-TLS
•
پروتکل EAP-TTLS/MSCHAPv2
•
پروتکل EAP-TTLS/MSCHAP
•
پروتکل EAP-TTLS/PAP
•
پروتکل EAP-TTLS/CHAP
•
پروتکل EAP-SIM
•
پروتکل EAP-AKA
•
پروتکل EAP-PSK
•
پروتکل EAP-PAX
•
پروتکل LEAP (نکته: نیازمند پشتیبانی ویژه راه‌انداز برای احراز هویت IEEE 802.11 است)
•
(روش‌های زیر پشتیبانی می‌شوند، اما از آنجا که اطلاعات کلیدسازی تولید نمی‌کنند، نمی‌توانند با کلیدسازی WPA یا IEEE 802.1X WEP استفاده شوند)
•
پروتکل EAP-MD5-Challenge
•
پروتکل EAP-MSCHAPv2
•
پروتکل EAP-GTC
•
پروتکل EAP-OTP
•
مدیریت کلید برای CCMP، TKIP، WEP104 و WEP40
•
پروتکل RSN/WPA2 (استاندارد IEEE 802.11i)
•
پیش‌احراز هویت (pre-authentication)
•
ذخیره‌سازی میانگیر PMKSA (یا PMKSA caching)

خلاصه‌ای از راه‌اندازهای پشت‌صحنه در دسترس در زیر آمده است. پشتیبانی از هر یک از راه‌اندازها در زمان کامپایل wpa_supplicant تعیین می‌شود. برای دریافت فهرستی از راه‌اندازهای پشت‌صحنه پشتیبانی‌شده که می‌توان با گزینه -D در سیستم خود استفاده کرد، به خروجی راهنمای wpa_supplicant (wpa_supplicant -h) مراجعه کنید.

از رابط مدرن مبتنی بر netlink در لینوکس یعنی nl80211/cfg80211 استفاده می‌کند (بیشتر راه‌اندازهای جدید).
از رابط قدیمی مبتنی بر ioctl در لینوکس یعنی افزونه‌های بی‌سیم (Wireless Extensions) استفاده می‌کند (سخت‌افزارها و راه‌اندازهای قدیمی‌تر).
راه‌انداز اترنت با سیم wpa_supplicant.
راه‌انداز اترنت MACsec برای لینوکس.
راه‌انداز سوییچ Broadcom در wpa_supplicant.
بدون راه‌انداز (فقط برای سرور RADIUS یا WPS ER).
پشتیبانی از BSD 802.11 (مانند Atheros و غیره).
راه‌انداز NDIS ویندوز.

بیشتر گزینه‌های خط فرمان دارای دامنه سراسری هستند. برخی به ازای هر رابط مشخص می‌شوند و تنها زمانی معتبرند که دست‌کم یک گزینه -i مشخص شده باشد، در غیر این صورت نادیده گرفته می‌شوند. گروه‌های گزینه‌ها برای رابط‌های گوناگون باید با گزینه -N از یکدیگر جدا شوند.

نام اختیاری رابط پل (Bridge). (به ازای هر رابط)
اجرای دیمن در پس‌زمینه.
مسیر فایل پیکربندی. (به ازای هر رابط)
مسیر سوکت ctrl_interface (به ازای هر رابط. تنها زمانی استفاده می‌شود که -c داده نشده باشد).
رابطی که باید به آن گوش فرا داد. چندین نمونه از این گزینه می‌تواند وجود داشته باشد، یکی برای هر رابط، که با گزینه -N جدا می‌شوند (زیر را ببینید).
مسیر فایل پیکربندی اضافی.
افزایش سطح جزئیات اشکال‌زدایی (-dd جزئیات بیشتر).
راه‌انداز مورد استفاده (می‌تواند چندین راه‌انداز باشد: nl80211,wext). (به ازای هر رابط؛ گزینه‌های موجود را در زیر ببینید.)
فایلی که wpa_supplicant برای نگهداری مخزن انتروپی داخلی خود در طول راه‌اندازی‌های مجدد استفاده می‌کند.
ثبت خروجی در فایل مشخص‌شده به جای stdout. (این گزینه تنها زمانی در دسترس است که wpa_supplicant با گزینه CONFIG_DEBUG_FILE ساخته شده باشد.)
مسیر سوکت کنترل سراسری ctrl_interface. در صورت مشخص شدن، تعریف رابط‌ها می‌تواند حذف شود.
گنجاندن کلیدها (گذرواژه‌ها و غیره) در خروجی اشکال‌زدایی.
راهنما. نمایش پیام نحوه استفاده.
نمایش مجوز (BSD).
بازنویسی و جایگزینی پارامتر راه‌انداز برای رابط‌های جدید.
بازنویسی و جایگزینی پارامتر ctrl_interface برای رابط‌های جدید.
پارامترهای راه‌انداز. (به ازای هر رابط)
مسیر فایل شناسه فرایند (PID).
کاهش سطح جزئیات اشکال‌زدایی (-qq جزئیات حتی کمتر).
ثبت لاگ در syslog به جای stdout. (این گزینه تنها زمانی در دسترس است که wpa_supplicant با گزینه CONFIG_DEBUG_SYSLOG ساخته شده باشد.)
ثبت لاگ در ردیابی لینوکس (Linux tracing) علاوه بر سایر مقاصد. (این گزینه تنها زمانی در دسترس است که wpa_supplicant با گزینه CONFIG_DEBUG_LINUX_TRACING ساخته شده باشد.)
گنجاندن برچسب زمان در پیام‌های اشکال‌زدایی.
فعال‌سازی رابط کنترلی DBus. در صورت فعال بودن، تعریف رابط‌ها می‌تواند حذف شود. (این گزینه تنها زمانی در دسترس است که wpa_supplicant با گزینه CONFIG_CTRL_IFACE_DBUS_NEW ساخته شده باشد.)
نمایش نسخه.
انتظار برای یک پایشگر رابط کنترل پیش از شروع.
آغاز توصیف رابط جدید.

در بیشتر موارد معمول، wpa_supplicant با دستور زیر آغاز می‌شود:

wpa_supplicant -B -c/etc/wpa_supplicant.conf -iwlan0

این کار باعث ایجاد انشعاب (fork) و انتقال فرایند به پس‌زمینه می‌شود.

ساده‌ترین روش برای عیب‌یابی مشکلات و دریافت لاگ اشکال‌زدایی برای گزارش باگ‌ها، اجرای wpa_supplicant در پیش‌زمینه با فعال‌سازی اشکال‌زدایی است:

wpa_supplicant -c/etc/wpa_supplicant.conf -iwlan0 -d

در صورتی که پوشش راه‌انداز (driver wrapper) ویژه از قبل مشخص نباشد، می‌توان چندین پوشش راه‌انداز جداشده با کاما را در خط فرمان مشخص کرد. برنامه wpa_supplicant از نخستین پوشش راه‌اندازی که بتواند رابط را مقداردهی اولیه کند استفاده خواهد نمود.

wpa_supplicant -Dnl80211,wext -c/etc/wpa_supplicant.conf -iwlan0

برنامه wpa_supplicant می‌تواند چندین رابط (رادیو) را چه با اجرای یک فرایند جداگانه برای هر رابط و چه با اجرای تنها یک فرایند و فهرستی از گزینه‌ها در خط فرمان کنترل کند. هر رابط با آرگومان -N جدا می‌شود. به عنوان نمونه، دستور زیر wpa_supplicant را برای دو رابط راه‌اندازی می‌کند:

wpa_supplicant 	-c wpa1.conf -i wlan0 -D nl80211 -N 	-c wpa2.conf -i ath0 -D wext

نیازمندی‌های سخت‌افزاری و نرم‌افزاری فعلی:

•
هسته لینوکس نسخه 2.6.30 یا بالاتر با پشتیبانی از nl80211/cfg80211
•
هسته لینوکس نسخه 2.4.x یا بالاتر با افزونه‌های بی‌سیم لینوکس (Wireless Extensions) نسخه 15 یا جدیدتر
•
سیستم‌عامل FreeBSD نسخه 6-CURRENT
•
مایکروسافت ویندوز با WinPcap (دست‌کم WinXP، ممکن است با نسخه‌های دیگر نیز کار کند)

این راه‌انداز ترجیحی برای لینوکس است.
از نظر تئوری، هر راه‌اندازی که از افزونه‌های بی‌سیم لینوکس پشتیبانی کند می‌تواند در صورت استفاده از گزینه ap_scan=0 در فایل پیکربندی، با IEEE 802.1X (یعنی بدون WPA) استفاده شود.
استفاده از ap_scan=0.
در حال حاضر، این برای شاخه FreeBSD 6-CURRENT است.
پورت فعلی ویندوز به WinPcap (http://winpcap.polito.it) نیاز دارد. برای اطلاعات بیشتر فایل README-Windows.txt را ببینید.

برنامه wpa_supplicant به گونه‌ای طراحی شده است که برای راه‌اندازها و سیستم‌عامل‌های گوناگون قابل‌حمل (portable) باشد. امید است در آینده پشتیبانی از کارت‌های بی‌سیم و سیستم‌عامل‌های بیشتری افزوده شود. برای اطلاعات بیشتر درباره طراحی wpa_supplicant و پورت کردن آن به سایر راه‌اندازها، به developer.txt مراجعه کنید. یکی از اهداف اصلی، افزودن پشتیبانی کامل WPA/WPA2 به افزونه‌های بی‌سیم لینوکس است تا امکان پشتیبانی از راه‌اندازهای جدید بدون نیاز به پیاده‌سازی کد رابط ویژه راه‌انداز در wpa_supplicant فراهم شود.

سیستم wpa_supplicant از مؤلفه‌های زیر تشکیل شده است:

فایل پیکربندی که تمام شبکه‌هایی را که کاربر می‌خواهد رایانه به آن‌ها متصل شود توصیف می‌کند.
برنامه‌ای که مستقیماً با رابط شبکه تعامل دارد.
برنامه کارخواه که رابط سطح بالایی برای عملکردهای دیمن فراهم می‌کند.
ابزاری برای ساخت فایل‌های wpa_supplicant.conf که شامل گذرواژه‌های رمزگذاری‌شده هستند.

ابتدا یک فایل پیکربندی، برای نمونه /etc/wpa_supplicant.conf، ایجاد کنید که شبکه‌های مورد نظر شما را توصیف کند. برای جزئیات بیشتر به wpa_supplicant.conf(5) مراجعه نمایید.

پس از آماده شدن پیکربندی، می‌توانید با اجرای wpa_supplicant با دستور زیر جهت راه‌اندازی آن در پیش‌زمینه به همراه فعال‌بودن اشکال‌زدایی، صحت کارکرد پیکربندی را بیازمایید:

wpa_supplicant -iwlan0 -c/etc/wpa_supplicant.conf -d

با فرض اینکه همه‌چیز به درستی پیش رود، می‌توانید از دستور زیر برای راه‌اندازی wpa_supplicant در پس‌زمینه بدون اشکال‌زدایی استفاده کنید:

wpa_supplicant -iwlan0 -c/etc/wpa_supplicant.conf -B

لطفاً توجه داشته باشید در صورتی که در پیکربندی زمان ساخت (.config) بیش از یک رابط راه‌انداز گنجانده شده باشد، ممکن است نیاز باشد با قرار دادن گزینه -D<نام راه‌انداز> در خط فرمان مشخص کنید از کدام رابط استفاده شود.

به عنوان نمونه، تغییرات کوچک زیر در اسکریپت‌های pcmcia-cs می‌تواند برای فعال‌سازی پشتیبانی WPA استفاده شود:

گزینه‌های MODE="Managed" و WPA="y" را به طرح شبکه در /etc/pcmcia/wireless.opts اضافه کنید.

بلوک زیر را به پایان گرداننده اقدام start در /etc/pcmcia/wireless اضافه کنید:

if [ "$WPA" = "y" -a -x /usr/local/bin/wpa_supplicant ]; then
    /usr/local/bin/wpa_supplicant -B -c/etc/wpa_supplicant.conf -i$DEVICE
fi

بلوک زیر را به پایان گرداننده اقدام stop (که ممکن است نیاز باشد از سایر اقدامات جدا شود) در /etc/pcmcia/wireless اضافه کنید:

if [ "$WPA" = "y" -a -x /usr/local/bin/wpa_supplicant ]; then
    killall wpa_supplicant
fi

این کار باعث می‌شود هنگام اتصال کارت، cardmgr برنامه wpa_supplicant را راه‌اندازی کند.

wpa_background(8) wpa_supplicant.conf(5) wpa_cli(8) wpa_passphrase(8)

حق نشر نرم‌افزار wpa_supplicant متعلق به سال‌های ۲۰۰۳ تا ۲۰۲۲، Jouni Malinen <j@w1.fi> و مشارکت‌کنندگان است. تمامی حقوق محفوظ است.

این برنامه تحت مجوز BSD (نسخه بدون بند تبلیغاتی) منتشر شده است.

1 February 2023