محمد نصیری
بنیانگذار انجمن تخصصی فناوری اطلاعات ایران ، هکر کلاه خاکستری ، کارشناس امنیت اطلاعات و ارتباطات

NFS چیست ؟ آموزش نصب و راه اندازی NFS سرور در اوبونتو

NFS یا Network File System  یک پروتکل به اشتراک گذاری فایل سیستم تحت شبکه است . دقت کنید اشتراک گذاری فایل سیستم نه اشتراک گذاری فایل !! به این شکل که کلاینت NFS قسمتی از فایل سیستم سرور را برای خودش میگیرد و آن را برای کاربران خودش مدیریت می کند . این پروتکل توسط شرکت Sun Microsystems ارائه شد .

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

شما با استفاده از NFS می توانید دایرکتوری ها یا حتی فایل ها را در شبکه مجوز دسترسی بدهید اما توجه کنید که مکانیزم کاری NFS از نظر ساختار ذخیره سازی اطلاعات بصورت Block Based محسوب می شود که می توانید با جستجویی ساده تفاوت Block Based Storage و File Level Storage را درک کنید. در NFS و ساختار فایل شیرینگ به این شکل ، برنامه ها و کاربران می توانند به اطلاعات سیستم های تحت شبکه به شکلی متصل شوند که انگار هارد دیسک کامپیوتر سرور متعلق به خودشان است .

ساختار کاری NFS به شکل کلاینت سروری است ، کلاینت ها در واقع همان کامپیوترها یا سرورهایی هستند که از بلوک های سیستم عامل سرور NFS بر روی خودشان استفاده می کنند و به کاربران اصلی سرویس می دهند . این سرور اصلی NFS است که وظیفه ایجاد کردن بلوک NFS و احراز هویت و تعیین سطح دسترسی کلاینت ها را بر عهده دارد و البته فایل سیستم را هم مدیریت می کند اما سطح دسترسی End User بر عهده NFS Client است که بعد از اتصال به سرور اصلی دسترسی هایی مثل NTFS Permission ها بر عهده کلاینت می باشد .

به زبان ساده تر ما برای اینکه به یک NFS سرور متصل شویم و یک فرآیند کاری درست انجام دهیم 3 کامپیوتر داریم ، کامپیوتر اول سرور NFS است که هارد دیسک و فایل سیستم را آماده می کند برای اشتراک گذاری در شبکه ، کامپیوتر دوم که برای سرور NFS کلاینت محسوب می شود به NFS متصل می شود و آن را Mount می کند .

به گونه ای که قسمت Mount شده کاملا مثل یک هارد دیسک معمولی روی سیستم کلاینت نشان داده می شود و کلاینت می تواند دسترسی های لازم برای اشتراک گذاری در شبکه را انجام بدهد !! اما کامپیوتر سوم همان کلاینت ما است که به کلاینت NFS وصل می شود و از منابع استفاده می کند ! برای مثال شما می توانید با Samba از NFS به عنوان ذخیره ساز استفاده کنید.

شما برای اینکه بتوانید به درستی از سرویس NFS استفاده کنید بایستی هم تنظیمات سمت سرور و هم سمت کلاینت را به درستی انجام بدهید . در این مقاله آموزشی در وب سایت توسینسو ما به شما مراحل گام به گام نصب و راه اندازی NFS سرور و NFS کلاینت را آموزش می دهیم و در نهایت شما امکان اشتراک گذاری فایل سیستم بین این سرور و کلاینت را خواهید داشت . در این مقاله ما از اوبونتو به عنوان سرور و کلاینت استفاده می کنیم . نسخه مورد استفاده ما Ubuntu 18.04 LTS است بنابراین با ما همراه باشید .

تنظیمات راه اندازی سرور میزبان NFS

برای راه اندازی سرویس NFS و اشتراک گذاری دایرکتوری ها در ابتدا شما باید NFS Kernel Server را بر روی لینوکس نصب کنید و سپس دایرکتوری های Export را برای دسترسی کلاینت ها تعریف کنید. برای اینکار مراحل زیر را دنبال کنید .

گام اول : نصب کردن NFS Kernel  سرور

قبل از نصب کردن NFS Kernel Server ترجیجا با دستور زیر سیستم را به روز رسانی کنید :

$ sudo apt-get update

