معرفی

احراز هویت دو مرحله‌ای یا همان 2FA یک روش احراز هویتی است که برای احراز نیاز به بیشتر از یک فاکتور هویتی دارد. احراز هویت دو عاملی به این صورت است که هر کاربر برای ورود به یک اکانت علاوه بر یوزرنیم و پسورد خود نیاز به یک عامل دیگر برای ورود به هر اکانت دارد.

به طور کلی احراز هویت دو عاملی از کاربر اطلاعاتی نظیر موارد زیر می‌گیرد:

مواردی که کاربر از آن‌ها اطلاع دارد، مثل یک پسورد خاص.
مواردی که می‌توانند توسط یک اپلیکیشن مثل اپلیکیشن‌ احراز هویتی گوگل، برای کاربر پیام بفرستد.


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

در این مطلب ما قصد داریم تا  نحوه فعال کردن احراز هویت دو عاملی را برای را برای اوبونتو ۱۸.۰۴ نشان دهیم. این فرآیند با ماژول PAM گوگل فعال خواهد شد. از آنجا که این مراحل را برای حالت non-root انجام خواهید داد، در صورت از دست خارج شدن سیستم عامل، هنوز قادر خواهید بود به آن دسترسی داشته باشید. این آموزش هم‌چنین هم برای لینوکس سرور و هم برای نسخه دسکتاپ قابل پیاده‌سازی است.

پیش نیازها

قبل از شروع به موارد زیر احتیاج خواهید داشت:

اوبونتو ۱۸.۰۴ دسکتاپ یا سرور
یک اپلیکیشن برای فرآیند احراز هویت دو عاملی که بر روی تلفن همراه‌تان نصب شده است مانند Google Authenticator


قدم اول – نصب ماژول گوگل PAM

 

برای راه اندازی 2fa بر روی اوبونتو ۱۸.۰۴ بایستی ماژول گوگل PAM‌ را نصب کنید. این ماژول مکانیزم احراز هویت را برای لینوکس فعال می‌کند. ما از ماژول PAM‌ گوگل استفاده می‌کنیم تا بتوانیم کاربر را با استفاده از کدهای تولید شده در برنامه احراز هویت دو عاملی، احراز هویت کنیم.

در ابتدا به صورت non-root لاگین کنید:

ssh sammy@your_server_ip

 

منابع اوبنتو را آپدیت کرده تا آخرین ورژن auth‌ را دانلود کند:

sudo apt-get update

 

حال که منابع‌تان آپدیت شده است، آخرین ورژن PAM را بگیرید:

sudo apt-get install libpam-google-authenticator

 

پکیج بالا پیش نیاز خاصی نداشته و نصب آن تنها چند ثانیه وقت خواهد گرفت. در قدم بعدی راه اندازی 2FA برای یوزر را خواهیم شناخت. 

 

قدم دوم – راه اندازی احراز هویت دو عاملی برای کاربر

 

حال که ماژول PAM را نصب کرده اید بایستی آن را اجرا کنید تا یک QR کد برای کاربر لاگین شده تولید شود. این دستور کد را اجرا می‌کند اما محیط اوبونتو تا زمانی که در ادامه این آموزش آن را فعال نکرده‌اید از شما درخواست 2FA‌ نخواهد داشت. 
دستور زیر را اجرا کنید تا ماژول PAM اجرا و راه‌اندازی شود. 
 

google-authenticator

 

دستور بالا در ادامه از شما چند سوال خواهد پرسید. اولین سوال در مورد بر پایه زمان بودن توکن‌ها خواهد بود. توکن‌های time-based به این صورت عمل می‌کنند که بعد از مدت کوتاهی (برای مثال ۳۰ ثانیه) منقضی خواهند شد. مزیت توکن‌های بر پایه زمان، امن بودن آن‌ها ست و بیشتر نرم‌افزارهای پیاده‌سازی نیز از آن‌ها استفاده می‌کنند. در هر صورت شما مختارید که هر آپشنی می‌خواهید را انتخاب کنید ولی ما در ادامه جواب بلی را برای سوال پایین انتخاب می‌کنیم. 

Do you want authentication tokens to be time-based (y/n) y

 

بعد از سوال بالا، چندین خط کد بر روی کنسول‌تان به نمایش در خواهد آمد:

