เซิร์ฟเวอร์ samba Linux: cifs_mount ล้มเหลวด้วยโค้ดส่งคืน = -12


16

เซิร์ฟเวอร์: RHEL 5.9 / smbd 3.0.33 - ลูกค้า: หลากหลายแม้ว่าทุกคนกำลังใช้ mount.cifs ปัจจุบัน (5.2)

ฉันแก้ไขปัญหานี้ไปแล้ว แต่มันเป็นฝันร้ายที่จะตามล่ารหัสข้อผิดพลาดเหล่านี้ฉันรู้สึกว่ามันต้องการเอกสารสากล

อาการ : ไม่สามารถคาดเดาได้และความล้มเหลวในการเมาท์เป็นระยะ ๆ จากไคลเอนต์ cifs หนึ่งไปยังเซิร์ฟเวอร์ samba ของ linux ลูกค้า linux ทั้งหมดของฉันใช้ที่บ้าน pam_mount เมื่อล็อกอิน แบบสุ่มและประปรายม้า dir บ้านเริ่มที่จะล้มเหลวในหนึ่งเครื่อง การเข้าสู่ระบบและการติดตั้งยังคงทำงานอย่างไม่มีที่ติกับไคลเอนต์อื่น ๆ ทั้งหมด ตอนแรกฉันคิดว่ากิจกรรมที่ผิดปกติในไคลเอนต์ที่ใช้งานไม่ได้นั้นทำให้ smbd เป็นคนที่คลั่งไคล้

ความพยายามในการเมาท์ด้วยมือล้มเหลวและรายงาน:

Errors from underlying mount program
mount error(12): Cannot allocate memory
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

ตั้งค่า<debug enable="1"/>ใน /etc/security/pam_mount.conf.xml เพื่อรับข้อมูลเพิ่มเติมจาก pam_mount:

