آموزش تغییر رمز سرور لینوکس و افزایش امنیت ورود با SSH Key
مقدمه:
در آموزش تغییر رمز سرور لینوکس و افزایش امنیت ورود با SSH Key ابتدا رمز حساب فعلی یا کاربر موردنظر را با دستور passwd تغییر میدهیم. سپس یک جفت کلید امن روی رایانه مدیر میسازیم و کلید عمومی را به سرور انتقال میدهیم. پس از آزمایش موفق ورود با کلید، میتوان ورود مستقیم root و احراز هویت با رمز را محدود کرد. این ترتیب اهمیت زیادی دارد؛ زیرا غیرفعال کردن زودهنگام رمز یا تنظیم اشتباه SSH ممکن است دسترسی مدیر را کاملاً قطع کند.
هشدار ضروری: پیش از تغییر فایلهای SSH، از تنظیمات فعلی نسخه پشتیبان تهیه کنید و دسترسی به Console، Rescue یا پنل اضطراری سرویس دهنده را بررسی کنید. نشست فعلی SSH را تا زمانی که ورود از یک پنجره جدید با موفقیت آزمایش نشده است، نبندید.
فهرست مطالب
- پیشنیازهای تغییر رمز و تنظیم SSH Key
- تغییر رمز حساب فعلی در لینوکس
- تغییر رمز root و سایر کاربران
- انتخاب رمز مناسب برای سرور
- SSH Key چیست و چگونه کار میکند؟
- ساخت کلید SSH در ویندوز، لینوکس و macOS
- انتقال کلید عمومی به سرور
- تنظیم صحیح مجوز فایلهای SSH
- غیرفعال کردن ورود با رمز
- محدودکردن ورود مستقیم root
- تنظیم فایروال و آزمایش اتصال
- رفع خطاهای رایج SSH Key
- چک لیست نهایی امنیت ورود
- سؤالات متداول
پیش نیازهای تغییر رمز و تنظیم SSH
پیش از اجرای فرمانها باید آدرس IP، نام کاربری، پورت SSH و یکی از روشهای معتبر ورود به سرور را داشته باشید. همچنین برای تغییر رمز کاربران دیگر یا ویرایش تنظیمات SSH به دسترسی root یا sudo نیاز دارید.
اگر سرور در حال ارائه خدمات واقعی است، پیش از شروع از فایل تنظیمات SSH و اطلاعات مهم نسخه پشتیبان بگیرید. وجود Snapshot نیز برای بازگشت از تغییرات بزرگ مفید است، اما نباید تنها نسخه پشتیبان شما باشد.
موارد زیر را قبل از ادامه بررسی کنید:
- دسترسی فعلی SSH بدون مشکل برقرار است.
- نام کاربری و پورت واقعی SSH را میدانید.
- حسابی با دسترسی
sudoدر اختیار دارید. - کنسول اضطراری پنل سرویسدهنده قابلاستفاده است.
- از فایل تنظیمات SSH بکاپ گرفتهاید.
- کلید خصوصی در رایانهای امن نگهداری خواهد شد.
- امکان بازکردن یک نشست دوم برای آزمایش اتصال دارید.
اگر مدیریت دسترسیهای لینوکس یا تنظیم SSH برای شما حساس است، میتوانید پیش از اعمال تغییرات از کارشناسان شرکت تجارت الکترونیک نوژن مشاوره بگیرید. بررسی وضعیت فعلی سرور و روش بازیابی دسترسی، احتمال بروز اختلال هنگام ایمنسازی را کاهش میدهد.
مطالعه بیشتر: کارهای ضروری بعد از خرید VPS اوبونتو
آموزش تغییر رمز سرور لینوکس
روش استاندارد تغییر رمز در بیشتر توزیعهای لینوکس استفاده از دستور passwd است. این دستور برای تغییر رمز حساب فعلی یا، با سطح دسترسی مناسب، رمز سایر کاربران به کار میرود.
تغییر رمز کاربر فعلی
پس از ورود به سرور، دستور زیر را اجرا کنید:
سیستم ابتدا رمز فعلی را درخواست میکند. سپس باید رمز جدید را وارد کرده و برای تأیید دوباره بنویسید.
هنگام واردکردن رمز، هیچ نویسه یا علامت ستارهای روی صفحه دیده نمیشود. این رفتار عادی ترمینال لینوکس است و به معنای کارنکردن صفحهکلید نیست.
اگر عملیات موفق باشد، پیامی مبنی بر به روزرسانی رمز نمایش داده میشود. برای آزمایش، نشست فعلی را نبندید؛ ابتدا در پنجرهای دیگر با رمز جدید وارد شوید.
تغییر رمز کاربر دیگر
اگر به sudo دسترسی دارید، برای تغییر رمز یک کاربر دیگر از این ساختار استفاده کنید:
به جای username نام واقعی حساب را قرار دهید. در این حالت معمولاً رمز فعلی آن کاربر درخواست نمیشود، زیرا عملیات با سطح دسترسی مدیریتی انجام میگیرد.
پس از تغییر، دسترسیها و عضویت کاربر در گروهها را نیز بررسی کنید:
id username
sudo یا wheel را جداگانه ارزیابی کنید.تغییر رمز root در لینوکس
اگر مستقیماً با حساب root وارد شدهاید، دستور زیر رمز همان حساب را تغییر میدهد:
passwd
sudo passwd rootفعالبودن رمز root به معنای مجازبودن ورود مستقیم آن از طریق SSH نیست. امکان ورود SSH به تنظیم PermitRootLogin و سایر سیاستهای احراز هویت بستگی دارد.
در بسیاری از سناریوها بهتر است یک کاربر عادی با دسترسی sudo داشته باشید و ورود مستقیم root از راه دور را محدود کنید. این تصمیم را فقط پس از آزمایش حساب مدیریتی جایگزین اجرا کنید.
مجبورکردن کاربر به تغییر رمز در ورود بعدی
اگر برای کاربر دیگری رمز موقت تعیین کردهاید، میتوانید او را ملزم کنید در ورود بعدی رمز را تغییر دهد:
sudo passwd --expire username
قفل و بازکردن یک حساب کاربری
برای جلوگیری موقت از ورود مبتنی بر رمز یک حساب:
sudo passwd -l username
برای بازکردن آن:
قفلکردن رمز لزوماً تمام روشهای ورود را مسدود نمیکند. اگر کاربر دارای SSH Key، نشست فعال، Token یا روش دسترسی دیگری باشد، باید آن موارد نیز جداگانه بررسی شوند.
آموزش مدیریت کاربران در لینوکس» ← مقاله ساخت، حذف و مدیریت کاربران لینوکس]
چگونه یک رمز مناسب برای سرور انتخاب کنیم؟
رمز سرور باید منحصربه فرد، غیرقابل حدس و متفاوت از رمز ایمیل، سایت یا پنل مدیریت باشد. استفاده از اطلاعاتی مانند نام شرکت، شماره تلفن، تاریخ تولد و الگوهای ساده، احتمال حدسزدن رمز را افزایش میدهد.
یک عبارت عبور طولانی و تصادفی معمولاً از یک رمز کوتاه و پیچیده اما قابل پیش بینی مناسب تر است. برای تولید و نگهداری رمز میتوانید از یک Password Manager معتبر استفاده کنید.
رمز را در موارد زیر نگهداری نکنید:
- فایل متنی عمومی روی رایانه
- پیامرسان یا گفت وگوی گروهی
- توضیحات پروژه در مخزن Git
- اسکریپتهای قابلمشاهده
- فایل تنظیمات بدون محدودیت دسترسی
- ایمیل مشترک میان چند نفر
پس از تغییر رمز، دسترسی اعضای سابق تیم، کلیدهای عمومی قدیمی و حسابهای بلااستفاده را نیز بررسی کنید. تغییر یک رمز، کلید SSH قبلی یا نشست فعال دیگران را خودکار حذف نمیکند.
SSH Key چیست و چرا برای ورود به سرور مناسب است؟
SSH Key از یک کلید خصوصی و یک کلید عمومی تشکیل میشود. کلید عمومی روی سرور قرار میگیرد و کلید خصوصی در رایانه مدیر باقی میماند.
هنگام اتصال، سرور بررسی میکند که کاربر کلید خصوصی متناظر را در اختیار دارد یا خیر. کلید خصوصی در فرایند عادی ورود برای سرور ارسال نمیشود.
این روش نیاز به ارسال و واردکردن رمز حساب در هر اتصال را کاهش میدهد. اگر کلید با الگوریتم مناسب ساخته و فایل خصوصی نیز با Passphrase محافظت شود، ورود مدیریتی قابلکنترلتر خواهد بود.
بااینحال، SSH Key نیز بدون مدیریت صحیح امن نیست. کپیشدن کلید خصوصی، نگهداری آن در فضای عمومی یا باقیماندن کلید کارکنان سابق روی سرور، خطر دسترسی غیرمجاز ایجاد میکند.
مقایسه ورود با رمز و SSH Key
| معیار | ورود با رمز عبور | ورود با SSH Key |
|---|---|---|
| اطلاعات موردنیاز | نام کاربری و رمز | کلید خصوصی متناظر با کلید عمومی |
| مقاومت در برابر حدس رمز | وابسته به قدرت رمز و محدودیت تلاشها | در برابر حملات حدس رمز مناسبتر است |
| سهولت استفاده | ساده برای کاربران تازهکار | نیازمند ساخت و نگهداری کلید |
| خطر فراموشی یا اشتراک | امکان فراموشی و ارسال ناامن رمز | احتمال گمشدن یا کپیشدن فایل خصوصی |
| مدیریت چند مدیر | اشتراک رمز خطرناک است | برای هر مدیر میتوان کلید جداگانه ساخت |
| لغو دسترسی یک مدیر | ممکن است نیازمند تغییر رمز مشترک باشد | میتوان فقط کلید همان فرد را حذف کرد |
| حفاظت تکمیلی | مدیر رمز عبور و احراز هویت چندمرحلهای در لایههای مرتبط | Passphrase، Agent و محدودیت فایروال |
| کاربرد پیشنهادی | دسترسی موقت یا مرحله راهاندازی با کنترل مناسب | دسترسی مدیریتی روزمره به سرور |
برای مشاهده سرورهای لینوکسی متناسب با میزبانی سایت، توسعه نرم افزار یا اجرای سرویسهای اختصاصی میتوانید صفحه سرور مجازی شرکت تجارت الکترونیک نوژن را بررسی کنید. نوع منابع و سطح مدیریت باید متناسب با بار کاری و تجربه فنی تیم انتخاب شود.
مطالعه بیشتر: مشاهده سرورهای مجازی لینوکس
ساخت SSH Key در رایانه شخصی
کلید SSH را روی رایانهای بسازید که قرار است از طریق آن به سرور متصل شوید. ساخت کلید خصوصی روی VPS و انتقال آن به رایانه، در اغلب سناریوهای معمول روش مناسبی نیست.
ساخت کلید در لینوکس و macOS
ترمینال را باز کنید و دستور زیر را اجرا کنید:
ssh-keygen -t ed25519
ابزار محل ذخیره کلید و سپس Passphrase را درخواست میکند. انتخاب Passphrase مناسب از کلید خصوصی در صورت دسترسی شخص دیگری به فایل محافظت میکند.
دو فایل ایجاد میشوند:
id_ed25519
id_ed25519.pub
فایل اول کلید خصوصی است و نباید منتشر شود. فایل دارای پسوند .pub کلید عمومی است و میتواند روی سرور قرار گیرد.
ساخت کلید SSH در ویندوز
در نسخههای جدید ویندوز میتوانید PowerShell یا Windows Terminal را باز کرده و همان دستور را اجرا کنید:
محل پیشنهادی ذخیره کلید معمولاً در پوشه کاربر نمایش داده میشود. اگر از PuTTY یا نرمافزار دیگری استفاده میکنید، قالب کلید و روش بارگذاری آن ممکن است متفاوت باشد.
بهتر است برای هر دستگاه مدیر یک کلید جداگانه ساخته شود. استفاده از یک کلید خصوصی مشترک میان چند نفر، تشخیص صاحب دسترسی و لغو مجوز یک فرد را دشوار میکند.
انتقال کلید عمومی SSH به سرور
اگر ورود با رمز هنوز فعال است، ساده ترین روش در لینوکس و macOS استفاده از ssh-copy-id است:
ssh-copy-id username@SERVER_IP
اگر SSH روی پورت سفارشی اجرا میشود:
ssh-copy-id -p PORT username@SERVER_IP
این ابزار کلید عمومی را در فایل authorized_keys کاربر مقصد قرار میدهد و مجوزهای معمول را نیز تنظیم میکند.
افزودن دستی کلید عمومی
اگر ssh-copy-id در دسترس نیست، ابتدا روی سرور پوشه SSH را برای کاربر موردنظر ایجاد کنید:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
سپس متن کامل کلید عمومی را در فایل زیر قرار دهید:
~/.ssh/authorized_keys
بعد مجوز فایل را تنظیم کنید:
chmod 600 ~/.ssh/authorized_keys
اگر این مراحل با حساب root برای کاربر دیگری انجام شدهاند، مالکیت فایلها را بررسی و اصلاح کنید:
sudo chown -R username:username /home/username/.ssh
مسیر خانه کاربران ممکن است در برخی سیستمها متفاوت باشد. پیش از اجرای chown، نام کاربر و مسیر را دقیق بررسی کنید.
آزمایش ورود با کلید
نشست فعلی را باز نگه دارید و در یک ترمینال جدید متصل شوید:
ssh username@SERVER_IP
اگر چند کلید دارید، میتوانید فایل کلید را مشخص کنید:
ssh -i ~/.ssh/id_ed25519 username@SERVER_IP
اگر اتصال موفق بود، اجرای sudo را نیز بررسی کنید:
sudo whoami
تنها پس از موفقیت ورود با کلید و تأیید دسترسی مدیریتی، سراغ غیرفعالکردن رمز بروید.
آموزش اتصال SSH به سرور لینوکس» ← مقاله اتصال به VPS از ویندوز و لینوکس]
تنظیم امن سرویس SSH
فایل اصلی تنظیمات OpenSSH Server معمولاً در مسیر زیر قرار دارد:
/etc/ssh/sshd_config
بعضی توزیعها تنظیمات تکمیلی را از پوشه زیر نیز میخوانند:
/etc/ssh/sshd_config.d/
پیش از ویرایش فایل اصلی از آن نسخه پشتیبان بگیرید:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backupسپس فایل را با ویرایشگر دلخواه باز کنید:
sudo nano /etc/ssh/sshd_config
غیرفعال کردن ورود با رمز
پس از آزمایش موفق SSH Key، این گزینه را بررسی کنید:
PasswordAuthentication no
وجود گزینههای تکراری یا فایلهای تکمیلی ممکن است مقدار نهایی را تغییر دهد. تنظیم مؤثر SSH را میتوانید با دستور زیر بررسی کنید:
sudo sshd -T
محدود کردن ورود مستقیم root
پس از تأیید عملکرد کاربر sudo، مقدار زیر را تنظیم کنید:
PermitRootLogin no
این گزینه ورود مستقیم root از طریق SSH را محدود میکند. کاربران مجاز همچنان میتوانند در صورت داشتن مجوز از sudo استفاده کنند.
اعتبارسنجی تنظیمات قبل از اعمال
پیش از Reload کردن سرویس، صحت ساختار فایلها را بررسی کنید:
sudo sshd -t
نام سرویس در بعضی توزیعها ممکن است sshd باشد:
sudo systemctl reload sshd
اکنون از یک ترمینال جدید اتصال را امتحان کنید. نشست قدیمی را فقط پس از ورود موفق کاربر جدید ببندید.
تنظیم فایروال برای SSH
قبل از فعالکردن فایروال، پورت واقعی SSH را مجاز کنید. در اوبونتو و برخی توزیعهای مبتنی بر Debian میتوان از UFW استفاده کرد.
برای پورت استاندارد:
برای یک پورت سفارشی:
اگر قانون SSH وجود دارد، فایروال را فعال کنید:
در صورت وجود فایروال ابری یا Security Group در پنل ارائه دهنده، پورت SSH باید در آن لایه نیز مجاز باشد. ناهماهنگی میان فایروال سیستمعامل و فایروال شبکه میتواند اتصال را مسدود کند.
اگر IP مدیریتی ثابت دارید، محدودکردن SSH به همان IP میتواند سطح دسترسی عمومی را کاهش دهد. این روش برای کاربران دارای IP متغیر باید با احتیاط و برنامه بازیابی اجرا شود.
آیا تغییر پورت SSH ضروری است؟
تغییر پورت میتواند تعداد بخشی از درخواستهای خودکار روی پورت پیشفرض را کاهش دهد، اما امنیت اساسی ایجاد نمیکند. پورت سفارشی نیز قابلشناسایی است.
استفاده از SSH Key، محدودکردن root، فایروال، بهروزرسانی و نظارت بر گزارشها مهمتر هستند. اگر پورت را تغییر میدهید، ابتدا پورت جدید را در همه لایههای فایروال باز کنید و سپس اتصال را آزمایش کنید.
آموزش تغییر پورت SSH در لینوکس» ← مقاله تغییر پورت SSH و تنظیم فایروال]
رفع مشکلات رایج ورود با SSH Key
خطای Permission denied
این خطا میتواند به نام کاربری اشتباه، کلید خصوصی نادرست، مجوزهای نامناسب یا غیرفعالبودن احراز هویت کلیدی مربوط باشد. برای دریافت جزئیات بیشتر اتصال را در حالت Verbose اجرا کنید:
اطلاعات خروجی ممکن است شامل مسیر فایلها و جزئیات محیط باشد؛ بنابراین هنگام اشتراکگذاری آن، دادههای حساس را حذف کنید.
مجوز اشتباه پوشه SSH
مجوزهای رایج برای پوشه و فایل کلید عمومی عبارتاند از:
chmod 600 ~/.ssh/authorized_keysمالک پوشه و فایل نیز باید با کاربر مقصد هماهنگ باشد. مجوز بسیار باز ممکن است باعث شود سرویس SSH فایل را نپذیرد.
انتخاب کلید اشتباه
اگر چند کلید روی رایانه دارید، فایل موردنظر را مشخص کنید:
ssh -i ~/.ssh/private_key username@SERVER_IP
میتوانید برای مدیریت چند سرور از فایل تنظیمات کاربر در مسیر ~/.ssh/config استفاده کنید. مجوز این فایل نیز باید محدود باشد.
مسدود شدن پورت توسط فایروال
پورت SSH باید هم در فایروال سیستمعامل و هم در فایروال پنل سرویس دهنده باز باشد. بااینحال، پورت را برای تمام اینترنت باز نکنید اگر امکان محدودسازی امن به IPهای مدیریتی وجود دارد.
اجرا نشدن سرویس SSH
وضعیت سرویس را از طریق کنسول اضطراری بررسی کنید:
sudo systemctl status 