خرداد 30, 1399Security Enhanced Linux
امنیت در دیدگاه سنتی عبارت است از ایجاد محدودیت در کاربر ها و یا فایل ها بواسطه تعیین permission و همچنین راه اندازی یک دیوار آتش ( Firewall ) جهت نظارت بر ارتباطات شبکه ای یک سیستم. آیا بهتر نبود سیستمی سطوح دسترسی نرم افزار ها و فایل ها و یا تغییر آنها را کنترل می کرد؟ چه اتفاقی خواهد افتاد اگر یک کاربر فایل کلید امنیتی SSH را به اشتباه برای عموم قابل خواندن کند؟
Selinux کوتاه شده عبارت Security-Enhanced Linux به معنی لینوکس با امنیت بهبود یافته است. این ماژول کرنل ( Kernel ) در 22 دسامبر سال 2000 توسط آژانس ملی امنیت آمریکا و تحت لایسنس GPL توسعه داده شد و هدف آن بهبود امنیت کلی سیستم عامل لینوکس بود. سیستم نظارتی selinux از نوع MAC می باشد که کوتاه شده عبارت mandatory access control ( کنترل دسترسی اجباری ) است. در این سامانه ، سیستم عامل دسترسی های سیستمی را کنترل کرده و در مواردی که امنیت در خطر باشد ، محدودیت هایی را اعمال می کند. به عنوان مثال :
سطوح دسترسی های لینوکس
- Administrator ها هیچ راهی برای کنترل کاربر ها ندارند. شرایطی را متصور شوید که کاربر می تواند به فایل های حساس سیستمی مانند کلید SSH و یا پوشه های حاوی آنها دسترسی خواندن همگانی بدهد. مثلا /ssh./~
- پردازش ها می توانند سطوح دسترسی را تغییر دهند. فایل های ایمیل یک کاربر تنها باید توسط او قابل خواندن باشد. ولی نرم افزار mail client می تواند دسترسی خواندن عمومی به این فایل ها بدهد.پردازش ها سطوح دسترسی کاربران اجرا کننده آنها را به ارث می برند. به عنوان مثال مرورگر اینترنتی در اثر آلوده شدن با یک بدافزار می تواند کلید SSH محرمانه کاربر را بخواند. هر چند توجیه و نیازی برای این رفتار وجود ندارد.
- توسعه سلینوکس از نسخه 2.6 کرنل در سال 2003 در حوزه کاری تیم توسعه اصلی هسته لینوکس به سرپرستی لینوس توروالدز ادغام شد. هم اکنون سلیونکس در بسیاری از توزیع های لینوکسی بصورت پیشفرض وجود دارد. اولین توزیع لینوکسی که بصورت پیشفرض از selinux استفاده کرد RedHat نسخه 4 بود.Selinux سه مد ( mode ) کاری دارد:
Enforcing
این حالت پیشفرض سلینوکس است و نصب آن بر روی همین مد است. در این شرایط سیاست های امنیتی selinux بر روی سیستم اعمال می شود ، دسترسی های غیر مجاز ممنون و فعالیت ها در قالب لاگ ثبت می شود.
Permissive
در این حالت selinux فعال است ولی سیاست های آن الزام آور نبوده و تنها به اخطار دادن و ثبت ریز فعالیت ها بسنده می کند. این مد بیشتر برای عیب یابی و بررسی رفتار selinux مناسب است.
Disabled
در این حالت selinux خاموش است. بواسطه دستور sestatus می توان وضعیت selinux را بر روی سیستم بررسی نمود. تنظیمات selinux در فایل زیر قابل مشاهده است:
/etc/selinux/config
با اعمال تغییر در =SELINUX می توان حالت کلی selinux را از لحظه بوت تعیین کرد. همچنین در زمان کارکرد سیستم عامل می توان با دستور setenforce وضعیت کاری selinux را تغییر داد. گزینه های قابل استفاده در مقابل setenforce عبارتند از:
- Enforcing یا 1 جهت قرار دادن در وضعیت Enforcing
- Permissive جهت قرار داده در وضعیت عیب یابی
- 0 جهت خاموش کردن
جهت استفاده بهینه از Selinux نیاز به دانش مدیریت آن است. بدلیل ضعف دانش مدیران سرور در این حوزه ، غیر فعال کردن آن را که ساده ترین گزینه است ترجیح می دهند. البته در نادر مواردی بدون ایجاد ریسک می توان اقدام به غیرفعال کردن آن نمود که طبیعتا دانش و اشراف بالای مدیر آن سرور را طلب می کند.
بعد از توضیحات مقدماتی فوق میرسیم به بخش مهم این مطلب آموزشی و در واقع هدف اصلی که این پست رو در سایت قرار دادم ، یعنی کلیپ 3 قسمتی از استاد ویقت فرانسوی . لیست دستورات استفاده شده در این کلیپها هم قراردادم ، کلیپها هم به زبان انگلیسی روان هست.
دستورات اجرا شده در کلیپهای فوق :
Agenda
*what is Selinux and how does it work?
*Important task #1 :working with labels
*Understanding Booleans
*Analyzing Selinux behavior
*Fixing selinux problems
*case study
getenforce
vim /etc/sysconfig/selinux
setenforce
cd /
ls -Z
ps -Zaux
yum install httpd -y
cd /var/www
ls -Z
semanage fcontext -l
semanage fcontext -l |grep httpd
#generate manpage
man -k _selinux
yum whatprovides */sepolicy
yum -y install policycoreutils-devel
sepolicy --help
man sepolicy
man sepolicy-manpage
cd /usr/share/man
ls
sepolicy manpage -a -p /usr/share/man/man8
man -k _selinux
man apropos
mandb
man -k _selinux
man httpd_selinux
cd /var/www
ls -Z
man semanage-fcontext
mkdir /web
vim /web/index.html
hello from myweb
vim /etc/httpd/conf/httpd.conf
DocumentRoot "/web"
<Directory "/web">
AllowOverride None
Require all granted
</Directory>
<Directory "/web">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
systemctl restart httpd
yum -y install elinks
elinks http://localhost
tailf /var/log/audit/audit.log
grep AVC /var/log/audit/audit.log
semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"
restorecon -R -v /web
elinks http://localhost
Understanding booleans
*listing them
*showing more details
*setting them persistently
getsebool -a
semanage boolean -l
man -k _selinux | grep ftp
man ftpd_selinux
getsebool -a | grep ftp
sesearch -b ftpd_anon_write -ACT
sesearch -b ftpd_anon_write -ACT | grep -v type_transit
setsebool -P ftpd_anon_write on
منابع
https://pentestcore.com/selinux-modules/
https://parspack.com/blog/hosting/server/selinux
https://linux-zone.org/forums/%D8%A7%D9%86%D8%AC%D9%85%D9%86-%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-linux-forum/%D8%AA%D9%88%D8%B2%DB%8C%D8%B9-%D9%87%D8%A7%DB%8C-%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-linux-distributions/general-linux/26095-selinux-%DA%86%DB%8C%D8%B3%D8%AA-%D8%9F-%D8%A8%D8%AE%D8%B4-%D8%A7%D9%88%D9%84
آموزش SELinux در CentOS 7 – بخش اول: مفاهیم پایه
https://www.electronicdesign.com/technologies/embedded-revolution/article/21807408/dont-do-it-disabling-selinux