نکات امنیتی استفاده از سرورهای لینوکس
ایمنسازی سرورهای لینوکس جنبه های مثبت مختلفی در جهت محافظت دادهها، مالکیت معنوی و سایر موارد دارد. مدیر سیستم مسئول بررسی و تامین مقدمات امنیتی سیستم است.
در قسمت اول این مطلب ما 10 نکته امنیتی مهم برای نصب سیستم لینوکس را ارائه میدهیم.
بایستی توجه داشته باشید که دستوراتی که در ادامه به آن ها اشاره میکنیم با ورژنهای Ubuntu/Debian و CentOS/RHEL لینوکس سازگاری دارند.
1- رمزگذاری ارتباط دادهها برای سرور لینوکس:
تمامی دادههایی که در طول شبکه انتقال پیدا میکنند قابل نظارت کردن هستند و همینطور میتوانید این دادهها را به وسیله پسورد و یا certificate مخصوص، رمزگذاری کنید. به چند نمونه از این روشها اشاره میکنیم.
• برای انتقال فایل میتوانید از دستورهای ssh، scp، rsync و یا sftp استفاده کنید. همچنین با استفاده دستور sshf میتوانید فایلهای سرور ریموت و یا دایرکتوری خود را mount کنید.
• GnuPG به شما اجازه میدهد تا دادهها و ارتباطات خود را با استفاده از یک سیستم مدیریت کلیدی متنوع و همچنین دسترسی به ماژولهای مختلف دایرکتوری کلیدهای عمومی رمزگذاری کنید.
• نصب و استفاده از Apache SSL
• نصب و استفاده از Lighttpd SSL
2- استفاده از سرویسهای FTP، Telnet را بر روی لینوکس متوقف کنید:
تحت اکثر تنظیمات شبکه، نام کاربری، رمز عبور، دستورات rsh، telnet، FTP و همینطور فایلهای منتقل شده توسط هر شخصی در همان شبکه قابل ضبط هستند. راه حل متداول برای رفع این مشکل استفاده از OpenSSH، SFTP و یا FTPS است که رمزگذاری SSL یا TLS را به FTP اضافه میکنند.
برای این منظور به شکل زیر از دستور yum استفاده کنید:
yum erase xinetd ypserv tftp-server telnet-server rsh-server#
اگر از سرور لینوکسی بر پایه ی اوبونتو/دبیان استفاده میکنید، از دستور زیر برای حذف سرویس های نا امن استفاده کنید:
sudo apt-get --purge remove xinetd nis yp-tools tftpd atftpd tftpd-hpa telnetd rsh-server rsh-redone-server$
3- برای حداقلسازی آسیب به لینوکس از نصب نرم افزارهای اضافه خودداری کنید:
برای جلوگیری از آسیب پذیری به نرم افزار از نصب نرم افزارهای غیرضروری خودداری کنید. از سیستمهای مدیریت بسته RPM مانند Yum و apt-get و dpkg برای بررسی و مرور بستههای نصب شده بر روی سیستم خود استفاده کنید.برای پاک کردن پکیج های غیر ضروری، مانند دستور زیر عمل کنید:
yum list installed#
yum list packageName#
yum remove packageName#
یا
dpkg --list#
dpkg --info packageName#
apt-get remove packageName#
4- کرنل لینوکس خود را آپدیت نگه دارید:
استفاده از پچهای امنیتی یکی از مهمترین بخشهای حفظ و نگهداری سرورهای لینوکس است. لینوکس تمام ابزارهای لازم برای به روزرسانی سیستم شما را فراهم میکند و همچنین امکان استفاده آسان بین نسخه ها را نیز فراهم میکند.
همه به روزرسانیهای امنیتی باید در اسرع وقت بررسی و اعمال شوند، برای این منظور بایستی از دستورات yum و یا apt-get استفاده کنید.
yum update#
یا
apt-get update && apt-get upgrade#
5- حسابهای کاربری لینوکس و استفاده از رمز عبور قوی برای آنها:
از دستورات useradd/usermod برای ایجاد و نگهداری حسابهای کاربری استفاده کنید؛ همچنین اطمینان حاصل کنید که از یک رمز عبور قوی استفاده میکنید. به عنوان مثال یک رمز عبور خوب شامل 8 کاراکتر و ترکیبی از اعداد و کاراکترها و حروف بزرگ و کوچک است.
برای یافتن رمز عبورهای ضعیف میتوانید از ابزاری مانند “John the ripper” استفاده کنید.
6- تنظیم رمز عبور مدتدار برای کاربران لینوکس در جهت امنیت بهترسیستم:
دستور change command تاریخ بین تغییر پسورد، از اولین پسورد تنظیم شده تا اخرین پسورد را اندازه گیری کرده و تغییر میدهد. سیستم از این اطلاعات برای تعیین کردن زمان تغییر پسورد توسط کاربر استفاده میکند.
7- محدودسازی استفاده از رمزهای عبور قبلی در لینوکس:
میتوانید از استفاده مجدد پسورد توسط کاربران جلوگیری کنید. با استفاده از پارامتر pam_unix میتوانید استفاده مجدد از پسوردهای قدیمی را محدود کنید.
8- میتوانید از دستور faillog برای نمایش سوابق عدم ورود موفق به سیستم و یا محدود کردن ورود ناموفق به سیستم، استفاده کنید:
دستور faillog محتوای failure log را از آدرس var/log/faillog database/log file فرمت میکند. همچنین میتوانید برای ذخیره تعداد ورودهای ناموفق به سیستم از آن استفاده کنید. برای دیدن تلاش های ناموفق ورود به سیستم مانند زیر عمل کنید:
Faillog
برای باز کردن قفل حساب پس از عدم موفقیت در ورود به سیستم، دستور زیر را اجرا کنید:
faillog -r -u userName
توجه داشته باشید که میتوانید از دستور passwd برای قفل کردن و باز کردن حسابها استفاده کرد:
# lock Linux account
passwd -l userName
# unlock Linux account
passwd -u userName
9- چگونه اطمینان حاصل کنیم که هیچ اکانتی پسورد خالی ندارد:
دستور زیر را اجرا کنید:
# awk -F: '($2 == "") {print}' /etc/shadow
برای قفل کردن همهی حساب ها با رمز عبور خالی:
# passwd -l accountName
10- چگونه اطمینان حاصل کنیم که هیچ اکانتی غیر از Root مقدار UID برابر 0 ندارد:
فقط اکانت root دارای UID برابر 0 و مجوز کامل برای دسترسی به سیستم است. دستور زیر را اجرا کنید تا همه اکانتها با UID=0 نمایش داده شوند:
# awk -F: '($3 == "0") {print}' /etc/passwd
در ادامه باید تنها یک خط مانند زیر ببینید:
root:x:0:0:root:/root:/bin/bash
اگر خطوط دیگری را مشاهده میکنید آن ها را حذف کنید.
11- غیرفعال کردن سرویسهای غیر ضروری:
همه خدمات غیرضروری و سرویسهایی که در پس زمینه اجرا میشوند را متوقف کنید، تمام سرویس هایی که در start-up اجرا میشوند را متوقف کنید. دستور زیر را اجرا کنید تا تمام سرویسهایی که در بوت اجرا میشوند را ببینید.
chkconfig --list | grep '3:on'#
برای متوقف کردن سرویسها دستور زیر را اجرا کنید:
service serviceName stop#
chkconfig serviceName off#
برای خاموش کردن یک سرویس در هنگام بوت از دستور زیر استفاده کنید:
systemctl disable service#
systemctl disable httpd.service#
برای شروع، توقف، ریاستارت کردن سرویس از دستور زیر استفاده کنید:
systemctl disable service#
systemctl disable httpd.service#
برای گزارش وضعیت سرویس از دستور زیر استفاده کنید:
systemctl status service#
systemctl status httpd.service#
برای دریافت گزارشات لاگ، از دستور زیر استفاده کنید:
journalctl#
journalctl -u network.service#
journalctl -u ssh.service#
journalctl -f#
journalctl -k#
12- پورتهای باز شبکه را پیدا کنید. (Listening Ports):
از دستور زیر برای نمایش تمام پورتها و برنامههای متصل استفاده کنید:
netstat -tulpn
یا از دستور SS به همین منظور:
$ ss -tulpn
و یا:
nmap -sT -O localhost
nmap -sT -O server.example.com
13- از SUID و SGID های غیرضروری جلوگیری کنید:
زمانی که فایل های SUID و SGID مشکلی دارند ممکن است با مشکلات امنیتی و باگ های سیستمی رو به رو شوید، بروز این مشکلات برای تمام کاربرانی که با سیستم کار میکنند امکان پذیر است در نتیجه پیشنهاد میکنیم برای پیدا کردن این مشکلات از دستور زیر استفاده کنید:
#See all set user id files:
find / -perm +4000
# See all group id files
find / -perm +2000
# Or combine both in a single command
find / \( -perm -4000 -o -perm -2000 \) -print
find / -path -prune -o -type f -perm +6000 -ls
14- پیدا کردن فایل های World-Writable:
فایل های world-writable میتوانند تبدیل به یک مشکل امنیتی شوند، از دستور زیر برای پیدا کردن این فایل ها استفاده کنید:
find /dir -xdev -type d \ (-perm -0002 -a! -perm -1000 \) -print
بعد از این میتوانید مقادیری که میخواهید را نگه داشته و بقیه را حذف کنید.
15- فایل هایی که مربوط به هیچ کاربری نمیشوند را پیدا کنید:
فایل هایی که توسط کاربر یا گروهی اداره نمیشوند ممکن است به مشکلات امنیتی بیانجامد، این فایل ها را با استفاده از دستور زیر پیدا کنید:
find /dir -xdev \ (-nouser -o -nogroup \) -print
بعد از اینکه این فایل ها را پیدا کردید، بایستی آن را به یک کاربر یا گروه خاص اختصاص داده یا آن را حذف کنید.
16- دستگاه های USB، Firewire، thunderbolt را غیرفعال کنید:
برای غیرفعال کردن دیوایس های USB از دستور زیر استفاده کنید:
echo 'install usb-storage /bin/true' >> /etc/modprobe.d/disable-usb-storage.conf#
همچنین برای غیرفعال کردن ماژول های firewire و thunderbolt، از دستور زیر استفاده کنید:
echo "blacklist firewire-core" >> /etc/modprobe.d/firewire.conf#
echo "blacklist thunderbolt" >> /etc/modprobe.d/thunderbolt.conf#
پس از انجام دادن این کار کاربران نمیتوانند داده های حساس را به سرعت در دستگاه های USB کپی کرده و یا بدافزار یا ویروس را بر روی سیستم لینوکس نصب کنند.
17- سرویس هایی که از آن ها استفاده نمیکنید را غیر فعال کنید:
میتوانید سرویس هایی که از آن استفاده ای نمیشود را با استفاده از دستور زیر غیر فعال کنید:
sudo systemctl stop service $
sudo systemctl disable service $
به عنوان مثال، اگر نمیخواهید مدتی از سرویس NginX استفاده کنید، آن را غیرفعال کنید:
sudo systemctl stop nginx $
sudo systemctl disable nginx $
18- امن سازی سرور Apache، PHP، Nginx:
فایل httpd.conf را ادیت کرده و مقادیر زیر را اضافه کنید:
ServerTokens Prod
ServerSignature Off
TraceEnable Off
Options all -Indexes
Header always unset X-Powered-By
برای ری استارت کردن سرویس های hhtpd/apache2 بر روی لینوکس، دستور زیر را اجرا کنید:
sudo systemctl restart apache2.service $
و یا :
sudo systemctl restart httpd.service $
چنانچه موارد فوق را برای VPS لینوکسی خود انجام دادهاید، میتوانید از ابزار OpenSCAP برای بررسی امنیت سرور مجازی خود استفاده کنید.