آموزش راه اندازی NFS سرور

خوب با دستور بالا آخرین نسخه از ابزارها و نرم افزارهایی که در مخازن لینوکس اوبونتو وجود دارند بر روی سیستم شما به روز رسانی می شوند . حالا با دستور زیر NFS Kernel سرور را بر روی اوبونتو نصب می کنیم :

$ sudo apt install nfs-kernel-server

آموزش راه اندازی NFS سرور

بعد از زدن دستور بالا سیستم از شما یک درخواست Y/N یا همان Yes No می خواهد که طبیعتا با زدن کلید Y نصب ابزار بر روی سیستم شما انجام می شود . مطمئن شوید که مراحل به درستی و بدون خطا انجام شده است و بعد از دریافت پیام Successfully Installed در همه موارد به ادامه مرحله نصب می رسیم.

گام دوم : ایجاد کردن Export Directory

دایرکتوری اکسپورت یا Export Directory در واقع همان پوشه یا فولدری است که ما می خواهیم از طریق کلاینت به آن وصل شویم . شما هر جور که دوست داشته باشید آن را می توانید نامگذاری کنید ، ما در اینجا نام این دایرکتوری را tosinso-export می گذاریم  و آن را در مسیر mount های سیستم یا /mnt/ به شکل زیر ایجاد می کنیم . شما با دستور زیر می توانید این دایرکتوری را به سادگی ایجاد کنید :

$ sudo mkdir -p /mnt/tosinso-export

آموزش راه اندازی NFS سرور

با توجه به اینکه ما می خواهیم همه کلاینت ها بدون مشکل به دایرکتوری مورد نظر دسترسی پیدا کنند ، دسترسی های محدود کننده از روی این دایرکتوری را با دستور زیر حذف می کنیم و البته دسترسی 777 را به همه به معنی Full Control می دهیم ، به همین دلیل بهتر است دستورات زیر را قبل از رسیدن به مرحله ایجاد NFS سرور برای دایرکتوری Export وارد کنیم :

$ sudo chown nobody:nogroup /mnt/tosinso-export
$ sudo chmod 777 /mnt/tosinso-export

آموزش راه اندازی NFS سرور

حالا تمام کاربران و گروه ها از سیستم کلاینت می توانند بدون محدودیت به tosinso-export متصل شوند. شما هر چقدر که نیاز داشته باشید می توانید در این دایرکتوری Sub Directory یا Sub Folder ایجاد کنید و دسترسی های مختلفی به آنها بدهید اما بهتر است ریشه این دسترسی را داشته باشد .

گام سوم : دادن دسترسی به کلاینت ها از طریق سرور با فایل NFS Export

بعد از اینکه دسترسی های داخلی دایرکتوری Export داده شد ، نوبت به دادن دسترسی به کلاینت های NFS از طریق خود فایل تنظیمات و دسترسی Export ها می رسید . این دسترسی ها از طریق یک فایل به نام exports در دایرکتوری etc تعریف می شود . برای باز کردن این فایل دستور زیر را در ترمینال و ادیتور nano وارد کنید :

$ sudo nano /etc/exports

آموزش راه اندازی NFS سرور

برای باز کردن این فایل و انجام تنظیمات آن شما قطعا نیاز به دسترسی root دارید . بعد از اینکه فایل را باز کردید ، شما می توانید با اضافه کردن قالب های زیر در هر خطی که دوست داشتید دسترسی ها به کلاینت ها را تعریف کنید ، به مثال قالب های دستوری زیر توجه کنید :

  • دادن دسترسی فقط به یک آدرس IP بصورت زیر تعریف می شود :
mnt/tosinso-export clientIP (rw,sync,no_subtree_check)
  • دادن دسترسی به چند تعداد آدرس IP بصورت زیر در قالب خطوط مجزا تعریف می شود :
/mnt/tosinso-export client1IP(rw,sync,no_subtree_check)
/mnt/tosinso-export client2IP (rw,sync,no_subtree_check)
  • دادن دسترسی به یک Subnet مشخص از کامپیوترهای شبکه به شکل زیر تعریف می شود
/mnt/tosinso-export subnetIP/24(rw,sync,no_subtree_check)