•    یک QR کد – این کیوآر را بایستی توسط اپلیکیشن Auth خود اسکن کنید. زمانی که این کار را انجام دهید، دستگاه‌تان آن را شناسایی کرده و پس از آن هر ۳۰ ثانیه یک کد جدید به شما خواهد داد. 

•    کلید secret:  این یک روش جایگزین برای پیکربندی برنامه احراز هویت دو عاملی است. اگر از اپلیکیشنی استفاده می‌کنید که از کد QR پشتیبانی نمی‌کند، می‌توانید از کلید رمز برای پیکربندی استفاده کنید. 

•    کد تایید: این اولین کد شش رقمی است که تولید می‌شود.

•    کدهای بک‌آپ: این کدها به شما این امکان را می‌دهند که اگر دستگاه تاییدکننده‌تان را از دست بدهید، هم‌چنان قادر به ورود به سیستم باشید. این کدها را در مکانی امن نگهداری کنید تا از قفل شدن حساب‌تان جلوگیری شود. 

بعد از این که پیکربندی اپلیکیشن تمام شد و کدهای بک آپ را نیز در ذخیره کردید، از شما درخواست می‌شود که فایل کانفیگ خود را آپدیت کنید، در ادامه نیز گزینه y را انتخاب کرده تا تغییرات‌تان ذخیره شود:
 

Do you want me to update your "~/.google_authenticator" file (y/n) y 

 

سوال بعدی این است که آیا می‌خواهید کدهای اپلیکیشن auth بیشتر از یک بار نیز قابل استفاده باشند یا خیر. به طور پیش فرض شما فقط یک بار می‌توانید از هر کد استفاده کنید. در واقع امن‌ترین راه این است که از هر کد یک بار استفاده کنید بنابراین به سوال بعدی جواب مثبت خواهیم داد. 

Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n) y

 

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

By default, tokens are good for 30 seconds and in order to compensate for
possible time-skew between the client and the server, we allow an extra
token before and after the current time. If you experience problems with poor
time synchronization, you can increase the window from its default
size of 1:30min to about 4min. Do you want to do so (y/n) n

 

سوال آخر نیز این مورد را بررسی می‌کند که آیا می‌خواهید نرخ ورود به سیستم را محدود کنید یا خیر. این کار به بیش از سه ثبت موفق اجازه ورود نخواهد داد. این مورد را نیز تایید می‌کنیم. 

By default, tokens are good for 30 seconds and in order to compensate for
possible time-skew between the client and the server, we allow an extra
token before and after the current time. If you experience problems with poor
time synchronization, you can increase the window from its default
size of 1:30min to about 4min. Do you want to do so (y/n) n

 

 

قدم سوم – فعال کردن 2FA بر روی اوبونتو


هم اکنون ماژول PAM‌ گوگل کدهای احراز هویت تولید می‌کند، اما سیستم‌عامل هنوز نمی‌داند که آیا لازم است از این کدها به عنوان بخشی از احراز هویت کاربر استفاده کند یا خیر. در این مرحله از پیکربندی، اوبونتو را برای نیاز به توکن‌های به روزرسانی خواهیم کرد. 
در این مقطع دو گزینه پیش رو داریم:
•    می‌توانیم تنظیمات را به گونه‌ای انجام دهیم که یوزر با هر بار ورود به سیستم و هر بار که درخواست Sudo دارد، نیاز به فاکتور دو عاملی داشته باشد. 

•    می‌توانیم تنها در هنگام ورود به سیستم احتیاج به فاکتور دو عاملی داشته باشیم و درخواست Sudo تنها نیاز به پسورد داشته باشد. 

گزینه اول برای یک محیط مشترک ایده‌آل خواهد بود که در آن ممکن است بخواهید از هر اقدامی که نیاز به مجوز Sudo‌ دارد محافظت کنید. رویکرد دوم اما برای محیط دسکتاپ بهتر خواهد بود که شما در آن تنها کاربر سیستم خواهید بود. 
 

درخواست 2FA برای لاگ این و درخواست‌های Sudo

برای این کار بایستی آدرس etc/pam.d/common-auth را با اضافه کردن یک خط به انتهای فایل آن ویرایش کنید. برای این کار فایل common-auth را با استفاده از دستور زیر باز کنید. 

