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


موارد امنیتی لینوکس
25 مورد امنتی سیستم عامل لینوکس
بعنوان یک sysadmin که سالیان سال وظیفه نگهداری از سیستم عامل لینوکس را در محیط های عملیاتی و محیط های
development برعهده داشتم،شاید یکی از مهمترین وظایف یک sysadmin ، تامین امنیت سیستم عامل از دست هکرها
و مراقبت از نفوذ spammer ها و virus ها می باشد .
در این مقاله 25 مورد کاربردی که براحتی میتوانید بعنوان یک sysadmin در سیستم های خود برای برقراری امنیت سیستم
عامل خود در نظر بگیرید را ذکر کرده ام . امیدوارم این مقاله برای شما مفید واقع گردد.
تامین امنیت سیستم عامل در سطح فیزیکی
در سطح فیزیکی ابتدا روی BIOS سیستم کلمه عبور یا password بگذارید .
همچنین برای grub نیز کلمه عبور در نظر بگیریدتا هیچ کس بدون داشتن کلمه عبور آن در زمان بوت شدن
سیستم قادر به ورود به سیستم نباشد .

  • Disk Partition
    یکی از مواردی که در بیشتر پروژه ها و بکارگیری سیستم عامل لینوکس در آنها دیده ام این است که
    اکثرا این سیستم عامل را بصورت پیش فرض و تنها بصورت lvm نصب میکنند .
    از جمله مواردی که در امنیت داده های ما روی سیستم عامل بسیار مهم می باشد در نظر گرفتن

چندین فایل سیستم روی سیستم عامل در زمان نصب می باشد . در این خصوص میتوانم بگویم که
بارها و بارها در کلاسهای آموزشی خود تاکید درست نصب کردن در همان ابتدا دارم .
زمانیکه ما از فایل سیستم های جداگانه برای جاسازی داده هایمان استفاده میکنیم ؛ شانس این را
داریم که در زمان خراب شدن سیستم عامل یا زمان crash recovery بتوانیم داده هایی که روی فایل
سیستم های آسیب ندیده قرار دارند را براحتی بازیابی کنیم .
یعنی اگر با مسئله crash recovery روبرو شدیم حداقل ممکن است نیاز به بازگردانی فایل سیستم /
یا boot/ داشته باشم و باقی داده های ما که در فایل سیستم های دیگر ذخیره شده اند محفوظ باقی
خواهند ماند. لذا بهتر است هنگام نصب از فایل سیستم های جداگانه مانند
/
boot/
usr/
var/
opt/
tmp/
home/
استفاده نماییم . البته نیاز به تقسیم بندی فایل سیستم ها بر اساس نوع سرویسی که
از سیستم عامل میخواهیم می تواند متفاوت باشد .

  • به حداقل رساندن تعداد package های سیستم عامل
    یکی از مسائل مهم در تامین امنیت سیستم عامل لینوکس انتخاب package های مورد نیاز است .
    در بسیاری از پروژه ها دیده ام که افراد در اکثر موارد کلیه packageهای سیستم عامل را نصب میکنند
    که این موضوع علاوه بر اینکه سایز کرنل را افزایش میدهد ؛ سبب کاستی امنیت در سطح سیستم
    عامل میگردد .

به منظور بررسی لیست package های نصب شده روی سیستم عامل میتوانید از دستور
# chkconfig –list | grep “3:on”
استفاده نمایید .
با دستور بالا لیستی از packageهای سیستم عامل که روی سیستم نصب و مورد استفاده هستند
مشاهده خواهد شد که با بررسی آن ها می توانید سرویس هایی که نیاز ندارید غیر فعال نمایید :
# chkconfig servicename off
مثلا اگر سرویس postfix را بخواهید غیر فعال کنید از دستور
# chkconfig postfix off
استفاده میکنید .
همچنین با استفاده از دستورات package manager مثل yum و یا apt-get بسته به نوع سیستم
عامل خود میتوانید packageهایی که نیاز ندارید از سیستم پاک نمایید
# yum remove package-name
# apt-get remove package-name

  • بررسی پورت های باز سیستم عامل