برای مثال در سناریوی ما ، شبکه ای با رنج آیپی 192.168.0.0/24  وجود دارد و دسترسی ما نیز به شکل زیر تعریف می شود تا کلیه کامپیوترهایی که در این Subnet وجود دارند بتوانند به فولدر export یا همان tosinso-export متصل شوند :

/mnt/tosinso-export 192.168.0.0/24(rw,sync,no_subtree_check)

آموزش راه اندازی NFS سرور

بعد از وارد کردن دستورات بالا ، کافیست کلیدهای Ctrl+X را بزنید و فایل را ذخیره کنید و Enter را بزنید . اگر برایتان دسترسی هایی که در داخل پرانتز تعریف شده است مبهم است کافیست به تعریف های زیر توجه کنید :

  • rw : به معنی دسترسی read و write است
  • sync : دستور نوشتن هر چیزی بر روی دیسک قبل از اعمال کردن آن ( توی RAM نباشه )
  • no_subtree_check : از بررسی کردن دسترسی های دایرکتوری های داخلی خودداری کند

گام چهارم : Export کردن دایرکتوری Shared شده

بعد از اینکه تمام تغییرات بالا را به درستی اعمال کردید ، نوبت به Export کردن دایرکتوری Shared شده با دستور زیر می رسد ، در واقع ما باید تنظیمات خود را به سیستم اعلام کنیم و اینکار صرفا با دستور زیر انجام می شود :

$ sudo exportfs –a

آموزش راه اندازی NFS سرور

در واقع دستور بالا ، تنظیماتی که ما در فایل exports ایجاد کردیم را در سیستم اعلام و عملی می کند ، بعد از وارد کردن دستور بالا ، طبق روال همیشگی باید سرویس NFS Kernel سرور ما restart شود ، برای اینکار دستور زیر را وارد می کنیم :

$sudo systemctl restart nfs-kernel-server

آموزش راه اندازی NFS سرور

گام پنجم : باز کردن فایروال برای کلاینت ها

کار ما روی سرور تمام شده است ، حالا نوبت به وارد کردن تنظیمات فایروال برای دسترسی کلاینت هاست ، برای اینکه پورت های مورد نظر را روی فایروال باز کنیم ، کافیست در قالب زیر آدرس IP یا رنج آیپی مورد نظرمان را در فایروال باز کنیم ، قالب دستور به شکل زیر است :

$ sudo ufw allow from [clientIP or clientSubnetIP] to any port nfs

طبیعتا با توجه به مثالی که در بالا زدیم ، ما می خواهیم رنج IP به شکل 192.168.0.0بتوانند به این سرور دسترسی داشته باشند بنابراین دستور زیر را وارد می کنیم :

$ sudo ufw allow from 192.168.0.0/24 to any port nfs

آموزش راه اندازی NFS سرور

حالا باید مطمئن شویم که تنظیمات فایروال به درستی اعمال شده است ، برای اینکار کافیست وضعیت فایروال را بررسی کنیم و مطمئن شویم که کلاینت های ما در حالت Allow قرار دارند ، برای اینکار کافیست دستور زیر را به سادگی وارد کنیم و به دنبال رنج آیپی وارد شده بگردیم :

$ sudo ufw status

آموزش راه اندازی NFS سرور

خوب تنظیمات سروری شما انجام شده است و تمام !!! حالا نوبت به انجام تنظیمات سمت کلاینت است ...

تنظیمات NFS سمت کلاینت لینوکس

حالا نوبت به تنظیمات بسیار ساده سمت کلاینت می رسد تا کلاینت بتواند براحتی به سرور متصل شود ، برای اینکار به ترتیب مراحل زیر را انجام بدهید :

گام اول : نصب کردن NFS Common

خوب ترجیحا همانطور که برای سرور هم مراحل را انجام دادیم ، قبل از نصب کردن NFS Common حتما مخازن لینوکس را با دستور زیر به روز رسانی کنید :

$ sudo apt-get update

دستور بالا آخرین نسخه از ابزارهای نصب شده در اوبونتو را برای شما از مخازن اصلی به روز رسانی می کند . حالا نوبت به نصب کردن NFS common Client برای دسترسی کلاینت می رسد ، برای اینکار کافیست دستور زیر را وارد کنیم :

$ sudo apt-get install nfs-common

