محمدرضا حقیری | Muhammadreza Haghiri
محمدرضا حقیری | Muhammadreza Haghiri
خواندن ۷ دقیقه·۴ سال پیش

لینوکس، امن نیست.

چنانچه پست‌های تخصصی من رو خونده باشید، بیش‌تر اون‌ها حول محور لینوکس می‌چرخند. سیستم‌عاملی که از ده سال پیش، ترجیح و انتخاب من برای هرکاری بوده (و بعضی‌ها هم معتقدند گنو/لینوکس اسم درستشه؛ من برای کوتاه شدن ماجرا میگم لینوکس. پس خواهشا جنگ اسم رو شروع نکنید که جنگ بزرگتری در پیشه!). لپتاپ من، همین الان که دارم این مطلب رو می‌نویسم نسخه development از Ubuntu رو اجرا می‌کنه. یک سیستم عامل با هسته لینوکس، فضای کاربر GNU و کلی ابزار دیگر که افراد زیادی از سراسر دنیا، توسعه دادند.

این سیستم عامل، به خودی خود با ساختاری که ارائه کرده از سیستم‌عامل ویندوز امنیت بیشتری رو به همراه داره. مثال خیلی ساده بخوام بزنم، اینه که بدافزارهایی که به نام «ویروس» می‌شناسیم، نمی‌تونن روی لینوکس (یا هر سیستم‌عامل دیگری با ساختار یونیکسی) اجرا بشن و خرابکاری کنند. گرچه بدافزارها همه‌جا هستند و نمیشه از وجودشون غافل شد.

اما داستان این پست چیه؟ داستان این پست بر می‌گرده به اتفاقی که چند روز پیش برای من افتاد. با من همراه بشید تا یک خاطره بگم و کمی مقایسه انجام بدم.

چند روز پیش، من بالاخره تونستم یک سرور با سیستم عامل FreeBSD تهیه کنم. بعد از مکافات فراوان داشتن، تونستم بهش متصل بشم (حالا این داستان که تامین‌کننده سرور، خودش نمی‌تونست پیکربندی لازم رو روی سیستم‌عامل داشته باشه رو بعدها شاید تعریف کنم) و کاربرم رو ساختم.

از فایل id_rsa.pub که روی لپتاپم بود، یک کپی گرفتم و در پوشه :

~/.ssh

در قالب یک فایل با نام authorized_keys اون رو ذخیره کردم. از سرور خارج شدم و دوباره با SSH متصل شدم. حرفی که به من زد این بود:

«علیرغم این که شما کلید خودتون رو اضافه کردید، اما مجوز اون فایل طوریه که خیلیا میتونن بهش دسترسی داشته باشن. لطفا مجوز بهتری روی اون فایل قرار بدید».

گرچه می‌دونستم authorized_keys معمولا مجوز شماره ۴۰۰ باید داشته باشه، اما در فعالیت‌های قبلی در سرورهای لینوکسی، هیچوقت چنین اروری دریافت نکرده بودم. این من رو خیلی به فکر فرو برد. ترجیح دادم در قالب این مطلب، در مورد این قضیه توضیح بدم.

همه‌پسندی یا حرفه‌ای‌پسندی؟

موضوع دوستی با کاربر، الزامی در «همه‌پسند» بودن اون ایجاد نمی‌کنه هیچوقت. اما یک چیزی برای من سوال شد، این بود که چرا تقریبا همه سرورهای لینوکسی که داشتم - فارغ از توزیع - هیچوقت انقدر اهمیت ندادن به این که کلید من، مجوزش فلانه؟ این دو حالت داره :

  • یا فکر می‌کنن شما اونقدر حرفه‌ای هستید که خودتون بدونید
  • یا فکر می‌کنن نیازی نیست اونقدرها هم به کاربر سخت گرفت!

حالت اول اشتباهه، چرا که لینوکس خیلی وقته اون شکل «سیستم‌عامل هکری» رو به خودش نمی‌گیره و در خیلی موارد، حتی افرادی که معمولا در استفاده از ویندوز هم ناتوانن، سراغش میرن. استفاده خیلی از آشنایان غیرکامپیوتری من از اوبونتو یا لینوکس مینت، گواهی بر این ادعاست.

حالت دوم به شدت اشتباه‌تره. اوبونتو گرچه روی دسکتاپ، خیلی از موارد امنیتی رو میتونه رعایت نکنه و اون رو به کاربر واگذار کنه که با توجه به سطح سوادش و حساسیتش روی اطلاعات شخصی، اونا رو لحاظ کنه؛ اما روی سرور ماجرا تا حد زیادی متفاوت میشه. پیش‌فرض سرور باید اینطور باشه که «بالاترین سطوح امنیتی ممکن» همیشه فراهم بشن. این، کاریه که در سیستم‌عامل‌های خانواده BSD مثل FreeBSD و OpenBSD میشه.

لینوکس (حالا هر توزیعی، به جز موارد محدود) معمولا Secure-By-Default نیست چون کارکرد دسکتاپش مختل میشه تا حد زیادی (تازه لازمه ذکر کنم اگر با اونایی که Secure-By-Default هستند کار کرده باشید این قضیه رو درک می‌کنید). اما BSDها - مثل OpenBSD - به این شکل عرضه میشن. حتی روی سطوح بالاتر، اتفاقاتی میفته که امن‌تر هم بشن. مثلا HardenedBSD به این شکله که مقدار زیادی از تنظیمات امنیتی FreeBSD رو روی کد اعمال کرده و حتی اون رو امن‌تر از پیش کرده.

