Linux samba sunucusu: cifs_mount, dönüş kodu olmadan başarısız oldu = -12


16

Sunucu: RHEL 5.9 / smbd 3.0.33 - İstemciler: çeşitli, hepsi geçerli mount.cifs kullanıyor olsa da (5.2)

Bu sorunu zaten çözdüm, ancak bu hata kodlarını avlamak öyle bir kabustu ki evrensel belgelemeye ihtiyaç duyduğunu hissettim.

Belirtiler : Belirli bir cifs istemcisinden linux samba sunucusuna öngörülemeyen, aralıklı bağlama hatası. Tüm linux müşterilerim pam_mount kullanıcı evlerini girişte. Rastgele ve ara sıra ev dirsekleri bir makinede arızalanmaya başladı . Girişler ve bağlantılar diğer tüm istemcilerde kusursuz bir şekilde çalışmaya devam etti. Başlangıçta kırık istemcideki alışılmadık miktarda aktivitenin smbd'nin çıldırmasına neden olduğunu düşündüm, ancak kullanım kaybolduktan sonra bile aralıklı arızalar devam etti.

Elle monte etme denemesi başarısız olur ve raporlar:

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"/>Pam_mount'tan daha fazla bilgi almak için /etc/security/pam_mount.conf.xml dosyasında ayarlayın :

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 da bu olayla ilgili şunları bildirdi:

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

'eko 1> / proc / fs / cifs / cifsFYI' Cranks kadar mount.cifs ayıklama (/ var / log / debug yazıyor). İşte iyi kısmı (tanıdık görünüyorsun?):

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

Bu noktada tam anlamıyla müşteri tarafında başka bilgi mevcut değildir. cifs mount isteği söner ve istemci hemen ölür. mount.cifs hatası (12) oldukça bilgilendirici değildir (man sayfası yardımcı olmaz, thx guys). Kapsamlı internet araması, bunun yaygın bir hata kodu olduğunu ortaya koyuyor ve aynı zamanda bilgilendirici olmadığını da doğruladı.

Sunucu üzerinde kontrol zamanı! Set log level = 3/etc/samba/smb.conf SMBD için (kullanma Samba kitaptan: "3'ün üzerinde Düzeyleri geliştiriciler tarafından kullanılmak içindir ve şifreli bilgilerin büyük miktarlarda dökümü." Lol!). İlgili satır:

[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

Neredeyse orada ... smb posta listesi arşivinden benzer bir sorunu bildiren birini buldum, bireysel bir smb bağlantısında sabit bir pay limiti olarak tanımlandı. Sunucudaki açık paylaşımları listeleyin:

smbstatus -S | grep <serverIP> | wc -l2048 döndü . Çok dikkat çekici.

Aslında çıktısını inceleyerek smbstatus -Sortaya binlerce 'IPC $' için girişlerden. IPC $ üzerindeki Samba dokümanları, anonim paylaşım taraması ve "diğer bazı kaynaklara" erişim ile ilgili olduğunu ortaya koyuyor. /Etc/samba/smb.conf dizininde sunucuda host inkar ayarladım:

[IPC$]
hosts deny = 0.0.0.0/0

Şimdi harika çalışıyor. Tamam, umarım burada bir şeyler gelecekte biraz zaman zaman bazı fakir ruhlara yardımcı olur.

Sanırım sitenin ruhu içinde bir soru soracağım: Neden smbd IPC $ paylaşımları temizlemek olmaz? İstemci bağlantısı başına bir bağlantı yerine neden bir paylaşıma kullanıcı başına bir IPC $ oluşturmalıyım? IPC $ paylaşım oluşturmayı istemci tarafından devre dışı bırakabilir misiniz? Paylaşım başına maksimum # bağlantıyı artırmanın bir yolu var mı (bu durumda bu yardımcı olabilirdi)? Belgelerde görmedim.


"Rastgele ve düzensiz", "aralıklı hatalar" ve bellek ayırma hataları - (fiziksel) bellek hatalarını kontrol ettiniz mi ?
ckujau

1
IPC $ paylaşımına her zaman kullanıcı başına bağlamda erişilir, çünkü gerçekten (MSFT dünyasında) bir uzaktan yordam çağrısı (RPC) arabirimidir. Yani, IPC $ paylaşımı bir kullanıcıya Sunucu hizmetinde kimlik doğrulaması yapması için bir kanal verir, böylece RPC çağrıları yapabilir. İhtiyacınız yoksa devre dışı bırakmak iyi bir güvenlik uygulamasıdır (ve tbh kimsenin inandığına inanmakta zorlanıyorum).
AlwaysLearning

Samba sorun giderme işleminin ayrıntılı örneği için teşekkürler. Soyut hata mesajları kabus.
mmv-ru

Yanıtlar:


1

Bu bir ihtiyar, ancak yanıtsız olduğunu ve IPC $ ve Samba içine bakıyordu düşünüyor, ben belge uğruna bir deneyeceğim.

Smbd neden IPC $ paylaşımlarını temizlemiyor?

Yukarıda sorunuzun yorumlarında belirtildiği gibi, hizmet sunucular arasında uzaktan yönetim ve iletişim için kullanılır ve özellikle Samba'da bazı tarama ve tcp / ip amaçları için kullanılır. Herhangi bir nedenle ihtiyacınız olmadığı veya bir şey çalışmadığı sürece, devre dışı bırakmak güvenlidir. [1]

İstemci bağlantısı başına bir bağlantı yerine neden bir paylaşıma kullanıcı başına bir IPC $ oluşturmalıyım?

Çünkü bir kullanıcının birden fazla istemci bağlantısı olabilir.

IPC $ paylaşım oluşturmayı istemci tarafından devre dışı bırakabilir misiniz?

Evet ve hayır. IPC $ paylaşımının oluşturulmasını gerçekten devre dışı bırakmaz, ancak Windows istemcisinden ona erişimi devre dışı bırakabilirsiniz. [2]

Windows Vista, Windows 7, Windows 8 ve Windows 10 için aşağıdaki kayıt defteri düzenlemesini yapabilirsiniz:

  1. Başlat'a tıklayın, Arama kutusuna “regedit” yazın ve arama sonuçlarında regedit.exe'ye tıklayın. Kullanıcı Hesabı Denetimi iletişim kutusu görüntülenir.
  2. UAC istemine “Evet” deyin ve Kayıt Defteri Düzenleyicisi açılmalıdır.
  3. HKEY_LOCAL_MACHINE dalını açın.
  4. SYSTEM kolunu açın.
  5. CurrentControlSet dalını açın.
  6. Hizmetler dalını açın.
  7. LanmanServer dalını açın.
  8. Parametreler dalını seçin.
  9. Düzenle, Yeni, “DWORD (32 bit) Değeri” ni seçin
  10. “AutoShareWks” yazın ve Enter tuşuna basın. (Varsayılan 0 değerini bırakın.)
  11. Komut İstemi (DOS veya terminal) kullanarak hizmeti yeniden başlatın veya yeniden başlatın: “net stop server” ve “net start server”.

Paylaşım başına maksimum # bağlantıyı artırmanın bir yolu var mı (bu durumda bu yardımcı olabilirdi)? Belgelerde görmedim.

Evet: 3]. Sadece paylaşımın altında girdi:

[share]
   max connections = ##

Burada XX, bağlantı sayısıdır.

Kaynaklar:

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.