برای بررسی پورت های باز سیستم عامل لینوکس میتوانید از دستور netstat به همراه گزینه های مختلفی
که این دستور دارد استفاده نمایید . بدین منظور میتوانید man netstat را مشاهده نمایید .
در زیر یکی از دستورات کاربردی netstat برای تعیین پورت های باز را نشان داده ام :
# netstat -nlptu

  • استفاده از ssh

استفاده از rlogin و telnet به جهت اینکه داده ها را بصورت یک متن خالص و بدون هیچگونه
رمز گذاری بین دو سیستم رد و بدل میکند ، از نظر امنیتی توصیه نمیشود و بجای آن استفاده
از ssh یا secure shell توصیه می گردد .
در خصوص استفاده از ssh که بمنظور برقراری ارتباطات بین دو ماشین بکار میرود در اکثر موارد
مشاهده کرده ام که موارد امنیتی در نظر گرفته نمیشود . بدین منظور رعایت نکات اولیه در پیکربندی
ssh بسیار در امنیت سیستم عامل مهم می باشد .
این موارد به قرار زیر می باشد :
1- حتما ؛ حتما و حتما امکان برقراری ارتباط با کاربر root را در ssh غیر فعال نمایید .
2- به منظور امنیت بیشتر سعی کنید از اسامی کاربرانی خاص جهت استفاده از ssh استفاده نمایید
3- بجای پورت 22 ؛ آنرا به شماره پورتی بالاتر تغییر دهید
4- از ssh protocol نسخه 2 استفاده نمایید .
جهت انجام این تنظیمات کافی است که به فایل etc/ssh/sshd_config/ مراجعه کرده و این فایل را بصورت زیر ویرایش نمایید
مثلا برای غیر فعال کردن دسترسی root بصورت remote در ssh کافی است گزینه
PermitRootLogin no
و برای اجازه دادن به کاربرانی خاص برای ssh کافی است در این فایل دستور
AllowUsers username1 username2 username3
استفاده گردد .
همچنین در این فایل قسمتی که port 22 نوشته شده است را به مثلا port 2272 تغییر دهید .
البته حتما در فایروال پورت جدید را باز کنید .

  • بروز نگاه داشتن سیستم عامل یا update بودن آن

یکی از نکات ضروری در بحث امنیت بروز نگاه داشتن سیستم عامل می باشد . یعنی هر چند وقت یکبار باید سیستم را update
نمایید. بدین منظور میتوانید از دستور
# yum update
# yum check-upate
# apt-get update
استفاده نمایید .

  • بستن cronjob ها برای کاربران
    یکی از نکات مهم امنیتی در سیستم عامل لینوکس که یک sysadmin بهتر است بررسی نماید این
    است که اجازه ندهد هرکاربری بتواند از cron job ها استفاده کند . میدانیم cron job ها مربوط به
    کارهایی یا سرویس هایی می شوند که مثلا میخواهیم در تاریخی خاص یا ساعتی خاص در سیستم
    بصورت اتوماتیک انجام شود . مثلا میخواهیم هر شب ساعت 2 نیمه شب از سیستمbackup
    تهیه گردد . یا لاگهای سیستم به سیستمی دیگر منتقل گردد .

از آنجا که این سرویسها قرار است بصورت غیر دستی و خودکاردر سیستم اتفاق بیافتد بنابراین هر
کاربری در سطح سیستم نباید اجازه نوشتن این برنامه های خود کار را داشته باشد و بنابراین با
هماهنگی با ادمین سیستم به کاربرانی خاص برای استفاده از این cron ها اجازه ایجاد داده خواهد
شد . به منظور متوقف ساختن یا غیر فعال کردن استفاده از cron job ها بهتر است در ابتدا این اجازه
از کلیه کاربران گرفته شود و سپس به کاربرانی که نیاز به آن دارند این سرویس فعال گردد .
بدین جهت ابتدا با فرمان زیر
# echo ALL >> /etc/corn.deny
این اجازه را از همه میگیریم و بعد در فایل /etc/cron.allow/ تنها به کاربرانی که نیاز به آن دارند
این اجازه را می دهیم .

  • بستن usb روی سیستم بطوریکه قابل تشخیص نباشد

