تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

نحوه محدود کردن ورود کاربران در سرور مجازی اوبونتو Ubuntu


۲۴ بهمن ۱۴۰۳

یکی از بخش‌های اساسی مدیریت سیستم، پیکربندی و مدیریت کاربران (Users) و گروه‌ها (Groups) است. بخشی از این وظیفه، شامل نظارت بر ورود تمامی موجودیت‌های سیستم (System Entities) است. در این راهنما، مفاهیم مرتبط با نحوه مدیریت کاربران و نحوه ثبت ورود آن‌ها و نحوه احراز هویت‎‌شان را معرفی خواهیم کرد.

ما این مفاهیم را روی یک سرور مجازی اوبونتو نسخه 22.04 بررسی خواهیم کرد، اما می‌توانید این مراحل را روی هر توزیع مدرن دیگری از لینوکس، دنبال کنید. برای راه‌اندازی یک سرور مجازی اوبونتو جهت اجرای این آموزش، می‌توانید از راهنمای “نحوه راه‌اندازی اولیه سرور مجازی با اوبونتو Ubuntu” استفاده کنید. در صورتی که نیاز به یک سرور مجازی پرسرعت با زیرساخت قوی، دارید؛ توصیه می‌شود از سرور مجازی دائمی لیارا، استفاده کنید.

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

در ادامه، بخوانید:

  • نحوه محدود کردن دسترسی با استفاده از /etc/passwd
  • نحوه محدود کردن دسترسی با استفاده از /etc/shadow
  • نحوه محدود کردن دسترسی با استفاده از /etc/nologin
  • نحوه محدود کردن دسترسی ssh با استفاده از /etc/security/access.conf
  • نتیجه‌گیری

نحوه محدود کردن دسترسی با استفاده از /etc/passwd

یکی از روش‌های محدودسازی ورود، این است که login shell یک کاربر را بر روی یک مقدار خاص تنظیم کنیم.

به‌عنوان مثال، فرض کنید که در سرور مجازی، یک کاربر به نام messagebus داریم که login shell آن بر روی یک مقدار خاص، تنظیم شده است. شما می‌توانید با استفاده از دستور grep، این کاربر را در فایل /etc/passwd جستجو کنید:

less /etc/passwd | grep messagebus

خروجی:

messagebus:x:102:105::/nonexistent:/usr/sbin/nologin

آخرین مقدار در خروجی فوق، شل (shell) یا دستوری است که هنگام ورود موفق، اجرا می‌شود. در این مورد، مقدار آن روی /usr/sbin/nologin تنظیم شده است. حال، اگر سعی کنید با استفاده از دستور sudo su به این کاربر لاگین کنید، عملیات ناموفق خواهد بود:

sudo su messagebus

خروجی:

This account is currently not available.

پیام فوق، نشان می‌دهد که شل کاربر messagebus روی /usr/sbin/nologin تنظیم شده است و این حساب برای ورود، در دسترس نیست.

برای جلوگیری از ورود یک کاربر، می‌توانید از ابزار usermod استفاده کنید تا login shell پیش‌فرض او (که معمولاً /bin/bash است) را به یک shell نامعتبر مانند nologin تغییر دهید:

sudo usermod -s /usr/sbin/nologin username

نحوه محدود کردن دسترسی با استفاده از /etc/shadow

یک روش دیگر برای محدودسازی دسترسی کاربران، استفاده از فایل /etc/shadow است. این فایل شامل رمز عبورهای هش‌شده تمامی کاربران سیستم است. می‌توانید با استفاده از less کل محتوای این فایل را مشاهده کنید:

sudo less /etc/shadow

خروجی:

. . .
uuidd:*:19105:0:99999:7:::
tcpdump:*:19105:0:99999:7:::
sshd:*:19105:0:99999:7:::
pollinate:*:19105:0:99999:7:::
landscape:*:19105:0:99999:7:::
lxd:!:19180::::::
sammy:$y$j9T$4gyOQ5ieEWdx1ZdggX3Nj1$AbEA9FsG03aTsQhl.ZVMXatwCAvnxFbE/GHUKpjf9u6:19276:0:99999:7:::

فیلد دوم (مقدار $y$j9T$4gyO… در خط آخر) شامل رمز عبور هش‌شده کاربر است.

در حساب‌های سیستمی، به‌جای مقدار هش‌شده، علامت ستاره (*) قرار دارد. این علامت، نشان می‌دهد که رمز عبوری برای این حساب تنظیم نشده و نمی‌توان با استفاده از رمز عبور وارد شد، مگر اینکه آن را تغییر دهید.

برای غیرفعال کردن ورود با رمز عبور، می‌توان مقدار هش‌شده را با یک علامت تعجب (!) در ابتدای آن، نامعتبر کرد. دو ابزار برای انجام این کار وجود دارد که می‌توانند یک حساب کاربری را “قفل” کنند: passwd و usermod.

می‌توانید از passwd همراه با فلگ -l برای قفل کردن و فلگ -u برای باز کردن قفل، استفاده کنید

sudo passwd -l sammy

اکنون، اگر محتوای فایل /etc/shadow را با اجرای دستور زیر بررسی کنید:

sudo less /etc/shadow | grep sammy

خروجی، مشابه زیر خواهد بود:

sammy:!$y$j9T$4gyOQ5ieEWdx1ZdggX3Nj1$AbEA9FsG03aTsQhl.ZVMXatwCAvnxFbE/GHUKpjf9u6:19276:0:99999:7::::::

