اطلاعیه

بستن
No announcement yet.

اشتراک سیستم فایل در لینوکس با nfs بخش اول

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
Clear All
پست های جدید

    اشتراک سیستم فایل در لینوکس با nfs بخش اول

    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 : اصلی ترین سرویس که دیگر سرویس ها با فعال شدن آن نیز فعال می شوند. برای فعال کردن آن دستور زیر را انجام دهید :

    کد PHP:
    etc/init.d/nfsstart
    nfslockd : در سمت کلاینت اجازه می دهد تا فایل ها را بروی سرور قفل یا lock کند.

    کد PHP:
    etc/init.d/nfslockd start
    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 متفاوت است.
    نویسنده نامی امیر
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 01-12-2020, 12:04 AM.

    #2
    اشتراک سیستم فایل در لینوکس با nfs بخش پایانی

    NFS سرویسی است که امکان اشتراک گذاری سیستم فایل مابین سیستم عامل های یونیکسی مانند لینوکس ها، بی اس دی ها و مکینتاش را فراهم می کند، حتی امکان استفاده از این سرویس بین سیستم عامل های یونیکسی و ویندوز سرور 2008R2 نیز فراهم شده است. روند کار برای پیاده سازی سرویس NFS ابتدا باید سرویس ها و برنامه های لازم را هم برروی سرویس دهند(NFS Server) و هم برروی(NFS Client) سپس تعیین دایرکتوری هایی که باید اشتراکی شوند و در نهایت mount کردن دایرکتوری های اشتراکی شده در سیستم های کلاینت.مطلب دیگر اینکه لازم است تنظمات Firewall را نیز بصورت مناسب برای اجازه به ترافیک NFS تنظیم شود.

    ابتدا باید سرویس را در توزیع نصب کنید. این پست بر مبنای CentOS 6.2 است. لازم است در Virtual Box یا VMWare دو ماشین مجازی را نصب کنید و یکی را بعنوان سرویس دهند و دیگری بعنوان سرویس گیرنده استفاده شود. برای نصب آن در CentOS 5.x دستور زیر را اجرا کنید :

    کد PHP:
    yum install nfs-utils -
    پس از نصب باید سرویس های لازم را start کنیم. برخی از این سرویس ها مشترک میان سرور و کلاینت و یا مختص سرور هستند. با دستور های زیر سرویس های مورد نظر را راه اندازی می کنیم :

    کد PHP:
    etc/init.d/nfs  start/

    etc/init.d/portmap  start/

    etc/init.d/nfslock  start
    و سپس با دستور های زیر سرویس ها را برای Runlevel ها بصورت دائم فعال کنید.

    کد PHP:
    chkconfig  nfs  on

    chkconfig  portmap  on

    chkconfig  nfslock on 
    ساختار فایل etc/exports/ :
    همانطور که گفته شد NFS دارای فایلی به نام export در زیر دایرکتوری etc/ است که باید آنرا ویرایش کنیم.بابد آنرا بر اساس دایرکتوری ها و ماشین های مجاز به استفاده از دایرکتوری اشتراکی، تنظیم کنیم. شکل کلی هر خط این فایل بصورت زیر است:

    کد PHP:
    (shared_directory  IP or machin_name(OPTIONS 
    که در آن shared_directory نام دایرکتوری از NFS Server است که برای دیگر ماشین های شبکه Share شده است. IP or machin_name آدرس یا نام ماشین(های) کلاینتی است که مجاز به mount کردن دایرکتوری در سیستم محلیشان هستند و OPTIONS هم گزینه هایی هستند مانند rw که بر شیوه استفاده در کلاینت از دایرکتوری اشتراکی اثر دارند.

    در زیر چندین مثال از فرمت های گوناگون آورده شده است.

    در مثال زیر دایرکتوری home/nfs/ برای یک کلاینت با آدرس 10.10.1.50 اشتراکی شده است و در خط دوم برای دو ماشین به ادرس های 10.10.1.50 و 10.10.1.51 اشتراکی شده اند.

    کد PHP:
    (home/nfs/  10.10.1.50(rw,sync/

    (
    home/nfs/  10.10.1.50(rw,sync)  10.10.1.51(rw,sync
    در مثال زیر یک محدوده IP ها(IP Range) در نظر گرفته می شود.

    کد PHP:
    (home/nfs  10.10.1.0/24(rw,sync
    در مثال زیر یک ماشین عضو دامنه myserver.local را شامل می شود.

    کد PHP:
    home/nfs   pc2.myserver.local(rw,sync
    در مثال زیر تمامی ماشین های عضو دامنه myserver.local را شامل میشود.

    کد PHP:
    (home/nfs   *.myserver.local(rw,sync
    option های موجود برای export کردن سیستم فایل همان هایی هستند که در دستور mount استفاده می شوند و می توانید از اینجا بخوانید.

    ویرایش فایل etc/exports/ :
    برای ویرایش کردن فایل etc/exports/ از دستور زیر استفاده کنید و هر خط آن شامل یک دایرکتوری به همراه ماشین های مجاز برای استفاده و OPTION ها هستند.

    کد PHP:
    vi  /etc/exports 
    فرض کنید می خواهیم دایرکتوری tmp/sharedir/ را صادر کنیم تا کاربران شبکه 10.10.1.0/24 با گزینه های ro و root_squash استفاده کنند.خط زیر را به فایل اضافه کنید و سپس کلید Esc را زده و پس از آن :+Shift را کلیک کنید و جلوی علامت : باید wq را برای ذخیره تغییرات وارد کنید و Enter بزنید.

    کد PHP:
    (tmp/sharedir  10.10.1.0/24(ro,root_squash
    همچنین می توانید از فرمت مثال زیر نیز برای ویرایش فایل etc/exports/ استفاده کنید.

    کد PHP:
    echo  /tmp/sharedir  10.10.1.0/24(ro,root_squash)’  > /etc/exports 
    البته باید از قبل یک دایرکتوری به نام sharedir در tmp/ بسازیم و مجوز های مناسب را به آن بدهیم. با دستور زیر دایرکتوری را ایجاد می کنیم.

    کد PHP:
    cd /tmp

    mkdir  sharedir 
    باید سرویس های گفته شده در بالا را restart کنیم. از دستور های زیر استفاده کنید :

    کد PHP:
    etc/init.d/nfs  restart/

    etc/init.d/portmap  restart/

    etc/init.d/nfslock  restart
    و سپس از اعمال تغییرات روی فایل exports دستور زیر را اجرا کنید.

    کد PHP:
    exportfs  -
    تنظیمات کلاینت ها :
    پس از تمامی کارهای بالا، نوبت به پیکربندی کلاینت ها می رسد. پیش از هر کاری باید در هر کلاینت در مسیر مناسب یک دایرکتوری بسازیم تا دایرکتوری اشتراکی را به آن متصل کنیم. بهترین جا برای اتصال سیستم فایل های اشتراکی دایرکتوری mnt/ است.

    کد PHP:
    cd  /mnt

    mkdir  sharedirclient 
    سپس به ازای هر خط فایل exports باید یک دستور mount بصورت زیر اجرا کنیم. خطوط زیر مثل دستور mount است ولی با این تفاوت که در ابتدا باید آدرس IP یا نام ماشینی که بعنوان NFS Server است را بیاوریم وگرنه تمام جزئیات همانند دستور mount است.

    کد PHP:
    mount -t nfs  -o  nfsvers=3  IP OR machin_nfs_server:/path/to/nfs_dir /path/to/client_dir 
    در دستور بالا باید بجای path/to/nfs_dir/ باید دایرکتوری اشتراکی را بیاوریم و بجای path/to/client_dir باید دایرکتوری ایجاد شده در کلاینت جایگزین شود.خط زیر برای mount کردن دیارکتوری tmp/sharedir/ استفاده می شود.

    کد PHP:
    mount  -t nfs  -o  nfsvers=3,proto=tcp,port=2049  10.10.1.1:/tmp/sharedir  /mnt/sharedirclient 
    در CentOS 5.x از NFSv3 استفاده می شود ولی اگر شما رو توزیع تان از NFSv4 استفاده می کنید باید بجای خط بالا از خط زیر استفاده کنید.

    کد PHP:
    mount -t nfs4  -o  proto=tcp,port=2049  IP OR machin_nfs_server:/path/to/nfs_dir /path/to/client_dir 
    مشکل دستور mount موقتی بودن آن است یعنی پس از خاموش شدن سیستم،نقطه اتصال دایرکتوری اشتراکی mount شده از بین می رود اگر می خواهید که بصورت دائمی باشد با یک خط به فایل etc/fstab/ اضافه کنید و می توانید این راهنما را بخوانید.

    در صورتی که با خطای زیر در هنگام mount کردن یک دایرکتوری در کلاینت موجه شدید دلیل آن مرتبط با بسته بودن پورت های 111 و 2049 است.بطور کلی برای تست می توانید در سرور و کلاینت فایروال را خاموش یا غیر فعال کنید.

    کد PHP:
    mount.nfsmount to NFS server ‘10.10.1.1’ failedSystem ErrorNo route to host 
    تنظیم فایروال(iptables) در سرویس دهنده :
    برای انکه اجازه عبور ترافیک NFS داده شود باید فایروال را تنظیم کنید.ساده ترین و بدترین روش این است که فایروال را غیر فعال کنید برای این کار می توانید از دستور زیر استفاده کنید :

    کد PHP:
    etc/init.d/firewall stop
    اما روش دیگر،ابتدا باید یک فایل به نام nfs در زیر دایرکتوری etc/sysconfig را ویرایش کنید. برای ویرایش آن از دستور زیر استفاده کنید.

    کد PHP:
    vi  /etc/sysconfig/nfs 
    پس از اجرای دستور بالا باید خطوط زیر را Uncoment کنید یعنی علامت # ابتدای خطوط زیر را بردارید.

    LOCKD_TCPPORT=32803
    LOCKD_UDPPORT=32769
    MOUNTD_PORT=892
    RQUOTAD_PORT=875
    STATD_PORT=662
    STATD_OUTGOING_PORT=2020


    و سرویس های زیر را به ترتیب restart کنید :

    کد PHP:
    etc/init.d/nfs  restart/

    etc/init.d/portmap  restart/

    etc/init.d/rcpcscvgssd  restart
    ور نهایت باید دوباره فایلی رو در مسیر etc/sysconfig/ به نام iptables با دستور gedit /etc/sysconfig/firewall ویرایش کنید و خطوط درون فایل nfs_firewall.txt را در آن کپی کنید. (باید تمام محتوای فایل etc/sysconfig/iptables/ را پاک کنید و بجای آن محتوای فایل دانلود شده را کپی کنید) و اینکه توجه کنید که باد بجای آدرس های 10.10.1.0/24 آدرس IP دلخواه خودتان را جایگزین کنید. و در نهایت فایروال را نیز با دستور زیر restart کنید.

    کد PHP:
    etc/init.d/iptables  restart
    سرویس nfs برروی پورت 2049 و portmap برروی پورت 111 کار می کنند.
    نویسنده نامی امیر
    فایل های پیوست شده
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 01-12-2020, 12:05 AM.

    کامنت

    درباره انجمن منطقه لینوکسی ها

    انجمن منطقه لینوکسی ها با هدف ارتقاء سطح علمی کاربران در سطح جهانی و همچنین کمک به بالا بردن سطح علمی عمومی در زمینه های تخصصی فوق پایه گذاری شده است. انجمن منطقه لینوکسی ها از طریق کارشناسان و متخصصان پاسخگوی سوالات گوناگون کاربران مبتدی یا پیشرفته میباشد تا حد امکان تلاش شده که محیطی متنوع و کاربر پسند و به دور از هرگونه حاشیه جهت فعالیت کاربران در این انجمن ایجاد شود. لذا ما به صورت مستمر برای پیشرفت کمی و کیفی محتوی و اطلاعات انجمنمان میکوشیم که این برای ما ارزشمند و حائز اهمیت است. کلیه حقوق،اطلاعات و مقالات در این انجمن متعلق به سایت منطقه لینوکسی ها میباشد، و هرگونه نسخه برداری بدون ذکر منبع مورد پیگرد قانونی خواهد شد.

    شبکه های اجتماعی

    ایمیل مدیریت

    Habili@linux-zone.org

    در حال انجام ...
    X