به منظور جلوگیری از سرقت رفتن داده ها نیاز داریم که اجازه ندهیم کاربران از usb در سیستم
استفاده کنند بدین منظور کافی است فایلی بنام no-usb در مسیر /etc/modprobe.d/ بسازید
و در این فایل خط زیر را اضافه نمایید :
# vi /etc/modprobe.d/no-usb
install usb-storage /bin/true

  • بکارگیری و استفاده از SELinux

در غالب پروژه هایی که در آن شرکت داشتم و در اکثر سازمانها به جرات میتوانم بگویم که هنوز مشاهده نکرده ام که از ویژگی امنیتی
خوب SELinux در سیستم عامل استفاده گردد .
غالبا به دلیل عدم دانش کافی در استفاده از SELinux این گزینه را غیر فعال میکنند در حالیکه این
ویژگی در سطح امنیتی بسیار موثر بوده و راه نفوذ به سیستم را بسیار دشوارتر می سازد .
SELinux یک ویژگی امنیتی است که در سطح kernel سیستم عامل ایجاد شده است و هنگام
نصب سیستم عامل این ویژگی بصورت پیش فرض فعال می گردد . در محیط های development یا
توسعه نرم افزار بهتر است تا زمان بهبود وضعیت سیستم عامل با گزینه SELinux از حالت permissive
آن استفاده کرده و بعداز اطمینان به حالت enforcing تغییر حالت دهیم.
جهت اطلاع از وضعیت سیستم عامل از اینکه در چه وضعیتی از SELinux استفاده میکند کافی است
دستور :
# sestatus
یا دستور
#getenforce
بمنظور فعال سازی این ویژگی کافی است در فایل
# vi /etc/sysconfig/selinux
گزینه
SELINUX=permissive
استفاده نماییم .
برای غیرفعال کردن این ویژگی بصورت پویا از دستور
# setenforce 0
استفاده میکیم که باعث غیر فعال شدن این ویژگی در سطح سیستم عامل بصورت موقت میشود .
نماییم و بعد از اینکه تمامی موارد و مشکلات مرتبط با آن رفع شد وضعیت آن را به enforcing تغییر
دهیم . یا دستور
# setenforce 1
را اجرا میکنیم . یادمان باشد برای اینکه وضعیت SELinux بصورت پایدار و همیشگی تغییر کند در فایل
/etc/sysconfig/selinux
یا فایل
/etc/selinux/config
مقدار گزینه SELINUX را با یکی از مقادیر permissive یا disabled یا enforcing تغییر میدهیم .
در خصوص SELinux بصورت کامل مقاله ای در سایت قرار خواهم داد .

  • از بین بردن محیط GNOME / KDE

یکی از موارد امنیتی دیگر در سیستم های مهم و عملیاتی این است که محیط گرافیک سیستم عامل
را غیر فعال نماییم .
در بسیاری از پروژه ها دیده ام که بدلیل عدم دانش کافی در شناخت فایل های پیکربندی سیستم و
محل قرار گیری آنها ، غالب افراد از محیط گرافیکی برای تنظیمات محیط سیستم عامل استفاده میکنند .
از نظر امنیتی بسیار مهم است که در سرویسهای مهم و عملیاتی حتما از محیط متنی و غیر گرافیکی
استفاده نموده و بطور کامل محیط گرافیک را غیر فعال و یا اصلا نصب نکنید .
بدین منظور ابتدا Run Level سیستم عامل را به 3 یا multi-user تغییر دهید . بدین منظور کافی است
در فایل
/etc/inittab
مقدار inidefault را به عدد 3 تغییر دهید . ( در سیستم عاملهای نسخه 6 centos , redhat )
در سیستم عامل نسخه 7 centos , redhat که از systemd استفاده میکنند از دستور
# systemctl set-default multi-user.target
استفاده نمایید .
کار دیگری که به منظور غیر فعال کردن محیط گرافیکی باید انجام دهید دستور
# yum groupremove “X Window System”
می باشد که محیط گرافیک را کلا از سیستم عامل پاک میکند .

  • غیرفعال نمودن IPV6