command: 'mount' '-t' 'cifs' '//my_server/watdo' '/home/watdo' '-o' 'user=watdo,uid=666,gid=666'
pam_mount(misc.c:38): set_myuid<pre>: (ruid/rgid=0/0, e=0/0)
pam_mount(misc.c:38): set_myuid<post>: (ruid/rgid=0/0, e=0/0)
pam_mount(mount.c:64): Errors from underlying mount program:
pam_mount(mount.c:68): mount error(12): Cannot allocate memory
pam_mount(mount.c:68): Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)`

/var/log/kern.log ยังรายงานเกี่ยวกับเหตุการณ์นี้:

kernel: [4316790.256149] CIFS VFS: cifs_mount failed w/return code = -12

'echo 1> / proc / fs / cifs / cifsFYI' cranksอัพดีบัก mount.cifs (เขียนไปยัง / var / log / debug) นี่คือส่วนที่ดี (ดูคุ้นเคย):

CIFS Session Established successfully
For smb_command 117
Sending smb:  total_len 88
cifs_sync_mid_result: cmd=117 mid=54307 state=4
Mapping smb error code 0xc0000205 to POSIX err -12

ณ จุดนี้ไม่มีข้อมูลอื่น ๆ ที่แท้จริงที่ด้านลูกค้า คำขอเมาท์ cifs ดับและลูกค้าเกือบจะตายในทันที ข้อผิดพลาดของ mount.cifs (12) ค่อนข้างไม่ผิดเพี้ยน (man page ช่วยไม่ได้ขอบคุณ) การค้นหาทางอินเทอร์เน็ตอย่างกว้างขวางพบว่านี่เป็นรหัสข้อผิดพลาดทั่วไปนอกจากนี้ยังยืนยันว่าไม่เป็นทางการ

ได้เวลาตรวจสอบเซิร์ฟเวอร์แล้ว! ตั้งค่าlog level = 3สำหรับ smbd ใน /etc/samba/smb.conf (จากหนังสือการใช้ Samba: "ระดับที่สูงกว่า 3 นั้นใช้สำหรับนักพัฒนาและทิ้งข้อมูลที่เป็นความลับจำนวนมหาศาล" lol!) นี่คือบรรทัดที่เกี่ยวข้อง:

[2013/02/08 10:18:03, 3] smbd/error.c:error_packet_set(106) error packet at smbd/reply.c(514) cmd=117 (SMBtconX) NT_STATUS_INSUFF_SERVER_RESOURCES

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

smbstatus -S | grep <serverIP> | wc -lกลับ2048 เด่นมาก

ตรวจสอบผลลัพธ์ของรายการที่smbstatus -Sเปิดเผยหลายพันรายการสำหรับ 'IPC $' แซมบ้าเอกสารเกี่ยวกับ IPC $เปิดเผยว่ามีส่วนเกี่ยวข้องกับการสืบค้นแบบไม่เปิดเผยชื่อและการเข้าถึง "แหล่งข้อมูลอื่น ๆ " ฉันตั้งค่าโฮสต์ปฏิเสธบนเซิร์ฟเวอร์ใน /etc/samba/smb.conf:

[IPC$]
hosts deny = 0.0.0.0/0

ใช้งานได้ดีในขณะนี้ ตกลงหวังว่าบางสิ่งบางอย่างที่นี่จะช่วยให้วิญญาณที่น่าสงสารบางครั้งในอนาคต

ฉันเดาด้วยจิตวิญญาณของเว็บไซต์ฉันจะถามคำถาม: ทำไม smbd จะไม่ล้างข้อมูล IPC $ ที่แชร์กัน เหตุใดจึงต้องสร้าง IPC $ หนึ่งรายการต่อการเชื่อมต่อผู้ใช้เพื่อแบ่งปันมากกว่าหนึ่งรายการต่อการเชื่อมต่อลูกค้า คุณสามารถปิดใช้งานการสร้างการแชร์ IPC $ จากฝั่งไคลเอ็นต์ได้หรือไม่ มีวิธีเพิ่มการเชื่อมต่อสูงสุด # ต่อการแชร์ (ไม่ใช่ว่าจะเป็นประโยชน์ในกรณีนี้) ฉันไม่เห็นมันในเอกสาร


"สุ่มและเป็นระยะ", "ความล้มเหลวเป็นระยะ ๆ " และข้อผิดพลาดในการจัดสรรหน่วยความจำ - คุณตรวจสอบข้อผิดพลาดของหน่วยความจำ (จริง) หรือไม่
ckujau

1
การแชร์ IPC $ นั้นมีการเข้าถึงในบริบทต่อผู้ใช้เสมอเนื่องจากเป็นอินเทอร์เฟซสำหรับการเรียกขั้นตอนระยะไกล (ในโลก MSFT) จริงๆ (ในโลก MSFT) นั่นคือการแชร์ IPC $ ให้ผู้ใช้มีช่องทางในการรับรองความถูกต้องกับบริการเซิร์ฟเวอร์เพื่อให้พวกเขาสามารถทำการโทร RPC ได้ มันเป็นวิธีปฏิบัติด้านความปลอดภัยที่ดีที่จะปิดใช้งานหากคุณไม่จำเป็นต้องใช้มัน (และฉันมีเวลายากที่จะเชื่อว่าทุกคนทำ)
AlwaysLearning

ขอบคุณสำหรับตัวอย่างโดยละเอียดของการแก้ไขปัญหา samba ข้อความแสดงข้อผิดพลาดนามธรรมเป็นฝันร้าย
mmv-ru

คำตอบ:


1

นี่เป็นรุ่นเก่า แต่เมื่อพิจารณาแล้วว่ายังไม่ได้รับคำตอบและฉันกำลังมองหา IPC $ และ Samba ฉันจะลองใช้เพื่อดูเอกสาร

เหตุใด smbd จึงไม่ล้างข้อมูล IPC $ ที่แชร์

ตามที่ระบุไว้ข้างต้นในความคิดเห็นต่อคำถามของคุณบริการนี้ใช้สำหรับการดูแลระบบระยะไกลและการสื่อสารระหว่างเซิร์ฟเวอร์โดยเฉพาะอย่างยิ่งในแซมบ้าที่ใช้สำหรับการเรียกดูและเพื่อวัตถุประสงค์ tcp / ip เว้นแต่คุณจะต้องการด้วยเหตุผลบางอย่างหรือบางสิ่งบางอย่างไม่ทำงานก็ปลอดภัยที่จะปิดการใช้งาน [1]

เหตุใดจึงต้องสร้าง IPC $ หนึ่งรายการต่อการเชื่อมต่อผู้ใช้เพื่อแบ่งปันมากกว่าหนึ่งรายการต่อการเชื่อมต่อลูกค้า

เนื่องจากผู้ใช้สามารถมีการเชื่อมต่อไคลเอนต์หลาย

คุณสามารถปิดใช้งานการสร้างการแชร์ IPC $ จากฝั่งไคลเอ็นต์ได้หรือไม่

ใช่และไม่. มันไม่ได้ปิดใช้งานการสร้างการแชร์ IPC $ แต่คุณสามารถปิดการเข้าถึงได้จากไคลเอนต์ windows [2]

สำหรับ windows Vista, Windows 7, Windows 8 และ Windows 10 คุณสามารถแก้ไขรีจิสทรีต่อไปนี้ได้:

  1. คลิกเริ่มพิมพ์“ regedit” ในกล่องค้นหาแล้วคลิก regedit.exe ในผลลัพธ์การค้นหา กล่องโต้ตอบการควบคุมบัญชีผู้ใช้จะปรากฏขึ้น
  2. พูดว่า“ ใช่” ในพรอมต์ UAC และ Registry Editor ควรเปิดขึ้น
  3. เปิดสาขา HKEY_LOCAL_MACHINE
  4. เปิดสาขา SYSTEM
  5. เปิดสาขา CurrentControlSet
  6. เปิดสาขาบริการ
  7. เปิดสาขา LanmanServer
  8. เลือกสาขาพารามิเตอร์
  9. เลือกแก้ไขใหม่“ ค่า DWORD (32 บิต)”
  10. พิมพ์“ AutoShareWks” แล้วกด Enter (ปล่อยค่าเริ่มต้นเป็น 0)
  11. เริ่มต้นใหม่หรือเริ่มบริการใหม่โดยใช้พร้อมท์คำสั่ง (DOS หรือเทอร์มินัล):“ เซิร์ฟเวอร์หยุดสุทธิ” จากนั้น“ เซิร์ฟเวอร์เริ่มต้นสุทธิ”

มีวิธีเพิ่มการเชื่อมต่อสูงสุด # ต่อการแชร์ (ไม่ใช่ว่าจะเป็นประโยชน์ในกรณีนี้) ฉันไม่เห็นมันในเอกสาร

ใช่ [3] ด้านล่างการแบ่งปันเพียงป้อนข้อมูล:

[share]
   max connections = ##

โดยที่ XX คือจำนวนการเชื่อมต่อ

แหล่งที่มา:

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