mount.nfs: การเข้าถึงถูกปฏิเสธโดยเซิร์ฟเวอร์ขณะติดตั้งบนเครื่อง Ubuntu?


64

ฉันมีเครื่องจักรสามเครื่องในการผลิต -

machineA    10.66.136.129
machineB    10.66.138.181
machineC    10.66.138.183

และเครื่องทั้งหมดนั้นมี Ubuntu 12.04 ติดตั้งอยู่ในนั้นและฉันมีสิทธิ์เข้าถึงรูทของทั้งสามเครื่อง

ตอนนี้ฉันน่าจะทำสิ่งต่าง ๆ ในเครื่องด้านบนของฉัน -

Create mount point /opt/exhibitor/conf
Mount the directory in all servers.
 sudo mount <NFS-SERVER>:/opt/exhibitor/conf /opt/exhibitor/conf/

ฉันได้สร้าง/opt/exhibitor/confไดเรกทอรีในทั้งสามเครื่องดังกล่าวข้างต้นแล้ว

ตอนนี้ฉันกำลังพยายามสร้าง Mount Point ดังนั้นฉันจึงปฏิบัติตามกระบวนการด้านล่าง -

ติดตั้งไฟล์สนับสนุน NFS และเคอร์เนลเซิร์ฟเวอร์ NFS ในเครื่องสามเครื่องด้านบนทั้งหมด

$ sudo apt-get install nfs-common nfs-kernel-server

สร้างไดเรกทอรีที่ใช้ร่วมกันในทั้งสามเครื่องด้านบน

$ mkdir /opt/exhibitor/conf/

แก้ไข/etc/exportsและเพิ่มรายการเช่นนี้ในสามเครื่องด้านบน -

# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#
/opt/exhibitor/conf/     10.66.136.129(rw)
/opt/exhibitor/conf/     10.66.138.181(rw)
/opt/exhibitor/conf/     10.66.138.183(rw)

ฉันได้ลองติดตั้งบน machineA เช่นด้านล่างจาก machineB และ machineC และทำให้ฉันมีข้อผิดพลาดนี้ -

root@machineB:/# sudo mount -t nfs 10.66.136.129:/opt/exhibitor/conf /opt/exhibitor/conf/
mount.nfs: access denied by server while mounting 10.66.136.129:/opt/exhibitor/conf

root@machineC:/# sudo mount -t nfs 10.66.136.129:/opt/exhibitor/conf /opt/exhibitor/conf/
mount.nfs: access denied by server while mounting 10.66.136.129:/opt/exhibitor/conf

/etc/exportsไฟล์ของฉันดูดีหรือไม่? ฉันค่อนข้างแน่ใจว่าฉันทำexportsไฟล์ของฉันยุ่ง เนื่องจากฉันมีเนื้อหาเหมือนกันในทั้งสามเครื่องในการส่งออกไฟล์

มีความคิดอะไรผิดหรือเปล่าที่ฉันทำที่นี่? และสิ่งที่จะเป็น/exportsไฟล์ที่ถูกต้องที่นี่


1
FYI ตรวจสอบสองสิทธิ์บนโฮสต์ / ไคลเอนต์ หากโฮสต์ NFS มีสิทธิ์ใช้งาน0750หรือ0700ไคลเอนต์ที่พยายามจะเมานต์มีแนวโน้มที่จะล้มเหลวด้วยข้อความแสดงข้อผิดพลาดเดียวกันนี้ ฉันเปลี่ยนโฮสต์จาก0750เป็น0755แล้วข้อผิดพลาดก็หายไปและทุกอย่างก็ดี
เทรเวอร์บอยด์สมิ ธ

คำตอบ:


70

exportfs

เมื่อคุณสร้าง/etc/exportsไฟล์บนเซิร์ฟเวอร์คุณต้องแน่ใจว่าคุณส่งออก โดยทั่วไปแล้วคุณจะต้องการเรียกใช้คำสั่งนี้:

$ exportfs -a

สิ่งนี้จะส่งออกรายการทั้งหมดในไฟล์ส่งออก

showmount

สิ่งอื่น ๆ ที่ฉันมักจะทำคือจากเครื่องอื่นฉันจะตรวจสอบเครื่องที่ส่งออกการแบ่งปัน NFS ไปยังเครือข่ายโดยใช้showmountคำสั่ง