sudo nano /etc/pam.d/common-auth

سپس این خط را به آخر فایل اضافه کنید:

auth required pam_google_authenticator.so nullok

 

این خط، از کاربرانی که 2FA خود را فعال کرده‌اند خواهد خواست که برای ورود به سیستم از کد تایید استفاده کنند، حال کاربرانی که هنوز این کار را انجام نداده‌اند می‌توانند تنها با نام کاربری و رمز عبور خود وارد سیستم شوند.  
فایل قبلی را ذخیره کرده و ببندید. 

 

درخواست 2FA فقط برای ورود به سیستم

اگر می‌خواهید احراز هویت فقط زمانی که برای اولین بار بر روی سیستم‌تان لاگ‌این می‌شوید اعمال شود، بایستی فایل پیکربندی را ویرایش کنید. نام فایل کانفیگ معمولا با نام دسکتاپ یکی است. فایل مورد نظر را بر روی محیط سیستم عامل خود باز کنید. 

sudo nano /etc/pam.d/common-session

خط زیر را به انتهای فایل اضافه کنید:

auth required pam_google_authenticator.so nullok 

 

شما در حال حاضر اوبونتو را با موفقیت و به طوری پیکربندی کرده‌اید تا از احراز هویت دو عاملی در زمان ورود به سیستم استفاده کند. 

 

قدم چهارم – تست کردن 2FA

 

در قدم قبلی پیکربندی 2FA را به گونه‌ای انجام دادیم که هر ۳۰ ثانیه یک کد تولید کند. در این قدم می‌خواهیم 2FA برای ورود به محیط اوبونتو را تست کنیم.
در ابتدا از اوبونتو خارج شده و دوباره وارد شوید:

ssh sammy@your_server_ip 

اگر از احراز هویت بر مبنای پسورد استفاده می‌کنید، از شما درخواست پسورد خواهد شد: 

:Password

 پسورد خود را وارد کرده و سپس از شما درخواست کد تایید احراز هویت دو عاملی خواهد شد:

:Verification code

 بعد از وارد کردن کردن کد تایید وارد سیستم خواهید شد:

sammy@your_server_ip: ~#

 اگر 2FA فقط برای لاگین‌ها فعال شده باشد، از شما درخواست دیگری برای وارد کردن 2FA نخواهد شد تا اینکه اصطلاحا نشست (session) منقضی شود.
ولی اگر روش دیگر را انتخاب کرده باشید هر دفعه که درخواست لاگین و یا درخواست Sudo دارید بایستی وارد کنید:

sammy@your_server_ip: ~# sudo -s

sudo password for sammy:

Verification code:

root@your_server_ip:

 

در این مرحله بایستی به نتیجه مورد انتظار جهت ورود به وسیله 2FA رسیده باشید؛ اما اگر این طور نیست به مرحله سوم آموزش بازگردید و فایل‌های اوبونتو را دوباره ویرایش کنید.  

 

قدم پنجم – جلوگیری از قفل شدن

 

زمانی که احراز هویت دو عاملی را برای اولین بار فعال می‌کنید بایستی اقداماتی را در نظر بگیرید تا اگر اتفاقی نظیر پاک شدن اطلاعات موبایل برای‌تان افتاد، دیگر نگران قفل شدن سیستم‌تان نباشید. در این‌جا چند گزینه پیش رو داریم:
•    یک نسخه بک‌آپ از کدهای امن خود نگه دارید. می‌توانید این کار را به صورت دستی انجام داده و یا از اپلیکیشن‌هایی مانند Authy که این کار را برای‌تان می‌کنند استفاده کنید. 

•    کدهای بازیابی خود را در محلی امن نگهداری کنید که در خارج از محیط 2FA نیز در دسترس باشند.

اگر به هر دلیلی به گزینه‌های پشتیبانی بالا دسترسی ندارید می‌توانید برای بازیابی و دسترسی به 2FA خود راه دیگری را اتخاذ کنید. 

 

قدم ششم – بازیابی قفل 2FA بر روی محیط لوکال

 

