جدول محتوایی
NFS یا Network File System یک پروتکل سیستم فایل توزیع شده است که به شما امکان می دهد دایرکتوری ها را از طریق شبکه به اشتراک بگذارید. با سرور NFS، می توانید دایرکتوری های راه دور را روی سیستم خود نصب کنید و با فایل های موجود در دستگاه راه دور به گونه ای کار کنید که گویی فایل های محلی هستند.
به طور پیش فرض، پروتکل NFS رمزگذاری نشده است و احراز هویت کاربر را ارائه نمی دهد. دسترسی به سرور توسط آدرس های IP یا نام میزبان کلاینت محدود می شود.
در این مقاله نحوه راه اندازی یک سرور NFS v4 در اوبونتو 20.04 را به شما آموزش میدهیم. ما همچنین به شما نشان خواهیم داد که چگونه یک سیستم فایل NFS را بر روی دستگاه کلاینت نصب کنید.
پیش نیاز ها
ما از دو ماشین مجازی استفاده خواهیم کرد، یکی دارای Ubuntu 20.04، که به عنوان یک سرور NFS عمل می کند، و دیگری در حال اجرای هر توزیع لینوکس دیگری که اشتراک را روی آن نصب می کنیم. سرور و کلاینت ها باید بتوانند از طریق یک شبکه خصوصی با یکدیگر ارتباط برقرار کنند. میتوانید از آدرسهای IP عمومی استفاده کنید و فایروال سرور را طوری پیکربندی کنید که اجازه ترافیک در پورت 2049 را فقط از منابع مطمئن بدهد.
ماشین های موجود در این مثال دارای IP های زیر هستند:
NFS Server IP: 192.168.33.10 NFS Clients IPs: From the 192.168.33.0/24 range
اگر قصد خرید سرور مجازی با کیفیت و با قیمت مناسب نیاز دارید، همین حالا میتوانید آن را در صفحه خرید سرور مجازی ایران سفارش دهید.
راه اندازی سرور NFS
اولین قدم راه اندازی سرور NFS است. ما پکیج های لازم را نصب می کنیم، دایرکتوری های NFS را ایجاد و اکسپورت می کنیم و فایروال را پیکربندی می کنیم.
نصب سرور NFS
پکیج سرور NFS پشتیبانی فضای کاربر مورد نیاز برای اجرای سرور هسته NFS را فراهم می کند. برای نصب پکیج، این دستور را اجرا کنید:
sudo apt install nfs-kernel-server
پس از اتمام نصب، خدمات NFS به طور خودکار شروع می شود.
در اوبونتو 20.04، NFS نسخه 2 غیرفعال است. نسخه های 3 و 4 فعال هستند. با اجرای دستور cat زیر می توانید آن را تأیید کنید:
sudo cat /proc/fs/nfsd/versions
خروجی :
-2 +3 +4 +4.1 +4.2
NFSv2 اکنون بسیار قدیمی است و دلیلی برای فعال کردن آن وجود ندارد.
پیکربندی سرور NFS در فایل های /etc/default/nfs-kernel-server و /etc/default/nfs-common تعریف شده است. تنظیمات پیش فرض برای اکثر موقعیت ها کافی است.
ایجاد فایل سیستم ها
سرور NFS v4 از یک دایرکتوری ریشه جهانی استفاده می کند و دایرکتوری های اکسپورت شده نسبت به این دایرکتوری هستند. میتوانید نقطه اتصال اشتراکگذاری را به دایرکتوریهایی که میخواهید صادر کنید، با استفاده از اتصال اتصال پیوند دهید.
در این مثال، دایرکتوری /srv/nfs4 را به عنوان ریشه NFS تنظیم می کنیم. برای توضیح بهتر نحوه پیکربندی مانتهای NFS، دو دایرکتوری (/var/www و /opt/backups) را با تنظیمات پیکربندی مختلف به اشتراک میگذاریم. /var/www/ متعلق به کاربر www-data و /opt/backups متعلق به root است.
ابتدا دایرکتوری ریشه و نقاط اتصال اشتراک را ایجاد کنید:
sudo mkdir -p /srv/nfs4/backups sudo mkdir -p /srv/nfs4/www
اتصال دایرکتوری ها به نقاط اتصال اشتراکی:
sudo mount --bind /opt/backups /srv/nfs4/backups sudo mount --bind /var/www /srv/nfs4/www
برای دائمی کردن اتصالات در راه اندازی مجدد، فایل /etc/fstab را باز کنید:
sudo nano /etc/fstab
و خطوط زیر را اضافه کنید:
/opt/backups /srv/nfs4/backups none bind 0 0 /var/www /srv/nfs4/www none bind 0 0
اکسپورت کردن سیستم فایل ها در سرور NFS
گام بعدی اضافه کردن فایل سیستمهایی است که صادر میشوند و کلاینتها اجازه دسترسی به آن اشتراکها را به فایل /etc/exports دارند.
هر خط برای یک فایل سیستم اکسپورت شده به شکل زیر است:
export host(options)
در جایی که اکسپورت دایرکتوری انجام شده است، میزبان یک نام میزبان یا آدرس IP/محدوده است که می تواند به اکسپورت ها دسترسی داشته باشد و گزینه ها گزینه های میزبان هستند.
فایل /etc/exports را باز کنید و خطوط زیر را اضافه کنید:
sudo nano /etc/exports
/srv/nfs4 192.168.33.0/24(rw,sync,no_subtree_check,crossmnt,fsid=0) /srv/nfs4/backups 192.168.33.0/24(ro,sync,no_subtree_check) 192.168.33.3(rw,sync,no_subtree_check) /srv/nfs4/www 192.168.33.20(rw,sync,no_subtree_check)
خط اول حاوی گزینه fsid=0 است که دایرکتوری ریشه NFS (/srv/nfs4) را تعریف می کند. دسترسی به این حجم NFS فقط برای مشتریان از زیرشبکه 192.168.33.0/24 مجاز است. گزینه crossmnt برای به اشتراک گذاری دایرکتوری هایی که زیر شاخه های یک دایرکتوری صادراتی هستند مورد نیاز است.
خط دوم نحوه تعیین چندین قانون اکسپورت را برای یک فایل سیستم نشان می دهد. دسترسی خواندن به کل محدوده 192.168.33.0/24 مجاز است و دسترسی خواندن و نوشتن فقط به آدرس IP 192.168.33.3 مجاز است. گزینه sync به NFS میگوید قبل از پاسخ دادن، تغییرات را روی دیسک بنویسد.
برای اطلاعات بیشتر درباره همه گزینههای موجود، man exports را در ترمینال خود تایپ کنید.
فایل را ذخیره کنید و اشتراکها را اکسپورت کنید:
sudo exportfs -ar
هر بار که فایل /etc/exports را تغییر می دهید، باید دستور بالا را اجرا کنید. در صورت وجود هر گونه خطا یا هشدار، در ترمینال نشان داده می شود.
برای مشاهده اکسپورت فعال فعلی و وضعیت آنها از این دستور استفاده کنید:
sudo exportfs -v
همانطور که می بینید گزینه هایی نیز وجود دارد که ما آنها را در فایل /etc/exports تعریف نکرده ایم. اینها گزینههای پیشفرض هستند و اگر میخواهید آنها را تغییر دهید، باید به صراحت آن گزینهها را تنظیم کنید.
/srv/nfs4/backups 192.168.33.3(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash) /srv/nfs4/www 192.168.33.20(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash) /srv/nfs4 192.168.33.0/24(rw,wdelay,crossmnt,root_squash,no_subtree_check,fsid=0,sec=sys,rw,secure,root_squash,no_all_squash) /srv/nfs4/backups 192.168.33.0/24(ro,wdelay,root_squash,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)
در اوبونتو، root_squash به طور پیش فرض فعال است. این یکی از مهم ترین گزینه های مربوط به امنیت سرور NFS است. با نگاشت root UID و GID به Nobody/nogroup UID/GID از دسترسی کاربران روت متصل به کلاینت ها بر روی اشتراک گذاری های نصب شده جلوگیری می کند.
برای اینکه کاربران در ماشین های کلاینت دسترسی داشته باشند، NFS انتظار دارد شناسه های کاربر و گروه مشتری با شناسه های روی سرور مطابقت داشته باشد. گزینه دیگر استفاده از ویژگی NFSv4 idmapping است که شناسه های کاربر و گروه را به نام و برعکس ترجمه می کند.
در این مرحله، شما یک سرور NFS بر روی سرور اوبونتو خود راه اندازی کرده اید. اکنون می توانید به مرحله بعدی بروید و کلاینت ها را پیکربندی کنید و به سرور NFS متصل شوید.
پیکربندی فایروال
اگر جنکینز را روی یک سرور اوبونتو راه دور نصب میکنید که توسط فایروال محافظت میشود، باید ترافیک در پورت NFS را فعال کنید:
sudo ufw allow from 192.168.33.0/24 to any port nfs
بررسی تغییر:
sudo ufw status
خروجی باید نشان دهد که ترافیک در پورت 2049 مجاز است:
To Action From -- ------ ---- 2049 ALLOW 192.168.33.0/24 22/tcp ALLOW Anywhere 22/tcp (v6) ALLOW Anywhere (v6)
راه اندازی سرویس گیرندگان سرور NFS
اکنون که سرور NFS راهاندازی شده و اشتراکها اکیپورت میشوند، گام بعدی پیکربندی کلاینتها و سوار کردن فایلسیستمهای راه دور است.
ما بر روی سیستمهای لینوکس تمرکز خواهیم کرد، اما شما همچنین میتوانید اشتراک NFS را روی ماشینهای macOS و Windows نصب کنید.
نصب کلاینت NFS
در ماشین های سرویس گیرنده، ما باید فقط ابزارهای مورد نیاز برای نصب یک سیستم فایل NFS راه دور را نصب کنیم.
- نصب کلاینت NFS روی دبیان و اوبونتو
نام پکیجی که شامل برنامه هایی برای نصب سیستم های فایل NFS بر روی توزیع های مبتنی بر دبیان است nfs-common است. برای نصب آن، اجرا کنید:
sudo apt update sudo apt install nfs-common
- نصب کلاینت NFS را روی CentOS و Fedora
در Red Hat و مشتقات آن، پکیج nfs-utils را نصب کنید:
sudo yum install nfs-utils
مانت کردن سیستم فایل
ما روی ماشین کلاینت با IP 192.168.33.20 کار خواهیم کرد که دسترسی خواندن و نوشتن به سیستم فایل /srv/nfs4/www و دسترسی فقط خواندنی به سیستم فایل /srv/nfs4/backups دارد.
دو دایرکتوری جدید برای نقاط اتصال ایجاد کنید:
sudo mkdir -p /backups sudo mkdir -p /srv/www
شما می توانید دایرکتوری ها را در هر مکانی که می خواهید ایجاد کنید.
فایل سیستم های اکسپورت شده را با دستور mount Mount کنید:
sudo mount -t nfs -o vers=4 192.168.33.10:/backups /backups sudo mount -t nfs -o vers=4 192.168.33.10:/www /srv/www
جایی که 192.168.33.10 IP سرور NFS است. همچنین میتوانید از نام میزبان به جای آدرس IP استفاده کنید، اما باید توسط دستگاه مشتری قابل حل باشد. این معمولاً با نگاشت نام میزبان به IP در فایل /etc/hosts انجام می شود.
هنگام نصب فایل سیستم NFSv4، دایرکتوری ریشه NFS را حذف کنید. به جای /srv/nfs4/backups از /backups استفاده کنید.
بررسی کنید که فایل سیستم های راه دور با استفاده از دستور mount یا df با موفقیت نصب شده اند:
df -h
این دستور تمام فایل سیستم های نصب شده را چاپ می کند.
Filesystem Size Used Avail Use% Mounted on udev 951M 0 951M 0% /dev tmpfs 199M 676K 199M 1% /run /dev/sda3 124G 2.8G 115G 3% / tmpfs 994M 0 994M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 994M 0 994M 0% /sys/fs/cgroup /dev/sda1 456M 197M 226M 47% /boot tmpfs 199M 0 199M 0% /run/user/1000 192.168.33.10:/backups 124G 2.8G 115G 3% /backups 192.168.33.10:/www 124G 2.8G 115G 3% /srv/www
برای دائمی کردن مانت ها در راه اندازی مجدد، فایل /etc/fstab را باز کنید و خطوط زیر را اضافه کنید:
sudo nano /etc/fstab
192.168.33.10:/backups /backups nfs defaults,timeo=900,retrans=5,_netdev 0 0 192.168.33.10:/www /srv/www nfs defaults,timeo=900,retrans=5,_netdev 0 0
برای اطلاعات در مورد گزینه های موجود هنگام نصب فایل سیستم NFS، man nfs را در ترمینال خود تایپ کنید.
گزینه دیگر برای نصب فایل سیستم های راه دور، استفاده از ابزار autofs یا ایجاد یک واحد سیستم است.
تست دسترسی به سرور NFS
اجازه دهید دسترسی به اشتراکها را با ایجاد یک فایل جدید در هر یک از آنها آزمایش کنیم.
ابتدا سعی کنید با استفاده از دستور touch یک فایل آزمایشی در پوشه /backups ایجاد کنید:
sudo touch /backups/test.txt
سیستم فایل پشتیبان / به صورت فقط خواندنی صادر می شود و همانطور که انتظار می رود پیام خطای Permission denied را مشاهده خواهید کرد:
touch: cannot touch ‘/backups/test’: Permission denied
سپس، سعی کنید با استفاده از دستور sudo یک فایل آزمایشی در پوشه /srv/www به عنوان ریشه ایجاد کنید:
sudo touch /srv/www/test.txt
اگر به یاد داشته باشید، دایرکتوری var/www متعلق به کاربر www-data است، و این اشتراک دارای مجموعه گزینه root_squash است که کاربر ریشه را به کاربر nobody و گروه nogroup که مجوز نوشتن برای اشتراک راه دور ندارند، نگاشت می کند.
با فرض اینکه شما از www-data استفاده می کنید در ماشین کلاینت با همان UID و GID که در سرور راه دور وجود دارد (که برای مثال اگر nginx را روی هر دو ماشین نصب کرده باشید، باید اینطور باشد)، می توانید سعی کنید یک فایل ایجاد کنید. به عنوان کاربر www-data:
sudo -u www-data touch /srv/www/test.txt
دستور هیچ خروجی را نشان نمی دهد که به این معنی است که فایل با موفقیت ایجاد شده است.
برای تأیید آن، فایلهای موجود در فهرست /srv/www را فهرست کنید:
ls -la /srv/www
Unmount کردن سیستم فایل NFS
اگر اشتراک NFS راه دور دیگر مورد نیاز نیست، می توانید آن را مانند هر سیستم فایل نصب شده دیگر با استفاده از دستور umount جدا کنید.
به عنوان مثال، برای جدا کردن اشتراک /backup، باید اجرا کنید:
sudo umount /backups
اگر نقطه اتصال در فایل /etc/fstab تعریف شده است، مطمئن شوید که خط را حذف کرده اید یا با اضافه کردن # در ابتدای خط، آن را کامنت کنید.
اگر قصد خرید سرور مجازی با کیفیت و با قیمت مناسب نیاز دارید، همین حالا میتوانید آن را در صفحه خرید سرور مجازی ایران سفارش دهید.
Conclusion
ما به شما نشان دادهایم که چگونه یک سرور NFS را راهاندازی کنید و چگونه سیستمهای فایل راه دور را روی ماشینهای کلاینت نصب کنید. اگر از سرور NFS در تولید و به اشتراک گذاری اطلاعات استفاده می کنید، ایده خوبی است که احراز هویت kerberos را فعال کنید.