$ showmount -e <NFS server name>

ตัวอย่าง

พูดเช่นฉันเข้าสู่ระบบสกัลลี

$ showmount -e mulder
Export list for mulder:
/export/raid1/isos     192.168.1.0/24
/export/raid1/proj     192.168.1.0/24
/export/raid1/data     192.168.1.0/24
/export/raid1/home     192.168.1.0/24
/export/raid1/packages 192.168.1.0/24

fstab

หากต้องการเมานต์เหล่านี้เมื่อบูทคุณต้องเพิ่มบรรทัดนี้ไปยังเครื่องไคลเอนต์ของคุณที่ต้องการใช้การเมาท์ NFS

server:/shared/dir /opt/mounted/dir nfs rsize=8192,wsize=8192,timeo=14,intr

automounting

หากคุณกำลังจะได้รับการรีบูตเครื่องเซิร์ฟเวอร์เหล่านี้แล้วผมขอแนะนำให้คุณดูในการตั้งค่า automounting ( autofs) /etc/fstabแทนการเพิ่มรายการเหล่านี้จะ มันใช้งานได้มากกว่า แต่ก็คุ้มค่ากับความพยายาม

การทำเช่นนี้จะช่วยให้คุณสามารถรีบูตเซิร์ฟเวอร์ได้อย่างอิสระมากขึ้นจากกันและยังจะสร้างการเมานต์ NFS เมื่อจำเป็นจริง ๆ และ / หรือการใช้งานจริง เมื่อไม่ได้ใช้งานระบบจะยกเลิกการต่อเชื่อม

อ้างอิง


ขอบคุณสำหรับคำแนะนำ ฉันทำอย่างนั้นและตอนนี้ก็ใช้ได้ดี แทนที่จะวิ่งฉันวิ่งexportfs -a exportfs -rvมีความแตกต่างระหว่างสิ่งเหล่านี้หรือไม่? และในกรณีของshowmount -e 10.66.136.129ฉันฉันจะทำจาก machineB และ machineC ขวา?
คลังแสง

1
@TechGeeky - ไม่จริง exportfs -rvการส่งออกใหม่ + เป็น verbose -aจะส่งออกทุกอย่าง ในฐานะที่เป็นshowmount -eใช่คุณสามารถเรียกใช้งานจากเครื่องเหล่านั้นหรืออย่างใดอย่างหนึ่งที่ให้บริการในหุ้น
slm

โอเค .. ขอบคุณความรู้สึก makese ตอนนี้ .. สิ่งสุดท้าย ฉันเชื่อว่ามีอีกสิ่งหนึ่งสำหรับสิ่งที่จุดเมานท์นี้ไฟล์ fstab .. ถูกต้อง? ตอนนี้ไฟล์ fstab ของเครื่องไหนฉันควรจะแก้ไข? และฉันควรเพิ่มเนื้อหาใดลงในนั้น ความคิดใด ๆ
คลังแสง

@TechGeeky ดูการอัปเดต คุณเพิ่มรายการไปยังไคลเอนต์ที่ต้องการใช้การแบ่งปัน NFS
slm

1
บน Ubuntu คุณต้องติดตั้ง nfs-kernel-server ก่อนเพื่อให้สามารถส่งออกได้ ที่มา: manpages.ubuntu.com/manpages/trusty/man8/exportfs.8.html
flickerfly

40

ฉันเห็นข้อผิดพลาดเดียวกัน ( mount.nfs: access denied by server while mounting...) และปัญหาได้รับการแก้ไขโดย-o v3ตัวเลือกดังนี้:

$ sudo mount -o v3 a-nfs-server:/path/to/export /path/to/mount
  • เซิร์ฟเวอร์คือ Ubuntu 14.04 64 บิต LTS
  • ลูกค้าคือ CentOS 6.5 64 บิต

2
ส่วนที่เหลือไม่ได้ช่วยนี่เป็นวิธีแก้ปัญหาในกรณีของฉัน
Urhixidur

1
mount.nfs: Connection timed outฉันพยายามนี้และได้ (ไคลเอ็นต์คือ Ubuntu 14.04 LTS 64 บิตเซิร์ฟเวอร์เป็น QNAP NFS พร้อม QTS 4.0.2 2016/01/09)
Steve

