نحوه محدود کردن ورود کاربران در سرور مجازی اوبونتو 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