همان‌طور که می‌بینید، مقدار هش‌شده رمز عبور همچنان باقی است، اما با افزودن “!” در ابتدای آن، نامعتبر شده و این کاربر دیگر نمی‌تواند با رمز عبور وارد شود. برای باز کردن قفل حساب و فعال‌سازی مجددِ ورود با رمز عبور، دستور زیر را اجرا کنید:

sudo passwd -u sammy

دستور usermod نیز عملکرد مشابهی دارد. می‌توانید از فلگ -L برای قفل کردن و فلگ -U برای باز کردن قفل استفاده کنید:

sudo usermod -L sammy
sudo usermod -U sammy

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

نحوه محدود کردن دسترسی با استفاده از /etc/nologin

گاهی ممکن است نیاز داشته باشید که ورود تمامی حساب‌های کاربری را به‌جز root غیرفعال کنید. این کار ممکن است به خاطر دلایل مختلفی از جمله اعمال تغییرات اساسی (In-depth Maintenance) و مشکوک شدن به نفوذ یا هک یکی از حساب‌های کاربری، باشد.

در هر صورت، می‌توانید با ایجاد یک فایل در مسیر /etc/nologin این محدودیت را اعمال کنید:

sudo touch /etc/nologin

با این کار، همه کاربران معمولی، از ورود به سیستم منع می‌شوند و فقط root می‌تواند وارد شود. اگر فایل /etc/nologin خالی باشد، کاربران به سادگی و بدون دریافت هیچ توضیحی، از سیستم خارج می‌شوند. اما اگر درون این فایل یک پیام بنویسید، کاربران هنگام تلاش برای ورود، آن را مشاهده خواهند کرد. برای انجام این کار، دستور زیر را اجرا کنید:

sudo sh -c 'echo "Planned maintenance. Log in capabilities will be restored at 1545 UTC" > /etc/nologin'

اکنون، اگر کاربری سعی کند با SSH (مثلاً دستور زیر)، به سرور متصل شود:

ssh sammy@host

با خروجی زیر، مواجه خواهد شد:

sammy@host's password:
Planned maintenance. Log in capabilities will be restored at 1545 UTC

Connection closed by host

همان‌طور که مشاهده می‌کنید، کاربران پیام خطا دریافت کرده و ورود آن‌ها مسدود می‌شود. برای حذف محدودیت ورود و فعال‌سازی مجدد حساب‌های کاربری، کافی است فایل /etc/nologin را حذف کنید:

sudo rm /etc/nologin

نحوه محدود کردن دسترسی ssh با استفاده از /etc/security/access.conf

یک روش دیگر برای محدودسازی دسترسی کاربران در لینوکس، استفاده از فایل پیکربندی /etc/security/access.conf است. این فایل به شما اجازه می‌دهد دسترسی کاربران خاص یا گروه‌های مشخصی را، به سیستم، محدود کنید.

برای این کار، در ابتدا، فایل /etc/security/access.conf را با ویرایشگر متن مورد نظرتان، باز کنید:

sudo nano /etc/security/access.conf

خروجی:

# Login access control table.
#
# Comment line must start with "#", no space at front.
# Order of lines is important.
#
# When someone logs in, the table is scanned for the first entry that
# matches the (user, host) combination, or, in case of non-networked
# logins, the first entry that matches the (user, tty) combination.  The
# permissions field of that table entry determines whether the login will
# be accepted or refused.
#
# Format of the login access control table is three fields separated by a
# ":" character:
#
# [Note, if you supply a 'fieldsep=|' argument to the pam_access.so
# module, you can change the field separation character to be
# '|'. This is useful for configurations where you are trying to use
# pam_access with X applications that provide PAM_TTY values that are
# the display variable like "host:0".]
#
#       permission:users:origins
#
# The first field should be a "+" (access granted) or "-" (access denied)
# character.
#
# The second field should be a list of one or more login names, group

اکنون، می‌توانید دسترسی کاربران را به‌طور خاص محدود کنید. به‌عنوان مثال، برای ممنوع کردن ورود کاربر sammy به سیستم، خط زیر را اضافه کنید:

-:sammy:ALL

یا مثلاً برای محدودسازی تمامی کاربران به‌جز root و admin، از دستور زیر استفاده کنید:

-:ALL EXCEPT root admin:ALL

در ادامه، فایل را ذخیره کنید و آن را ببندید (در صورتی که از nano استفاده می‌کنید، در ابتدا Ctrl+X، سپس y و سپس Enter را فشار دهید).

برای اینکه تغییرات در access.conf اعمال شوند، باید ماژول pam_access.so را در پیکربندی PAM فعال کنید. فایل /etc/pam.d/sshd را با ویراشگر، باز کنید:

sudo nano /etc/pam.d/sshd

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

account required pam_access.so

در نهایت، فایل را ذخیره کنید. برای اعمال تغییرات، سرویس SSH را مجدداً، راه‌اندازی کنید:

sudo systemctl restart sshd

اکنون، اگر کاربر sammy تلاش کند وارد سیستم شود، ورود او رد خواهد شد:

ssh sammy@your-server

خروجی:

access denied

نتیجه‌گیری

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

همچنین بخوانید: مبانی SSH: کار با سرور‌ها، کلاینت‌ها و کلیدهای SSH