مهم ترین کاربرد سیستم عامل لینوکس را می توان استفاده برای سرویس دهی دانست زیرا لینوکس امکان ارائه سرویس های مختلف شبکه را با پایداری بسیار بالا برای ما فراهم کرده است . هم اکنون برای ارائه سرویس های میزبانی وب ، نگه داری فایل ، میل سرور و … از سیستم عامل لینوکس استفاده می شود . با توجه به این موضوع ، امنیت در سیستم عامل لینوکس اهمیت بالایی دارد . از نظر ابعاد امنیتی برخی توزیع های لینوکس بسیار پایدار هستند و به ندرت باگ و حفره های امنیتی در آن ها مشاهده می شود که به دلیل متن باز بودن لینوکس این باگ ها به سرعت شناسایی و برطرف می شوند.
در این مقاله نکات ساده ای را بیان خواهیم کرد که شما با رعایت این موارد امنیت سرور لینوکس خود را تا حد قابل قبولی ارتقا خواهید داد.
1- چیزهایی را نصب کنید که به آن نیاز دارید
اگر قصد دارید یک سرور راه اندازی کنید، ممکن است با خود بگویید که من 40 گیگابایت فضای ذخیرهسازی در اختیار دارم؛ بنابراین میتوانم هر نرم افزار و سرویسی را که مایل هستم نصب کنم. از لحاظ تئوری حرف شما درست است، شما مالک سرور هستید و به لطف نرم افزارهای منبع باز سیستم عامل لینوکس هر چیزی را که مایل باشید را میتوانید نصب کنید. اما نباید این موضوع را فراموش کنید که حتی غیر قابل نفوذترین سرورها نیز ممکن است با بهره برداری از اجزای آسیب پذیر و اصلاح نشدهای که در آن سرور در حال اجرا هستند مورد حمله قرار بگیرند.
برای در اختیار داشتن یک سرور امن اولین قانون این است که سرور خود را تا حد امکان خلاصه و ساده نگه دارید. تنها پکیجهایی را که واقعا به آن نیاز دارید، نصب کنید. اگر از قبل پکیجهای ناخواستهای روی سرور شما نصب شده است آنها را پاکسازی کنید. هر چه بستههای نرم افزاری شما کمتر باشد احتمال مواجه شدن با باگها و حفرههای نرم افزاری نیز کمتر میشود. قبل از نصب هر گونه نرم افزار و بستههای وابسته (مثل ownCloud)، شما باید اسناد مرتبط با آن پکیج را مطالعه کرده و تنها مواردی که به آن نیاز دارید را نصب کنید.
2- چیزهایی را اجرا کنید که به آن نیاز دارید
دومین قانون برای راه اندازی و حفظ امنیت یک سرور لینوکس این است که تنها سرویسهایی را که به آن نیاز دارید، اجرا کنید. خیلی از توزیعها و پکیجها ممکن است در زمان راه اندازی سرویسهای خاصی را روی پورتهای متفاوت اجرا کنند که میتواند خطرات امنیتی را به همراه داشته باشد. بنابراین ترمینال را باز کرده و فرمان زیر را اجرا کنید:
netstat -npl
خروجی این فرمان به شما نشان میدهد که کدام سرویسها روی کدام پورتها در حال اجرا هستند. اگر شما به سرویسی برخورد کردید که نباید اجرا شود آن را متوقف کنید. شما همچنین باید مراقبت سرویسهایی که فعال بوده و در زمان راه اندازی سیستم اجرا میشوند نیز باشید. با اجرای فرمان زیر میتوانید این موضوع را تحت نظر قرار دهید:
systemctl list-unit-files --type=service | grep enabled
بر اساس نوع سیستم، شما ممکن است یک خروجی شبیه به آن چه در تصویر بالا مشاهده میکنید را دریافت کنید. اگر با هر نوع سرویس ناخواسته مواجه شدید میتوانید آن را با فرمان قدرتمند systemctl غیر فعال کنید:
systemctl disable service_name
3- محدود کردن دسترسی به سرور
درست شبیه به موردی که شما کلیدهای خانه خود را تنها در اختیار کسانی قرار میدهید که میشناسید، امکان دسترسی به سرور خود را نیز باید از دسترس افراد غریبه دور نگه دارید. این قانون به وضوح مشخص میکنند که شما باید دسترسی به سرور خود را محدود کنید. توجه داشته باشید که انجام این کار به تنهایی راه نفوذ خرابکاران به سرور شما را مسدود نمیکند، اما انجام آن میتواند لایههای امنیتی سرور شما را افزایش داده و امکان نفوذ به آن را دشوارتر کند.
هیچ گاه با حساب کاربری Root به سرور وارد نشوید
استفاده از حساب کاربری مدیریت ارشد یا همان روت برای ورود به سرور از طریق ssh به هیچ وجه کار درستی نیست. بنابراین بهترین کار این است که امکان دسترسی کاربر روت به سرور را از طریق ssh غیر فعال کنید. اما قبل از انجام این کار باید یک حساب کاربری ایجاد کنید که بتوانید با این حساب از طریق ssh به سرور وارد شده و وظایف مدیریتی را انجام دهید. به یاد داشته باشید که همیشه بعد از لاگین کردن به سرور میتوانید در صورت نیاز به کاربر روت منتقل شوید.
برای اضافه کردن یک کاربر جدید در توزیعهای مختلف لینوکس شیوههای متفاوتی وجود دارد. به عنوان مثال، توزیع Red Hat/CentOS از فرمان useradd و توزیع Ubuntu/Debian از فرمان adduser استفاده میکنند.
برای ایجاد یک کاربر جدید در Red Hat/CentOS از فرمان زیر استفاده کنید (swapnil نام کاربر فرضی ما است):
useradd swapnil
سپس با استفاده از فرمان زیر یک کلمه عبور برای این کاربر تعریف کنید:
passwd swapnil
بعد از وارد کردن این فرمان از شما درخواست میشود که یک کلمه عبور جدید برای این کاربر وارد کنید. حالا باید به این کاربر امکان برخورداری از تواناییهای sudo را اعطا کنید. برای این منظور فرمان زیر را اجرا کنید:
EDITOR=nano visudo
سپس طبق تصویر زیر به دنبال این خط بگردید
# %wheel ALL=(ALL) ALL
خط را از حالت کامنت خارج کنید. نماد # در ابتدای هر خط نشان دهنده کامنت بودن (توضیحات) آن خط است و با برداشتن این نماد خط نیز از حالت کامنت خارج و به فرمان تبدیل میشود. بعد از انجام این کار خط شما به این شکل در خواهد آمد:
%wheel ALL=(ALL) ALL
حالا فایل را ذخیره و از آن خارج شوید. اگر این کاربر به گروه wheel تعلق ندارند شما میتوانید به راحتی با استفاده از فرمان زیر آن را به این گروه اضافه کنید:
# usermod -aG wheel swapnil
در سیستمهای اوبونتو از این فرمان استفاده کنید:
adduser swapnil
به سوالاتی که سیستم از شما میپرسد پاسخ دهید که شامل ایجاد یک کلمه عبور جدید برای این کاربر است. بعد از ساخته شدن این کاربر با استفاده از فرمان زیر قدرتهای sudo را به او اعطا کنید:
gpasswd -a swapnil sudo
یک پنجره ترمینال جدید دیگر باز کنید و سعی کنید با این کاربر جدیدی که ساختهاید وارد سرور شوید و از طریق sudo فرامین مدیریتی را انجام دهید. اگر این کار به درستی انجام شد مراحل بعد را دنبال کنید.
4- غیرفعال کردن امکان ورود با کاربر root
بعد از طی کردن مراحل قبل حالا نوبت آن است که امکان دسترسی کاربر root را غیرفعال کنیم. با این کار دیگر هیچ کس نمیتواند از طریق ssh یا روشهای دیگر به عنوان کاربر روت وارد سیستم شود. برای انجام این کار فایل پیکربندی sshd را باز کنید:
nano /etc/ssh/sshd_conf
سپس خط زیر را پیدا کرده و آن را از حالت کامنت خارج کنید:
#PermitRootLogin no
حالا فایل را ذخیره کرده و از آن خارج شوید، بعد سرویس را با استفاده از فرمان زیر ریاستارت کنید:
service ssh restart
یا:
systemctl restart sshd
توجه: در این مرحله هنوز نباید از سرور خارج شوید. ابتدا باید امتحان کنید که آیا میتوانید با موفقیت و با استفاده از حساب کاربری که قبلا ساختهاید از طریق ssh وارد سرور شوید. یک پنجره جدید از ترمینال باز کرده و با استفاده از حساب کاربری که قبلا ایجاد کرده بودید به سرور لاگین کنید، اگر همه چیز به خوبی کار کرد حالا میتوانید با خیال راحت از حساب کاربری روت خارج شوید.
5- تغییر دادن پورت
دومین تغییری که ما قصد داریم در فایل پیکربندی sshd اعمال کنیم، عوض کردن پورت پیش فرض است. این کار بیشتر به منظور افزایش یک لایه امنیتی از طریق در ابهام قرار دادن شماره پورت صورت میگیرد. فرض کنید یک شرکت خدمات امنیتی با استفاده از چند وسیله نقلیه یک شکل قصد داشته باشد یک فرد مهم را جابجا کند. در این حالت فرد حمله کننده نمیتواند تشخیص دهند که شخص مورد نظر در کدام یک از این وسایل نقلیه سوار شده است. تغییر دادن پورت پیش فرض نیز امکان تشخیص درست آن را برای هکر دشوار میکند.
فایل sshd_config را باز کنید (این بار از طریق فرمان sudo، چرا که دیگر شما نمیتوانید با استفاده از حساب کاربری روت به سرور وارد شوید):
sudo nano /etc/ssh/sshd_conf
سپس این خط را پیدا کنید:
#Port 22
خط را از حالت کامنت خارج کرده و یک شماره پورت دیگر را برای آن انتخاب کنید. قبل از انتخاب یک شماره جدید اطمینان حاصل کنید که این پورت توسط سرویس دیگری روی سرور شما استفاده نشده باشد. برای بدست آوردن شماره پورتهای رایج و استفاده نکردن از آنها میتوانید از مقاله موجود در ویکی پدیا استفاده کنید. برای نمونه میتوانید از پورت1977 استفاده کنید:
Port 1977
سپس فایل را ذخیره کرده و از آن خارج شوید و یک بار سرویس sshd را ریاستارت کنید. یک بار دیگر قبل از خارج شدن از سرور با باز کردن یک پنجره ترمینال دیگر و لاگین کردن با استفاده از الگوی زیر تنظیمات خود را بررسی کنید:
ssh -p{port_number}@server_IP
مثال:
ssh -p1977
اگر توانستید با موفقیت به سرور وارد شوید کارها به درستی انجام شده است.
6- لاگین کردن بدون نیاز به کلمه عبور
شما میتوانید با غیرفعال کردن نیاز به وارد کردن کلمه عبور راحتتر و سریعتر به ssh لاگین کنید. همچنین با غیرفعال کردن کامل احرازهویت به وسیله کلمه عبور یک لایه امنیتی دیگر را نیز اضافه کنید. به یاد داشته باشید که با فعال کردن این قابلیت تنها میتوانید از طریق سیستمی که کلیدهای ssh را در آن ایجاد کردهاید به سرور خود متصل شوید.
برای شروع ابتدا کلید ssh را با استفاده از فرمان زیر در سیستم محلی خود ایجاد کنید:
عد از اجرای این فرمان چند سوال از شما پرسیده میشود، شما میتوانید مکان این کلید را در موقعیت پیش فرض خود رها کنید و با استفاده از یک گذر واژه حدس زدن آن را دشوار کنید. در مرحله بعد شما باید این کلیدها را به سرور کپی کنید تا با این کلید هر دو سیستم (محلی و سرور) بتوانند با یک دیگر ارتباط برقرار کنند.
cat ~/.ssh/id_rsa.pub | ssh -p 1977 swapnil@remote-server ";mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
حالا سعی کنید با استفاده از یک پنجره ترمینال دیگر به سرور دسترسی پیدا کنید. اگر همه چیز به درستی انجام شده باشد دیگر برای ورود از شما کلمه عبور پرسیده نخواهد شد.
انجام این مرحله بیشتر از این که جنبه افزایش امنیت داشته باشد برای سهولت در انجام کار مورد استفاده قرار میگیرد. اما در مجموع با غیرفعال کردن کامل احراز هویت به وسیله کلمه عبور شما میتوانید مقداری امنیت سرور خود را نیز بالا ببرید. فایل sshd_config را باز کرده و این خط کامنت شده را پیدا کنید:
#PasswordAuthentication yes
سپس آن را از حالت کامنت خارج کنید و مقدار آن را از yes به no تغییر دهید، حالا فایل را ذخیره و از آن خارج شوید. بعد سرویس sshd را ریاستارت کنید. یک بار دیگر، همچنان ارتباط خود با سرور را در پنجره فعلی باقی نگه دارید. یک ترمینال جدید باز کرده و به سرور لاگین کنید (دقت کنید که این کار بدون پرسیدن کلمه عبور انجام شود).
نقطه ضعف انجام این تنظیمات این است که حالا شما تنها میتوانید از طریق سیستمی که کلیدهای ssh را در آن ایجاد کردهاید به سرور متصل شوید. بنابراین اگر برای دسترسی به سرور از چند کامپیوتر مختلف استفاده میکنید نباید از این روش استفاده کنید.
نکته *** یک مدیر سرور همواره باید قبل از اعمال تغییرات در سرور ، یک نسخه بک آپ از سرور خود را در مکان مطمئن ذخیره سازی کند تا در صورت بروز هرگونه مشکل سریعا بتواند وضعیت پایداری ایجاد کند . بنابر این توصیه می کنیم قبل از اعمال تغییرات فوق یک نسخه پشتیبان از سرور لینوکس خود تهیه کنید
Cache Server چیست ؟ اموزش راه اندازی
نحوه گرفتن Full Backup از لینوکس توسط کامند tar
نصب PHP در لینوکس
وب سرور آپاچی (Apache) چیست؟