کل حرف اینه، لینوکس به صورت پیش‌فرض امن نیست. حواستون به کارهایی که می‌کنید باشه. در ادامه نکاتی رو مطرح می‌کنم که شاید به دردتون بخوره و بتونه بهتون در درک بهتر امنیت سیستم عاملی که استفاده می‌کنید؛ کمک کنه.

نکات مهم در انتخاب سیستم عامل و سرویس

  • حتما از فایل‌های مهمتون پشتیبان تهیه کنید. در BSD ها با Snapshot گرفتن از فایل‌سیستم، می‌تونید به سادگی چنین کاری کنید. در لینوکس هم حتما ابزارهایی برای این کار ارائه شدند.
  • برای سرویس‌ها و برنامه‌هایی که نیاز به Docker دارند، ترجیحا از لینوکس استفاده کنید. عمده توسعه‌دهندگان، ترجیح میدن پایه تصاویر داکر خودشون رو لینوکس قرار بدن (عمدتا هم Alpine Linux). چرا که معمولا اون برنامه، روی لینوکس توسعه داده شده و سازگاریش - از نظر توسعه‌دهنده - با لینوکس بیشتر بوده.
  • برای سرویس‌های حساس، از لینوکس استفاده نکنید. قبل از این که این مطلب رو بخوام بنویسم، دوست عزیزی با من صحبت می‌کرد و می‌گفت که معمولا سرویس mail رو روی FreeBSD بالا میاره. به نظر من هم این انتخاب، نسبت به لینوکس عاقلانه‌تر میتونه باشه. گذشته از امنیتی که در پایه وجود داره میشه به پیاده‌سازی‌های پروتکل‌ها در BSD بیشتر اعتماد کرد. برای مثال، تیم OpenBSD هم برای SSL و هم SMTP پیاده‌سازی‌های خوبی ارائه دادند (در این حد که حتی در حال حاضر همه توزیع‌های لینوکس از پیاده‌سازی SSL که OpenBSD ارائه کرده استفاده می‌کنند). سرویس‌هایی مثل ایمیل، ویدئو کنفرانس و ... رو ترجیحا روی BSD ها ارائه کنید.
  • برای نگهداری از یک وبسایت وردپرسی، یک فروم با phpBB یا هرچیزی مشابه این، اصلا سمت سرور خریدن نرید. نگهداری از سرور کار ساده‌ای نیست و وقت و هزینه‌ای که می‌بره خیلی زیاده. از میزبانی اشتراکی اگر استفاده کنید، احتمالا نتیجه بهتری می‌گیرید.
  • برای استقرار و یکپارچه‌سازی تا حد امکان از ابزارهای آماده‌ای مثل PaaS ها استفاده کنید. باز هم به همون دلیلی که عرض کردم. یه PaaS ممکنه هزینه ماهانه داشته باشه و هزینه بالا هم باشه نسبتا، اما خیالتون راحته که دردسر سرور و نگهداری ازش، گردن یکی دیگه‌ست. کما این که خیلی از PaaS ها یک سری از برنامه‌ها رو به صورت آماده روی marketplace هاشون ارائه میدن (مثلا با یک کلیک، شما میتونید یک Git Lab داشته باشید و ... ).

حالا چرا لینوکس امن نیست؟

حقیقتا این عنوان، عنوان جنجال‌برانگیزیه. امن بودن یا نبودن، حتی در سیستم‌عامل‌ها و ابزارهای secure-by-default یک امر نسبیه. امنیت در شبکه و ... هم هیچوقت ۱۰۰٪ نیست و همیشه نسبی تامین میشه. موضوع مهم، اینه که سیستم از پایه چطور ساخته بشه و نگهدارنده‌های اون، چطور باهاش برخورد کنند.

متاسفانه در سال‌های اخیر، با توجه به علاقمندی‌هایی که توسط کمپانی‌های بزرگ به لینوکس نشان داده شده (مثل مایکروسافت)، «توسعه سریع» به شدت بیش از پیش در برنامه توسعه‌دهندگان لینوکس (هسته) و ابزارهای دور و برش قرار گرفته. به حدی که بعضا برای خودم سوال میشه «اینا تستش هم می‌کنن؟» یا هرچیزی شبیه به این.

در واقع بحثی که مطرحه اینه که این سخت‌شدگی (Hardening) و یا امن-پیش‌فرض بودن (secure-by-default) فدا شده تا کارکرد و پرفرمنس بهتری ارائه بشه. شاید هم همین ماجرا، باعث شده که روی لپتاپم به جای FreeBSD، یکی از توزیع‌های لینوکس نصب باشه؟ بهرحال برای داشتن یک سری چیزها، همیشه لازمه یه چیزای دیگه فدا بشن و خب حتی بهترین‌ها هم از این قاعده مستثناء نیستند.


لینوکسسیستم عاملبرنامه نویسیbsd
مهندس سخت افزاری که آهنگسازی میکنه و عاشق ادبیاته :) وبگاه شخصی : haghiri75.com
شاید از این پست‌ها خوشتان بیاید