ใช่ตอนที่ฉันอัพเกรดเซิร์ฟเวอร์เป็น Ubuntu 16 นี่เป็นปัญหาและวิธีแก้ไข
Sridhar Sarnobat

2
ระวังด้วยนะ NFSv3 เก่าและล้าสมัยมานาน ไม่ควรใช้อีกต่อไป (และนี่ก็เป็นจริงเมื่อโพสต์นี้เขียน)
Michael Hampton

7

ในกรณีของฉันทำงานโดยใช้ nfs4 ทำ:

$ sudo mount -t nfs4 ชื่อเซิร์ฟเวอร์: / / path / to / mount

ใน/etc/exportไฟล์บนเซิร์ฟเวอร์

/Path/to/export 192.168.1.0/24(rw,sync,fsid=0,no_root_squash,crossmnt,no_subtree_check,no_acl)

fsid=0ทำให้/Path/to/exportไดเรกทอรีรูทเมื่อคุณเมาท์การแชร์

crossmntเนื่องจากฉันมีไดรฟ์อื่น ๆ ในระบบไฟล์ที่ส่งออกที่ฉันต้องการเข้าถึงด้วย

no_root_squashเนื่องจากฉันต้องการเข้าถึงในฐานะผู้ใช้รูท (su) จากฝั่งไคลเอ็นต์ ฉันค่อนข้างแน่ใจว่าฉันเป็นคนเดียวที่สามารถทำได้ในเครือข่ายท้องถิ่นของฉัน

เซิร์ฟเวอร์และไคลเอนต์คือ Ubuntu 14.04 64 บิต

หากคุณต้องการใช้ nfs3 คำตอบของ @ fumisky-wells ก็เหมาะกับฉันเช่นกัน


คุณได้รับตัว upvote คุณ; ฉันมี NAS ดังนั้นการแก้ไขไฟล์ / etc / export ไม่ใช่ตัวเลือก แต่การระบุพา ธ ที่สมบูรณ์นั้นเป็นกลอุบาย ทำได้ดี.
MDMoore313

4

ฉันได้รับข้อความแสดงข้อผิดพลาดเดียวกันและปัญหาของฉันกลายเป็นเพราะเครื่องไคลเอนต์ที่มีการเชื่อมต่อเครือข่ายสองเชื่อมต่อกับ LAN เดียวกัน เซิร์ฟเวอร์ได้รับการกำหนดค่าให้คาดหวังว่าที่อยู่ IP ที่เฉพาะเจาะจงและปริมาณการใช้งานกำลังจะออกไปบนอินเทอร์เฟซที่สองที่มีที่อยู่ IP dhcp ดังนั้นฉันจึงกำหนดค่าอินเทอร์เฟซที่สองให้มีที่อยู่ IP แบบคงที่และยังเพิ่มที่อยู่ IP แบบที่สองในการกำหนดค่าเซิร์ฟเวอร์


ผู้ชายฉันหวังว่านี่จะยิ่งขึ้นไปข้างบนนั่นคือสิ่งที่เกิดขึ้นในกรณีของฉัน
Brian Leishman

3

/etc/exportsจำเป็นต้องได้รับการแก้ไขบนเครื่องเซิร์ฟเวอร์ NFS ไม่ใช่ไคลเอนต์ตามที่คุณระบุเนื่องจากมีการตรวจสอบโดยเซิร์ฟเวอร์ NFS เมื่อไคลเอนต์ร้องขอการเข้าถึงการแชร์

หากคุณใส่สิ่งต่อไปนี้ใน/etc/exportsเซิร์ฟเวอร์ NFS มันควรจะทำงานได้:

/opt/exhibitor/conf 10.66.136.129(rw)
/opt/exhibitor/conf 10.66.138.181(rw)
/opt/exhibitor/conf 10.66.138.183(rw)

ฉันมีสิ่งนี้ในไฟล์ส่งออกของฉันบน machineA แล้ว จากนั้นฉันกำลังติดตั้งจาก machineB และ machineC และมันก็ใช้งานไม่ได้ .. เป็นไปได้ไหมที่ฉันจะเพิ่มข้อมูลเดิมลงในไฟล์ส่งออกทั้งสามเครื่องนั่นจะเป็นปัญหาหรือไม่? ฉันควรจะเพิ่มเฉพาะใน machineA หรือไม่
คลังแสง

