داکر چگونه از فناوری‌های امنیتی لینوکس استفاده می‌کند

مدل امنیتی داکر بر پایه دفاع چندلایه ساخته شده و فناوری‌های شناخته‌شده kernel لینوکس را با تنظیمات پیش‌فرض معقول ترکیب می‌کند. این مقاله توضیح می‌دهد که namespaceها، control groupها، capabilityها، Mandatory Access Control و seccomp چگونه در کنار هم کانتینرها را ایزوله و ایمن می‌کنند.

Namespaceلینوکس, Cgroupsامنیت کانتینر

~4 دقیقه مطالعه · آخرین به‌روزرسانی ۱۴ شهریور ۱۴۰۵

مقدمه

امنیت خوب بر لایه‌ها متکی است، و داکر امنیت خود را بر پایه ترکیبی از فناوری‌های شناخته‌شده kernel لینوکس بنا می‌کند، که هرکدام با تنظیمات پیش‌فرض معقول از قبل آماده شده‌اند. این لایه‌ها شامل kernel namespaces، control groups، capabilities، Mandatory Access Control و seccomp هستند.

Namespaceهای Kernel

Namespaceها فناوری اصلی پشت کانتینرها هستند. برخلاف hypervisorها که سخت‌افزار فیزیکی مانند CPU و دیسک را مجازی‌سازی می‌کنند تا ماشین‌های مجازی بسازند، namespaceها اجزای سیستم‌عامل — درخت‌های فرآیند، فایل‌سیستم‌ها و رابط‌های شبکه — را مجازی‌سازی می‌کنند تا چیزی بسازند که مانند یک سیستم‌عامل معمول و ایزوله رفتار کند.

هر کانتینر نمونه اختصاصی خود را از شش نوع namespace دریافت می‌کند:

  • Process ID (pid) — درخت فرآیند ایزوله‌ای به هر کانتینر می‌دهد، که از PID 1 شروع می‌شود
  • Network (net) — یک پشته شبکه ایزوله، شامل رابط‌ها و آدرس‌های IP اختصاصی فراهم می‌کند
  • Mount (mnt) — به هر کانتینر یک فایل‌سیستم ریشه ایزوله می‌دهد
  • Inter-process Communication (ipc) — دسترسی به حافظه مشترک را ایزوله می‌کند
  • User (user) — امکان نگاشت کاربران داخل کانتینر به کاربران متفاوت روی هاست را فراهم می‌کند
  • UTS (uts) — یک hostname اختصاصی به هر کانتینر می‌دهد

Namespaceها ایزوله‌سازی سبک‌وزنی فراهم می‌کنند، اما به‌تنهایی یک مرز امنیتی قوی محسوب نمی‌شوند — به همین دلیل داکر فناوری‌های اضافی روی آن‌ها لایه‌بندی می‌کند.

Control Groups

در حالی که namespaceها ایزوله‌سازی را مدیریت می‌کنند، control groups (cgroups) محدودیت‌های منابع را مدیریت می‌کنند. کانتینرهای روی یک هاست مشترک، منابع زیرینی مانند CPU، RAM و I/O دیسک را به اشتراک می‌گذارند، شبیه اتاق‌های یک هتل که آب و برق مشترک دارند. cgroupها از انحصار این منابع مشترک توسط یک کانتینر واحد جلوگیری می‌کنند که می‌تواند باعث یک وضعیت denial-of-service برای دیگران روی همان هاست شود.

Capabilities

اجرای کانتینرها با کاربر root لینوکس ریسک‌آور است، اما کاربران غیر-root اغلب به‌اندازه‌ای محدودند که عملاً بی‌فایده می‌شوند. Capabilityها این مشکل را با تقسیم مجوزهای root به فهرستی طولانی از قدرت‌های قابل‌اعطای جداگانه حل می‌کنند — مانند CAP_NET_BIND_SERVICE برای اتصال به پورت‌های کم‌شماره، یا CAP_CHOWN برای تغییر مالکیت فایل.

داکر می‌تواند یک کانتینر را با کاربر root شروع کند، تمام capabilityها را حذف کند و فقط موارد خاص موردنیاز آن را دوباره اضافه کند — پیاده‌سازی عملی اصل حداقل امتیاز (Principle of Least Privilege). داکر با capabilityهای پیش‌فرض معقول عرضه می‌شود، هرچند محیط‌های تولیدی اغلب از سفارشی‌سازی بیشتر بهره می‌برند.

Mandatory Access Control

داکر با سیستم‌های اصلی Mandatory Access Control (MAC) لینوکس مانند AppArmor و SELinux یکپارچه می‌شود و بسته به توزیع هاست، یک پروفایل پیش‌فرض روی هر کانتینر جدید اعمال می‌کند. این پیش‌فرض‌ها به دنبال محافظت متعادل بدون شکستن سازگاری اپلیکیشن‌ها هستند، هرچند برای محیط‌های سخت‌گیرانه‌تر می‌توان سیاست‌های سفارشی تعریف کرد.