چنانچه در سیستم خود نیازی به استفاده از استاندارهای IPV6 نیستید ؛ حتما استفاده از آن را
غیر فعال نمایید .
بدنی منظور به فایل پیکربندی شبکه در مسیر /etc/sysconfig رفته و فایل network را باز کرده
و مقادیر زیر را در آن اضافه نمایید .
# vi /etc/sysconfig/network
IPV6INIT=no
NETWORKING_IPV6=no

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

برای اینکه کاری کنید که کاربران سیستم نتوانند از پسوردهای قدیمی خود برای بار دیگر استفاده کنند
کافی است که این ویژگی را فعال کنید .
اولا فایلی که پسوردهای قدیمی را در خود ذخیره میکند در مسیر /etc/security قرار دارد
و نام آن opasswd می باشد .
/etc/security/opasswd
به منظور فعال سازی این ویژگی باید در فایل system-auth در مسیر /etc/pam.d/ در مدل
سیستم عامل های Centos , Redhat,fedora
و در فایل common-password در مسیر /etc/pam.d/ در سیستم عامل های مدل
debian , ubuntu, Mint خط زیر را در این فایل به شکل زیر تغییر دهید :
# On CentOS , RedHat , Fefora
# vi /etc/pam.d/system-auth
در قسمت auth این خط را اضافه کنید .
auth sufficient pam_unix.so likeauth nullok
و یا در مدلهای debian , mint , ubuntu
# vi /etc/pam.d/common-passowrd
مثل خط بالا را اضافه میکنیم .
اگر در قسمت password از فایلهای ذکر شده در نسخه های لینوکس خط زیر را اضافه نماییم
password sufficient pam_unix.so nullok use_authok md5 shadow remember=5
را اضافه کنیم باعث میشود که کاربران تا 5 تا از کلمات عبور قبلی خود را نتوانند استفاده نمایند .

  • نحوه بررسی تاریخ اعتبار کلمه رمز عبور کاربران

به منظور تاریخ مصرف گذاشتن روی کلمه عبور کاربران یعنی اینکه مثلا هر کاربری میتواند تا
یکماه از این کلمه رمز استفاده کند از دستور chage استفاده میکنیم .
دستور chage -l username اطلاعات کلمه رمز کاربر مورد نظر را روی صفحه نمایش میدهد .

چنانچه بخواهیم تاریخ مصرف کلمه رمز کاربری را تغییر دهیم از دستور :
# change -M 30 amir

این دستور میگوید که کاربر با نام امیر تا یکماه میتواند از این کلمه عبور استفاده کند
# chage -M 30 -m 5 -W 5 amir
این دستور میگوید که کاربر امیر به مدت یکماه یا 30 روز از این پسورد میتواند استفاده کند و یک
هفته قبل از انقضا پسورد به او اطلاع داده خواهد شد .
گزینه ها :
M- ماکزیمم روزی که این کلمه رمز اعتبار دارد
m- می نیمم روز
W- تعداد روز قبل از اینکه کلمه رمز منقضی شود و به کاربر اطلاع داده میشود .

  • lock و unlock کردن کاربران

یکی از موارد خوب امنیتی جهت جلوگیری از ورود و لاگین کردن کاربران به سیستم lock و unlock
کردن آن می باشد .
مثلا اگر میخواهید کاربر مورد نظر برای مدتی نتواند به سیستم متصل شود اما اطلاعات او در سیستم
محفوظ بماند از دستور
# passwd -l username
استفاده میکنیم . این دستور باعث میشود که در فایل /etc/shadow/ که کلمات عبور کاربران بصورت
رمز شده نگهداری میشود
بجای کلمه عبور فقط حرف “!” قرار گیرد . در این صورت اگر زمانی کاربری که او را lock کرده ایم
بخواهد وارد سیستم شود با خطای
account is currently not available
مواجه خواهد شد .
به منظور بازگردانی کاربر از حالت lock به unlock از دستور
# passwd -u username
استفاده میکنیم

118فایل