منبع اصلی نوشتار زیر در این لینک قرار دارد

امنیت و مواردی از NFS

Network File System ویژگی اشتراک فایل ها میان تمامی سیستم عامل های مبتنی بر یونیکس مانند، لینوکس، مکینتاش، بی اس دی ها، سولاریس و حتی در ویندوز سرور 2008R2 است. NFS امکان Mount کردن یک دایرکتوری از ماشین راه دور برروی ماشین محلی و استفاده از فایل و دایرکتوری ها درون آنرا فراهم می کند. در این پست چگونگی ایجاد و پیکربندی NFS در توزیع CentOS 6 گفته شده است. همچنن در لینک های 1 و 2 اساس و مفاهیم مرتبط با آن آموزش داده شده است. در این پست جزئیاتی از کارایی و امنیت در NFS گفته خواهد شد.NFS تکنولوژی که توسط SUN Microsystem برای دسترسی به فایل تحت شبکه در سیستم عامل های یونیکسی پیاده سازی شده است.NFS در ابتدا بر روی UDP کار می کرد، اما امروزه بر روی TCP کار می کند. مزیت TCP امنیت بالاتر آن نسبت به UDP است. در TCP که ارتباط گرا است، ابتدا یک اتصال برای بررسی موارد میان دو ماشین ایجاد می شود و در صورتی که ماشین سرور قادر به پاسخ گویی باشد، یک ارتباط دائمی میان کلاینت و سرور تا مادامی که درخواست های کلاینت از سمت سرور پاسخ داده شود، ماندگار می ماند. در پایان سرور درخواست قطع ارتباط را به کلاینت می دهد. این باعث بالارفتن امنیت می شود، زیرا که هدف از TCP، این است که تمامی بسته ها میان دو ماشین بصورت کامل و با همان ترتیبی که ارسال شده به کلاینت برسد. پس TCP نسبت به UDP امنیت بیشتر ولی سرعت کمتری دارد. تا پیش از نسخه 4 NFS یا NFSv4 تمامی نسخه های NFS بصورت Stateless بودند، به این معنی که در پروتکل های Stateless، هر درخواست هیچ اطلاعاتی از درخواست های پیشین ندارد و به این معنی که هر درخواست مستقل از درخواست های قبلی است. انواع متفاوتی از سیستم فایل ها قابل دسترسی هستند که این با استفاده از یک سری API که Virtual File System گفته می شوند، انجام می گیرد. هدف اصلی از VFS، اجازه دادن به برنامه های کاربردی کلاینت برای دسترسی به انواع سیستم فایل ها در یک شکل واحد بدون آگاهی از این تفاوت ها، که در تمامی سیستم های عامل مانند ویندوز،لینوکس،مکینتاش و تمامی شبه یونیکس ها استفاده می شود. یک سیستم فایل NFS که بر روی ماشینی Mount شده است بسیار شبیه به سیستم فایل محلی همان ماشین است.VFS چیست و چگونه با NFS کار می کند؟گفتیم هدف از VFS برای دسترسی به سیستم فایل های مختلف بر روی ماشین است. مطابق شکل زیر تمام اعمال روی سیستم فایل (از طریق ماشین محلی که یک سیستم فایل راه دور بر روی آن Mount شده است)، از طریق VFS انجام می گیرد.

Option های NFS (گزینه های استفاده شده در فایل etc/exports/)

ro : مخفف Read Only که کلاینت های تنظیم شده با این گزینه، تنها دسترسی فقط خواندنی روی دایرکتوری Mount شده دارند.

rw : مخفف Read Write که کلاینت های تنظیم شده با این گزینه، دسترسی خواندن و نوشتن بر روی دایرکتوری اشتراکی را دارند.

no_root_squash : گزینه ای بسیار مهم در تنظیم یک دایرکتوری برای اشتراک گذاشتن، چونکه باعث کاهش امنیتی در سرور NFS خواهد. اگر از این گزینه استفاده می کنید باید بدانید که کاربر root روی ماشین کلاینت، روی دایرکتوری اشتراک شده، دسترسی root مطابق با root ماشین سرور را خواهد داشت و توصیه می شود که از این گزینه استفاده نکنید.

root_squash : نقطه مقابل no_root_squash است. با استفاده از این گزینه، درخواست های آمده از uid=0 و gid=0 به ک کاربر anonymous که به nobody user یا nfsnobody user شناخته می شود، نگاشت خواهد شد. یعنی دسترسی کاربر root روی ماشین کلاینت بر روی دایرکتوری Share شده، معادل با دسترسی کاربر root روی ماشین سرور نباشد و باعث افزایش امنیت خواهد شد.

sync : این گزینه باعث می شود که سرور تنها پس از نوشتن داده ها (اعمال تغییرات) کاملن تمام شد، به کلاینت پاسخ دهد. این گزینه، بعنوان پیشفرض است و اگر ننویسید، همین گزینه در نظر گرفته می شود.

async : نقطه مقابل sync است و یعنی اینکه سرور قبل از تکمیل تغییرات بر روی Storage، به در خواست های دیگر نیز پاسخ خواهد داد.

بسته های nfs-utils و portmap لازم برای پیکربندی NFS هستند. portmap نرم افزاری که به درخواست های RPC گوش می دهد و لازم در هر دو ماشین کلاینت و سرور و مورد استفاده نسخه های 1 و 2 و 3 از NFS هستند. در CentOS5 که از NFSv3 استفادع می کند، دستور زیر را برای نصب بسته های لازم اجرا کنید.

yum install nfs-utils portmap

سرویس portmap باید در هر دو ماشین کلاینت و سرور نصب باشد. یکی از مکلاتی که هنگام mount کردن دایرکتوری بر روی ماشین محلی پیش می آید، عدم فعال بودن سرویس portmap است. سرویس portmap بر روی پورت 111 هم برای TCP و هم برای UDP به در خواست ها گوش می دهد.

بر روی کلاینت با استفاده از دستور mount بصورت موقتی و با نوشتن یک خط درون فایل fstab بصورت دائمی، دایرکتوری اشتراکی را mount می کنیم.

در NFSv4 (بطور مثال در CentOS 6) می توانیم با استفاده از گزینه fsid=num می توانیم root سیستم فایل sahre شده از این سرور را اعلان کنیم.بطور مثال در خط زیر از فایل etc/exports/ دایرکتوری data/ بعنوان root است.

و می توانیم زمان mount شدن در کلایت از علامت / بجای data/ استفاده کنیم.

fsid=0 یعنی دایرکتوری data/ درون ماشین سرور بعنوان root برای زیر دایرکتوری های خودش به حساب می آید. بطور مثال اگر یک دایرکتوری به نام test درون دایرکتوری data/ وجود داشته باشد، پس می توانیم به صورت زیر آنرا mount کنیم.

در شکل بالا، test/ معادل data/test/ است. همچنین توجه کنید که زمان mount کردن از سوئیچ t nfsv4- استفاده کردیم.

با شروع NFSv3 از فایل هایی بزرگتر از 2g پشتیبانی شد و همچنین از گزینه async در export کردن دایرکتوری ها برای بالا بردن کارایی استفاده می شود. NFSv4 دارای بهبود ها و قابلیت های بیشترری نسبت به NFSv3 است و همچنین در NFSv4 نیازی به سرویس portmap نمی باشد. NFSv4 از TCP بر روی پورت 2049 برای بهبود و کارایی بیشتر استفاده می کند.



برچسب ها : , , ,