1
@TechGeeky คุณโหลดการส่งออก NFS อีกครั้งหลังจากทำอย่างนั้นexportfs -aใช่ไหม
Chris Down

ฉันทำอย่างนั้นและตอนนี้ก็ใช้ได้ดี ฉันพยายามที่จะเข้าใจสิ่งทั้งหมดนี้ในวิธีที่ดีกว่าดังนั้นคำถามแรกของฉันคือ machineA คือเซิร์ฟเวอร์ NFS และ machineB และ machineC เป็นลูกค้า .. ถูกต้องหรือไม่ คำถามที่สองคือถ้า machineA เป็นเซิร์ฟเวอร์ NFS ของฉันเฉพาะในไฟล์ / etc / exports ของ machineA ฉันจะเพิ่มสามบรรทัดข้างต้นตามที่คุณกล่าวถึงในโซลูชันของคุณและเราจะไม่แตะไฟล์ส่งออกของ machineB และ machineC? แก้ไข?
คลังแสง

@TechGeeky ตราบใดที่คุณติดตั้งส่วนแบ่งในเครื่อง A นั่นก็ถูกต้องทั้งสองกรณี
Chris Down

ขอบคุณ ตอนนี้ฉันเข้าใจสิ่งนี้ดีขึ้นมาก ทำไมฉันถามคำถามนี้เพราะฉันมีสิ่งที่คล้ายกันในสภาพแวดล้อมการจัดเตรียม และสิ่งที่ฉันทำในสามเครื่องเหล่านั้นในสภาวะแวดล้อมการจัดเตรียมฉันเพิ่มสามบรรทัดเดียวกันในไฟล์ / etc / exports ทั้งหมดของสามเครื่องแทนที่จะเพิ่มเฉพาะใน machineA แต่ก็ยังใช้งานได้ดี และตอนนี้ฉันเข้าใจแนวคิดทั้งหมดอย่างชัดเจนยิ่งขึ้นแล้ว ขอบคุณสำหรับความช่วยเหลือ
คลังแสง

2

หากไคลเอ็นต์ nfs กำลังพยายามเมาท์ส่วนแบ่งที่ส่งออกภายในคอนเทนเนอร์ linux คอนเทนเนอร์ควรทำงานในโหมดที่ได้รับสิทธิ

ในกรณีที่นักเทียบท่า;

$ docker run -it --rm --privileged ubuntu:14.04


2

สำหรับฉันปัญหาคือว่าฉันใช้ที่อยู่ IP ของเซิร์ฟเวอร์/etc/exports/แทนลูกค้าหนึ่ง

สิ่งคือคุณควรใส่รหัสทั้งหมดที่คุณให้สิทธิ์การเข้าถึงบนเซิร์ฟเวอร์ /etc/exports/


1

หลังจากต่อสู้กับข้อผิดพลาดเดียวกันหลายชั่วโมงปัญหาของฉันกลับกลายเป็นว่าไม่มีอะไรซับซ้อนกว่าการอนุญาตไฟล์ Linux แบบเก่าที่ดีในโฮสต์ NFS

โฟลเดอร์ที่ฉันพยายามแบ่งปัน ( /home/foo/app/share) มีสิทธิ์ที่ถูกต้อง แต่เนื่องจากไดเรกทอรีหลักของผู้ใช้ ( /home/foo) มี0750โหมดอยู่ NFS จึงไม่สามารถข้ามเข้าไปในนั้นเพื่อเข้าถึง dir ที่แชร์

ทันทีที่ฉันตั้งค่าโฮมไดเร็กตอรี่ของผู้ใช้เป็นโหมด0751, บริการ NFS ก็สามารถเข้าไปในนั้นและฉันสามารถเมานต์การแชร์จากเครื่องไคลเอนต์ของฉัน


0

สำหรับฉันปัญหาคือว่าเราเตอร์ของฉันเปลี่ยนที่อยู่ IP ที่ใช้ของลูกค้าเพื่อให้รายการใน/etc/exportsเครื่องเซิร์ฟเวอร์อนุญาตให้เข้าถึงเฉพาะสำหรับที่อยู่ IP ที่ไม่ได้ใช้อีกต่อไป


0

สิ่งเดียวที่อาจเกิดขึ้นหากคุณพยายามที่จะติดหุ้น NFS NATอินสแตนซ์กล่องเสมือนกับอะแดปเตอร์เครือข่ายที่กำหนดค่าไว้