Seccomp

seccomp محدود می‌کند که یک کانتینر مجاز به فراخوانی کدام syscallها — مکانیزمی که اپلیکیشن‌ها برای درخواست اقدامات از kernel استفاده می‌کنند — است. از بیش از ۳۰۰ syscall لینوکس، پروفایل پیش‌فرض داکر حدود ۴۰ تا ۵۰ مورد از خطرناک‌ترین آن‌ها را غیرفعال می‌کند، که باز هم تعادلی بین امنیت و سازگاری گسترده برقرار می‌کند. پروفایل‌های سفارشی seccomp امکان‌پذیرند، اما با توجه به اندازه جدول syscall، پیکربندی صحیح آن‌ها می‌تواند پیچیده باشد.

نتیجه‌گیری

در کنار هم، namespaceها، cgroupها، capabilityها، سیستم‌های MAC و seccomp، یک وضعیت امنیتی چندلایه (defense-in-depth) برای هر کانتینری که داکر اجرا می‌کند تشکیل می‌دهند. هیچ‌کدام از این فناوری‌ها به‌تنهایی امنیت کامل ارائه نمی‌دهد، اما ترکیب آن‌ها — که با تنظیمات پیش‌فرض معقول و آزموده‌شده پشتیبانی می‌شود — یک پایه امنیتی نسبتاً قوی به داکر با کمترین تلاش پیکربندی می‌دهد.

نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

مقالات مرتبط

مدیریت داده‌های ماندگار در داکر با Volume

کانتینرها به‌طور پیش‌فرض یک لایه نوشتنی موقت دریافت می‌کنند که با حذف کانتینر از بین می‌رود — این برای داده‌های موقتی خوب است، اما برای هر چیزی که ارزش نگهداری دارد ریسک‌آور است. این مقاله توضیح می‌دهد که volumeهای داکر چگونه داده‌های ماندگار را از چرخه حیات کانتینر جدا می‌کنند و نحوه ساخت، استفاده و اشتراک‌گذاری امن آن‌ها را بررسی می‌کند.

ادامه

شبکه‌های Overlay در داکر چگونه کار می‌کنند؛ نگاهی به VXLAN

شبکه‌های overlay امکان می‌دهند کانتینرهای روی هاست‌های مختلف طوری با هم ارتباط برقرار کنند که گویی یک شبکه مسطح مشترک دارند، و ستون فقرات بیشتر اپلیکیشن‌های میکروسرویس ابرمحور را تشکیل می‌دهند. این مقاله نحوه ساخت، رمزنگاری و تست یک شبکه overlay داکر روی یک کلاستر Swarm را بررسی کرده و فناوری تونل‌زنی VXLAN پشت آن را توضیح می‌دهد.

ادامه

اتصال کانتینرهای داکر به VLAN و توزیع بار با Swarm

فراتر از شبکه‌های ساده bridge، داکر امکاناتی برای اتصال مستقیم کانتینرها به VLANهای فیزیکی موجود، تفکیک خودکار نام سرویس‌ها و توزیع ترافیک در سراسر یک کلاستر Swarm ارائه می‌دهد. این مقاله درایور macvlan، سرویس داخلی Service Discovery و مکانیزم Ingress Load Balancing در Swarm را بررسی می‌کند.

ادامه

شبکه‌سازی در داکر؛ آشنایی با CNM، Libnetwork و شبکه‌های Bridge

شبکه‌سازی در داکر بر پایه یک طراحی باز به نام Container Network Model ساخته شده که توسط libnetwork پیاده‌سازی و با درایورهای قابل‌جایگزینی گسترش می‌یابد. این مقاله تئوری پشت شبکه داکر را بررسی کرده و نحوه ساخت و تست شبکه‌های bridge تک‌هاست، از جمله تفکیک نام و نگاشت پورت را توضیح می‌دهد.

ادامه

استقرار و مدیریت کلاستر چندنودی با Docker Swarm

Docker Swarm گروهی از نودهای داکر را به یک کلاستر امن و بسیار در دسترس با قابلیت ارکستریشن داخلی تبدیل می‌کند. این مقاله ساخت یک swarm چندنودی، استقرار یک اپلیکیشن میکروسرویس به‌صورت اعلانی و انجام به‌روزرسانی‌های تدریجی بدون از دست دادن سازگاری با وضعیت مطلوب را بررسی می‌کند.

ادامه

ساخت و اجرای اپلیکیشن‌های WebAssembly به‌عنوان کانتینر داکر

WebAssembly (Wasm) به‌عنوان جایگزینی سبک‌وزن برای کانتینرهای سنتی در حال ظهور است، و داکر اکنون از ساخت، اشتراک‌گذاری و اجرای اپلیکیشن‌های Wasm با ابزارهای آشنا پشتیبانی می‌کند. این مقاله نوشتن یک اپلیکیشن ساده Wasm با Spin، کانتینری کردن آن با داکر و اجرای آن به‌عنوان کانتینر Wasm را بررسی می‌کند.

ادامه