بعد از وارد کردن دستور بالا از شما درخواست تایید Yes No می شود که شما طبیعتا با زدن Y تایید می کنید و مراحل نصب انجام می شود. وحالا به سراغ مرحله بعد می رویم که شما باید یک mount point برای کلاینت درست کنید که بتواند اطلاعات خودش را در آن قرار بدهد.

 گام دوم : ایجاد کردن mount point برای NFS Shared Folder

 کلاینت شما مثل همیشه برای اینکه بتواند اطلاعاتی را در فایل سیستم ذخیره کند نیاز به یک mount point دارد  که بتواند به export folder دسترسی پیدا کند . برای اینکار شما می توانید یک دایرکتوری هر جای سیستم درست کنید و آن را mount کنید ، ترجیحا بهتر است که در مسیر mnt سیستم اینکار را انجام بدهید . اینکار با استفاده از دستور زیر انجام می شود :

$ sudo mkdir -p /mnt/tosinso_export_client

گام سوم : دایرکتوری Share شده را در کلاینت mount کنید

خوب دایرکتوری که در مرحله قبل ساختید هیچ کاربردی ندارد تا زمانیکه شما آدرس Shared Folder ای که در سرور NFS وجود دارد را به آن Mount کنید . با استفاده از دستور زیر شما آدرس سرور NFS به همراه مشخصات Shared Folder را می دهید و آن را Mount می کنید :

$ sudo mount 192.168.0.108:/mnt/tosinso-export /mnt/tosinso_export_client

گام چهارم : تست کردن

خوب برای اینکه تست کنید این ارتباط به درستی ایجاد شده یا نه کافی هست که در سمت کلاینت در دایرکتوری و Mount  شده یه نگاهی بندازید و یه فایل ایجاد کنید و برید در سرور بررسی کنید که این دایرکتوری ایجاد شده یا خیر ، اگر ایجاد شده بود که فرآیند شما موفقیت آمیز بوده ، اگر نه که باید دنبال رفع مشکل باشید.

مباحث مربوط به تجهیزات ذخیره سازی شبکه یا در اصطلاح استوریج های شبکه در سه سطح از دوره های آموزشی مطرح می شوند ، در دوره آموزش نتورک پلاس شما در سطح مقدماتی با این تجهیزات آشنا می شوید . در دوره آموزشی استوریج پلاس بصورت حرفه ای تری با این تجهیزات کار می کنید و عملیاتی تر می شوید و در نهایت در دوره آموزشی VCP یا مجازی سازی های مراکز داده عملا با کار کردن با تجهیزات ذخیره سازی دنیای واقعی ، می توانید به این تجهیزات و مفاهیم آنها مسلط شوید. 

نتیجه گیری

اساسا راه اندازی NFS سرور در محیط های لینوکسی بسیار ساده هست . ما در این مقاله جامع تونستیم که یک NFS سرور رو به راجتی پیاده سازی کنیم و بهش متصل بشیم و تست بگیریم ازش ، اما فراموش نکنید که معمولا وقتی پروتکل های جایگزینی مثل iSCSI وجود دارند از چنین پروتکلی بهتر هست استفاده نشه از جمله دیگه نکات می تونیم به امکان دسترسی از طریق ابزارهای جانبی در ویندوز هم اشاره کنیم و فراموش نکنید که NFS دارای چند نسخه برای دسترسی هست که ما از نسخه 3 اون استفاده کردیم و نسخه 4 جدیدتر و به روزتر هست و ساده تر پیاده سازی میشه ...


محمد نصیری
محمد نصیری

بنیانگذار انجمن تخصصی فناوری اطلاعات ایران ، هکر کلاه خاکستری ، کارشناس امنیت اطلاعات و ارتباطات

محمد نصیری هستم ، هکر قانونمند و کارشناس امنیت سایبری ، سابقه همکاری با بیش از 50 سازمان دولتی ، خصوصی ، نظامی و انتظامی در قالب مشاور ، مدرس و مدیر پروژه ، مدرس دوره های تخصص شبکه ، امنیت ، هک و نفوذ ، در حال حاضر در ایران دیگه رسما فعالیتی غیر از مشاوره انجام نمیدم و مقیم کشور ترکیه هستم ، عاشق آموزش و تدریس هستم و به همین دلیل دوره های آموزشی که ضبط می کنم در دنیا بی نظیر هستند.

نظرات