การเลือกการBridged Adapterตั้งค่าเครือข่ายเครื่องเสมือนช่วยแก้ไขปัญหานี้



0

ข้อผิดพลาดนี้อาจเกิดจากการพยายามเมานต์เส้นทางที่เข้ารหัส (ตัวอย่างเช่นในไดเรกทอรีบ้านของคุณหากคุณเลือกที่จะเข้ารหัส)


0

/srvทางออกเดียวที่ทำงานสำหรับฉันคือการส่งออกระบบไฟล์ที่เริ่มต้นด้วย ดูเหมือนว่านี่เป็นข้อ จำกัด (หรือตัวเลือกเริ่มต้นอย่างน้อย) ของ NFSv4

ตั้งแต่ฉันพยายามส่งออกไดรฟ์ USB /mediaที่ติดตั้งโดย/srvอัตโนมัติฉันจึงต้องหาวิธีที่จะ 'เมาท์' ภายใต้ เพื่อให้บรรลุผลนั้น:

sudo mkdir /srv/videos
sudo mount --bind /media/jim/wdportable/videos /srv/videos

และใน/etc/exports:

/srv/videos 192.168.0.200(ro)

เมื่อฉันส่งออกโดยตรงพยายามที่จะติดบนไคลเอนต์ผลเสมอใน/media/jim/wdportable/videosmount.nfs: access denied by server

-o v3แก้ปัญหาการทำงาน แต่ฉันไม่ต้องการที่จะบังคับให้ v3


2
ฉันเกือบจะรับประกันได้ว่าสิ่งนี้จะเกิดขึ้นเนื่องจากการอนุญาตใน/media/jimโฟลเดอร์ หากไดเรกทอรีที่คุณพยายามแบ่งปันคือ (หรืออยู่ใน) ไดเรกทอรีที่มีเพียง700หรือ750โหมด NFS จะไม่สามารถข้ามไปได้ หากคุณเปลี่ยน/media/jimไป751ก็อาจจะทำงาน
Dale Anderson

@DaleAnderson ถูกต้อง หลังจากประสบความสำเร็จsudo mount -o v3 192.168.0.200:"/media/pi/mydrive" /mnt/nfs-share(raspbian บน Raspi 3 B +) ฉันก็ลองทำsudo chmod 751 /media/piเช่นกัน หลังจากนั้นฉันก็ไม่ต้องการ-o v3อีกแล้ว: sudo mount 192.168.0.200:"/media/pi/mydrive" /mnt/nfs-shareทำงาน (หลังจากเลิกเมานท์) ขอขอบคุณ @DaleAnderson
โทมัส Praxl

นี่อาจเป็นปัญหา ฉันเดาว่าฉันคุ้นเคยกับสมัยโบราณเมื่อเซิร์ฟเวอร์ NFS เพิ่งรันในฐานะ root และส่งออกสิ่งที่ถูกบอกกล่าว ฉันจะทดสอบสิ่งนี้
Jim Stewart

0

ควรสังเกตว่าหน้าที่เชื่อมโยงซึ่งนำฉันมาที่นี่มีคำตอบที่ถูกต้องซึ่งคุณไม่สามารถใช้ * wildcard ในที่อยู่ IP ในการส่งออกได้ เป็น * (IP ทั้งหมด) หรือใช้เป็นสัญลักษณ์แทนในชื่อโดเมน IE: * .domain.com

เช่นนี้ถูกต้อง

/Path/to/export 192.168.1.0/24(flags)

สิ่งนี้จะไม่ทำงาน (หรืออย่างน้อยก็ไม่ถูกต้อง) แต่ได้ผลสำหรับฉันเป็นเวลาหลายปีจนกระทั่งฉันลองติดตั้งการส่งออกจาก Fedora VM

/Path/to/export 192.168.1.*(flags)


ฉันคิดว่าเหตุผลที่มันล้มเหลวอาจเป็นเพราะ NFSv4 เพราะฉันรู้ว่า Fedora มีอะไรใหม่และ VM เก่าของฉันก็ใช้งานได้ดี แต่อาจใช้ NFS เวอร์ชันเก่ากว่าได้ เพียงแค่เดา
FreeSoftwareServers
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.