NFS که مخفف Network File System است بطور خلاصه امکانیست که اجازه می دهد تا یک سیستم فایل محلی قابل mount شدن توسط دیگر سیستم ها در شبکه باشند.در ارائه سرویس NFS هیچ محدودیتی در نوع کاربرد سیستم نیست یعنی در یک شرکت با 100 سیستم نباید حتمن یکی از آنها بعنوان سروردهنده NFS باشد و مابقی از آن سرویس بگیرند بلکه هرکدام از این سیستم ها می توانند نقش سرویس دهنده NFS را داشته باشند و دیرکتوری ها و فایل های خود را به اشتراک بگذارند.
اما می توان از دیدگاهی دیگر راه اندازی آنرا به دو بخش تنظیم سرویس دهنده و تنظیم سرویس گیرنده تقسیم کرد چون بالاخره یکی دایرکتوری را به اشتراک می گذارد و بقیه استفاده می کنند پس شاید بنا به سیاست یک سیستم هم دایرکتوری را برای دیگران به اشتراک بگذارد و از اشتراکات دیگران استفاده کند.تنها مطلبی که باید دقت شود اطمینان از فعال بودن سرویس های لازم در هردو سمت سسرویس دهنده و سرویس گیرنده بود که برای انجام درست سرویس NFS بسیار لازم و ضروری هستند.
از این پس بجای کلمه Mount Point از نقطه اتصال استفاده خواهیم کرد.برای آشنایی با دستور mount می توانید این لینک را بخوانید و بجای export از صادر کردن استفاده می کنیم.این آموزش در Centos 5.5 انجام شده اما در دیگر توزیع ها قابل استفاده است.
NFS چگونه کار می کند :
تمامی نسخه های NFS از پروتکل TCP استفاده می کنند.NFSV2 امروزه کمتر استفاده می شود اما NFSV3 و NFSV4 بسیار کاربرد دارند.NFSV4 بواسطه فایروال برروی اینترنت کار می کند و همچنین از ویژگی ACLکه نیز پشتیبانی می کند.NFSV2 و NFSV3 از پروتکل UDPنیز می توانند استفاده کنند.فایل etc/exports/ بخش اصلی تنظیم NFS است که فهرستی از دایرکتوری های اشتراکی را در خود نگه می دارد.در این فایل تعیین می شود کدام دایرکتوری ها و با چه مجوز هایی از ماشین باید برای چه کسانی و با چه مجوز هایی اشتراک گذاشته شوند.
ویژگی های NFSV4 :
سازگاری با فایروال ها و ابزار های NAT
امنیت بالا
پشتیبانی از کلاینت های یونیکسی(Linux,BSD,Mac OSX) و ویندوزی
پشتیبانی از ACL
پشتیبانی از نام فایل های یونیکد
کارایی بالا حتی بر روی شبکه ها با پهنای باند پایین
RHLE و دیگر توزیع های لینوکسی ترکیبی از سرویس ها را برای انجام NFS استفاده می کنند.تمامی نسخه های NFS متکی بر RPC یا Remote Procedure Call میان کلاینت ها و سرور ها هستند.سرویس های RPC در لینوکس تحت سرویس portmap کار می کنند.در زیر فهرستی از سرویس ها که بصورت ترکیبی با هم در حال ارتباط و کار کردن برای اجرای NFS امده است:
nfs : اصلی ترین سرویس که دیگر سرویس ها با فعال شدن آن نیز فعال می شوند. برای فعال کردن آن دستور زیر را انجام دهید :
nfslockd : در سمت کلاینت اجازه می دهد تا فایل ها را بروی سرور قفل یا lock کند.
portmap : همانطور که گفته شد سرویس های RPC تحت لینوکس توسط این سرویسس کنترل می شوند و مسئول تنظیم کردن اتصال ها برای سرویس های RPC درخواست شده است.
فهرست سرویس های RPC در زیر آمده است :
rpc.mountd : این سرویس در خواست های mount را از سمت کلاینت در یافت می کند و بررسی می کند که سیستم فایل(دایرکتوری) درخواست شده در حال حاظر صادر شده است.فهرست دایرکتوری ها صادر شده در فایل etc/exports/ قرار می گیرند.exports شدن به این معنی است که یک دایرکتوری را در شبکه به اشتراک بگذاریم.این سرویس در هنگام فعال کردن سرویس nfs بصورت خودکار فعال می شود.
rpc.nfsd : این سرویس با هسته لینوکس برای مواجه شدن با در خواست های پویا از سمت کلاینت کار می کند.
rpc.nfslock : به کلاینت اجازه قفل کردن فایل ها را برروی سرور قفل کنند و با سرویس NFSV4 استفاده نمی شود.
rpc.statd : کلاینت ها را در صورتی که سرور restart شود باخبر می کند.این سرویس توسط nfslock فعال می شود و با NFSC4 استفاده نمی شود.
rpc.rquotad : این سرویس اطلاعات سهمیه بندی را برای کاربران راه دور(remote users) فراهم می کند.سهمیه بندی یعنی اینکه هر کاربر راه دور چه مقدار فضا می تواند برای ایجاد فایل و … داشته باشد.این سرویس به همراه فعال کردن سرویس nfs خودکار فعال می شود.
rpc.idmapd : بعنوان نگاشت کننده نام ها و ID ها در NFS است.این سرویس UID ها و GID ها را به نام ها ترجمه می کند. فایل مزتبط با آن etc/idmapd.conf/ می باشد.
نکته ضروری دیگر اینکه برای استفاده از NFS برروی سیستم تان مطمئن شوید که بسته های portmap, nfs-utils و nfs-utils-lib نصب شده باشد که در بخش نصب سرویس انها را نصب خواهیم کرد.
قفل کردن فایل ها :
در اوایل سرویس های NFS بصورت Stateless بودن یعنی توانایی ثبت و نگهداری تاریخچه ای از فعالیت ها و اینکه کدام فایل تو سط کدام ماشین ها و کاربران راه دور استفاده شده اند را نداشتند.هر چند اینکه این اطلاعات و تاریخچه ها برای قفل کردن فایل ها لازم هستند.یک راه حل برای این مشکل بکار بردن ابزار های مجزا از NFS مانند statd و lockd برای قفل کردن فایل هاست که در NFSv2 و NFSv3 استفاده می شوند. اما NFSv4 ویژگی statful را که نان دهنده مبتنی بودن بر حالت و نگه داشتن تاریخچه ای از فعالیت ها را به همراه خود دارد.
NFSv4 مبتنی بر حالت است و هم برروی کلاینت و هم برروی سرویس دهنده اطلاعاتی را نگه می دارد مانند کدام فایل ها باز هستند و کدام ها قفل شده اند. این اطلاعات در صورتی که سروبس دهنده دچار مشکل شوند برای رفع اشکال سرویس دهنده میان آنها رد و بدل خواهد شد.
export کردن فایل ها :
export کردن به این معنی است که تعیین کنیم کدام یک از دایرکتوری ها بر روی ماشین محلی برای کدام یک از ماشین ها راه دور و با چه مجوز هایی قابل mount کردن هستند.در NFSv2 و NFSv3 هر دارکتوری صادر شده بعنوان یک ورودی مستقل اما در NFSv4 این طور نمی باشد. برای مثال فهرست دایرکتوری های زیر را در نظر بگیرید(آنهایی که Bold هستند export شده اند).
www/domain1/
www/domain2/
www/domain3/
var/log/httpd/
var/spool/
امنیت :
سه گونه اهراز هویت وجود دارند که ما دومین گزینه را شرح خواهیم داد :
AUTH-NONE : بدون اهراز هویت
AUTH-SYS : مبتنی بر حالت اهراز هویت یونیکسی یعنی استفاده از UID و GID
RPCSEC-GSS : صحت و درستی/ محرمانه بودن اهراز هویت با مکانیزم هایی مانند Kerberos
بصورت معمول شیوه AUTH-SYS ساتفاده می شود که سیستم سنتی یونیکس با استفاده از UID و GID اختصاص دادن به هر کاربر است. UID برای هر کاربر یکتا بوده و در سیستم تکراری نمی باشد و GID هم در سیستم یکتاست اما می تواند به چندین کاربر اختصاص داده شود یعنی اینکه چندین کاربر عضوی از گروه با شناسه 50 بوده که GID معرف گروه اصلی کاربر است که حتمن هر کاربر در هنگام ایجاد یک گروه اصلی دارد و بصورت پیش فرض نام و شناسه این گروه برابر با نام و شناسه کاربر است. کافیست دستور id را اجرا کنید و چیزی شبه به خط زیر را ببینید.
پایگاه داده کاربران فایل etc/passwd/ است.اما این مباحث چه ارتباطی با NFS دارند؟ این اطلاعات نحوه نگاشت یک کاربر راه دور را بر روی سرویس دهنده NFS تعیین می کنند که آیا یک کاربر root راه دور در سرویس دهنده هم کاربر ریشه باشد یه نه؟نگاشت کاربران دیگر چگونه باشد ایا آنها با همان UID و GID وارد شوند یا بعنوان کاربر ناشناس باشند؟
NFSv4 از TCP و معمولا بر روی ئورت 2049 استفاده می کند. چون NFSv4 با دیگر پورت ها کار نمی کند و برروی پورت 2049 ارتباط برقرار می کند تنظیم فایروال ساده و واضح است. یعنی باید آدرس های مبدا و مقصد ه همراه پورت را تعیین کنیم و می توانید به واسطه فایروال دسترسی ماشین هایی را به سرویس دهنده بلاک کنید.
همچنین اشتراک سیستم فایل در لینوکس با NFS بخش پایانی (بر اساس توزیع های CentOS5 و RedHat5)
اشتراک فایل ها در CentOS 6 و RedHat 6 :
البته آموزش ” اشتراک سیستم فایل در لینوکس با NFS بخش پایانی ” جنبه کلی و چگونگی پیکربندی NFS را دارد که در تمامی نسخه و توزیع های لینوکسی یکسان است اما تفاوتی که نسبت به توزیع CentOS6 و RedHat 6 دارد این است که دیگر نیازی به سرویس portmap در نسخه های 6 نیست و اینکه نسبت به دیگر توزیع ها مانند ابونتو روش نصب بسته NFS متفاوت است.
نویسنده نامی امیر
اما می توان از دیدگاهی دیگر راه اندازی آنرا به دو بخش تنظیم سرویس دهنده و تنظیم سرویس گیرنده تقسیم کرد چون بالاخره یکی دایرکتوری را به اشتراک می گذارد و بقیه استفاده می کنند پس شاید بنا به سیاست یک سیستم هم دایرکتوری را برای دیگران به اشتراک بگذارد و از اشتراکات دیگران استفاده کند.تنها مطلبی که باید دقت شود اطمینان از فعال بودن سرویس های لازم در هردو سمت سسرویس دهنده و سرویس گیرنده بود که برای انجام درست سرویس NFS بسیار لازم و ضروری هستند.
از این پس بجای کلمه Mount Point از نقطه اتصال استفاده خواهیم کرد.برای آشنایی با دستور mount می توانید این لینک را بخوانید و بجای export از صادر کردن استفاده می کنیم.این آموزش در Centos 5.5 انجام شده اما در دیگر توزیع ها قابل استفاده است.
NFS چگونه کار می کند :
تمامی نسخه های NFS از پروتکل TCP استفاده می کنند.NFSV2 امروزه کمتر استفاده می شود اما NFSV3 و NFSV4 بسیار کاربرد دارند.NFSV4 بواسطه فایروال برروی اینترنت کار می کند و همچنین از ویژگی ACLکه نیز پشتیبانی می کند.NFSV2 و NFSV3 از پروتکل UDPنیز می توانند استفاده کنند.فایل etc/exports/ بخش اصلی تنظیم NFS است که فهرستی از دایرکتوری های اشتراکی را در خود نگه می دارد.در این فایل تعیین می شود کدام دایرکتوری ها و با چه مجوز هایی از ماشین باید برای چه کسانی و با چه مجوز هایی اشتراک گذاشته شوند.
ویژگی های NFSV4 :
سازگاری با فایروال ها و ابزار های NAT
امنیت بالا
پشتیبانی از کلاینت های یونیکسی(Linux,BSD,Mac OSX) و ویندوزی
پشتیبانی از ACL
پشتیبانی از نام فایل های یونیکد
کارایی بالا حتی بر روی شبکه ها با پهنای باند پایین
RHLE و دیگر توزیع های لینوکسی ترکیبی از سرویس ها را برای انجام NFS استفاده می کنند.تمامی نسخه های NFS متکی بر RPC یا Remote Procedure Call میان کلاینت ها و سرور ها هستند.سرویس های RPC در لینوکس تحت سرویس portmap کار می کنند.در زیر فهرستی از سرویس ها که بصورت ترکیبی با هم در حال ارتباط و کار کردن برای اجرای NFS امده است:
nfs : اصلی ترین سرویس که دیگر سرویس ها با فعال شدن آن نیز فعال می شوند. برای فعال کردن آن دستور زیر را انجام دهید :
کد PHP:
etc/init.d/nfs/ start/
کد PHP:
etc/init.d/nfslockd start/
فهرست سرویس های RPC در زیر آمده است :
rpc.mountd : این سرویس در خواست های mount را از سمت کلاینت در یافت می کند و بررسی می کند که سیستم فایل(دایرکتوری) درخواست شده در حال حاظر صادر شده است.فهرست دایرکتوری ها صادر شده در فایل etc/exports/ قرار می گیرند.exports شدن به این معنی است که یک دایرکتوری را در شبکه به اشتراک بگذاریم.این سرویس در هنگام فعال کردن سرویس nfs بصورت خودکار فعال می شود.
rpc.nfsd : این سرویس با هسته لینوکس برای مواجه شدن با در خواست های پویا از سمت کلاینت کار می کند.
rpc.nfslock : به کلاینت اجازه قفل کردن فایل ها را برروی سرور قفل کنند و با سرویس NFSV4 استفاده نمی شود.
rpc.statd : کلاینت ها را در صورتی که سرور restart شود باخبر می کند.این سرویس توسط nfslock فعال می شود و با NFSC4 استفاده نمی شود.
rpc.rquotad : این سرویس اطلاعات سهمیه بندی را برای کاربران راه دور(remote users) فراهم می کند.سهمیه بندی یعنی اینکه هر کاربر راه دور چه مقدار فضا می تواند برای ایجاد فایل و … داشته باشد.این سرویس به همراه فعال کردن سرویس nfs خودکار فعال می شود.
rpc.idmapd : بعنوان نگاشت کننده نام ها و ID ها در NFS است.این سرویس UID ها و GID ها را به نام ها ترجمه می کند. فایل مزتبط با آن etc/idmapd.conf/ می باشد.
نکته ضروری دیگر اینکه برای استفاده از NFS برروی سیستم تان مطمئن شوید که بسته های portmap, nfs-utils و nfs-utils-lib نصب شده باشد که در بخش نصب سرویس انها را نصب خواهیم کرد.
قفل کردن فایل ها :
در اوایل سرویس های NFS بصورت Stateless بودن یعنی توانایی ثبت و نگهداری تاریخچه ای از فعالیت ها و اینکه کدام فایل تو سط کدام ماشین ها و کاربران راه دور استفاده شده اند را نداشتند.هر چند اینکه این اطلاعات و تاریخچه ها برای قفل کردن فایل ها لازم هستند.یک راه حل برای این مشکل بکار بردن ابزار های مجزا از NFS مانند statd و lockd برای قفل کردن فایل هاست که در NFSv2 و NFSv3 استفاده می شوند. اما NFSv4 ویژگی statful را که نان دهنده مبتنی بودن بر حالت و نگه داشتن تاریخچه ای از فعالیت ها را به همراه خود دارد.
NFSv4 مبتنی بر حالت است و هم برروی کلاینت و هم برروی سرویس دهنده اطلاعاتی را نگه می دارد مانند کدام فایل ها باز هستند و کدام ها قفل شده اند. این اطلاعات در صورتی که سروبس دهنده دچار مشکل شوند برای رفع اشکال سرویس دهنده میان آنها رد و بدل خواهد شد.
export کردن فایل ها :
export کردن به این معنی است که تعیین کنیم کدام یک از دایرکتوری ها بر روی ماشین محلی برای کدام یک از ماشین ها راه دور و با چه مجوز هایی قابل mount کردن هستند.در NFSv2 و NFSv3 هر دارکتوری صادر شده بعنوان یک ورودی مستقل اما در NFSv4 این طور نمی باشد. برای مثال فهرست دایرکتوری های زیر را در نظر بگیرید(آنهایی که Bold هستند export شده اند).
www/domain1/
www/domain2/
www/domain3/
var/log/httpd/
var/spool/
امنیت :
سه گونه اهراز هویت وجود دارند که ما دومین گزینه را شرح خواهیم داد :
AUTH-NONE : بدون اهراز هویت
AUTH-SYS : مبتنی بر حالت اهراز هویت یونیکسی یعنی استفاده از UID و GID
RPCSEC-GSS : صحت و درستی/ محرمانه بودن اهراز هویت با مکانیزم هایی مانند Kerberos
بصورت معمول شیوه AUTH-SYS ساتفاده می شود که سیستم سنتی یونیکس با استفاده از UID و GID اختصاص دادن به هر کاربر است. UID برای هر کاربر یکتا بوده و در سیستم تکراری نمی باشد و GID هم در سیستم یکتاست اما می تواند به چندین کاربر اختصاص داده شود یعنی اینکه چندین کاربر عضوی از گروه با شناسه 50 بوده که GID معرف گروه اصلی کاربر است که حتمن هر کاربر در هنگام ایجاد یک گروه اصلی دارد و بصورت پیش فرض نام و شناسه این گروه برابر با نام و شناسه کاربر است. کافیست دستور id را اجرا کنید و چیزی شبه به خط زیر را ببینید.
پایگاه داده کاربران فایل etc/passwd/ است.اما این مباحث چه ارتباطی با NFS دارند؟ این اطلاعات نحوه نگاشت یک کاربر راه دور را بر روی سرویس دهنده NFS تعیین می کنند که آیا یک کاربر root راه دور در سرویس دهنده هم کاربر ریشه باشد یه نه؟نگاشت کاربران دیگر چگونه باشد ایا آنها با همان UID و GID وارد شوند یا بعنوان کاربر ناشناس باشند؟
NFSv4 از TCP و معمولا بر روی ئورت 2049 استفاده می کند. چون NFSv4 با دیگر پورت ها کار نمی کند و برروی پورت 2049 ارتباط برقرار می کند تنظیم فایروال ساده و واضح است. یعنی باید آدرس های مبدا و مقصد ه همراه پورت را تعیین کنیم و می توانید به واسطه فایروال دسترسی ماشین هایی را به سرویس دهنده بلاک کنید.
همچنین اشتراک سیستم فایل در لینوکس با NFS بخش پایانی (بر اساس توزیع های CentOS5 و RedHat5)
اشتراک فایل ها در CentOS 6 و RedHat 6 :
البته آموزش ” اشتراک سیستم فایل در لینوکس با NFS بخش پایانی ” جنبه کلی و چگونگی پیکربندی NFS را دارد که در تمامی نسخه و توزیع های لینوکسی یکسان است اما تفاوتی که نسبت به توزیع CentOS6 و RedHat 6 دارد این است که دیگر نیازی به سرویس portmap در نسخه های 6 نیست و اینکه نسبت به دیگر توزیع ها مانند ابونتو روش نصب بسته NFS متفاوت است.
نویسنده نامی امیر
کامنت