اگر به دستگاه دسترسی فیزیکی دارید، می‌توانید برای غیر فعال کردن 2FA، دستگاه را بوت کرده و به حالت rescue mode ببرید. بایستی برخی تنظیمات در گراب خود را ویرایش کرده تا وارد rescue mode شوید:
برای دسترسی به گراب بایستی دستگاه خود را در ابتدا ریبوت کنید:

reboot

 

 

حالا کلید e را فشار دهید تا به تنظیمات پیکربندی گراب وارد شوید:

 

 

در فایلی که می‌بینید، پایین‌تر آمده تا خطی را ببینید که با Linux شروع شده و به vt_handoff‌ ختم می‌شود. به آخر این خط رفته و system.unit=rescue.target را اضافه کنید. مطمئن شوید که یک فاصله بین vt_handoff و system.unit=rescue.target گذشته باشید. این دستور به سیستم اوبونتوی شما می‌گوید که وارد حالت rescue‌ شود. 

 

 

اگر همه تغییرات را انجام داده‌اید فایل بالا را با استفاده از کلید ctrl+x ذخیره کنید. اوبونتوی شما ریبوت شده و یک صفحه command line‌ خواهید دید؛ Enter‌ بزنید تا وارد حالت rescue‌ شوید:

 

 

 

زمانی که به rescue mode وارد شدید، فایل پیکربندی Google Auth را باز کنید. این فایل در دایرکتوری هوم دستگاه شما قرار دارد:

nano /home/sammy/.google-authenticator

 

اولین خط در این فایل کلید رمز یوزر شما خواهد بود، که برای پیکربندی اپلیکیشن auth‌ شما استفاده شده است. حال دو انتخاب داریم:
•    می‌توانیم کلید سکرت را کپی کرده و اپلیکیشن auth را دوباره کانفیگ کنیم.
•    اگر می‌خواهید به طور کلی از ابتدا شروع کنید میتوانید /.google-authenticator را پاک کرده تا احراز هویت دو عاملی برای این یوزر غیر فعال شود. بعد از اینکه دوباره به صورت کاربر non-root‌ وارد شوید، میتوانید 2FA را دوباره کانفیگ کرده و یک کلید جدید دریافت کنید. 

 

قدم هفتم – بازیابی قفل 2FA به وسیله یک محیط ریموت

 

اگر non-root sudoer‌ شما که از یک ماشین ریموت استفاده می‌کند،‌ به مشکل بالا برخورده است، می‌توانید از یوزر root استفاده کنید تا 2FA را به صورت موقت غیرفعال کنید.
در ابتدا به صورت root به ماشین وارد شوید:

ssh root@your_server_ip

زمانی که وارد شدید، فایل تنظیمات Google Auth را که در دایرکتوری یوزر قفل شده قرار دارد را باز کنید:

sudo nano /home/sammy/.google_authenticator

اولین خط در این فایل، کلید سکرت کاربر است که بایستی آن را با یک نرم افزار authenticator کانفیگ کنید. حالا دو انتخاب داریم:
•    اگر می‌خواهید از یک دستگاه جدید استفاده کنید میتوانید از کلید سکرت استفاده کنید تا اپلیکیشن احراز هویت را مجدد پیکربندی کنید. 

•    اگر می‌خواهید مجدد از ابتدا شروع کنید بایستی فایل /home/Sammy/.google_authenticator را پاک کنید تا 2FA برای این یوزر غیر فعال شود. 

بعد از اینکه دوباره به صورت یوزر non-root‌ وارد شوید، می‌توانید مجدد 2FA را پیکربندی کنید و یک کلید سکرت جدید دریافت کنید.


نتیجه

در این آموزش یاد گرفتیم که 2FA را بر روی اوبونتو ۱۸.۰۴ راه‌اندازی کنیم. با راه اندازی احراز هویت در واقع یک لایه امنیتی جدید بر روی اکانت خود اضافه کردید و سیستم‌تان از امنیت بیشتری برخوردار خواهد بود و علاوه بر اعتبارسنجی سنتی، حال یک کد اضافی نیز برای ورود به سیستم در اختیار دارید. مواردی که انجام دادیم از حمله مهاجمان به دستگاه شما جلوگیی خواهد کرد و دیگر کسی قادر نخواهد بود بدون کد جدید وارد حساب شما شود.