Сервер Linux samba: сбой cifs_mount с кодом возврата = -12


16

Сервер: RHEL 5.9 / smbd 3.0.33 - Клиенты: разные, хотя все использовали текущий mount.cifs (5.2)

Я уже решил эту проблему, но это был такой кошмар, чтобы выслеживать эти коды ошибок, я чувствовал, что нужно всеобщее документирование.

Симптомы : непредсказуемый, прерывистый сбой монтирования одного конкретного клиента cifs на сервер samba linux. Все мои клиенты под Linux pam_mount находятся дома при входе в систему. Случайно и время от времени домашние каталоги монтировались на одной машине. Логины и маунты продолжали безупречно работать на всех остальных клиентах. Сначала я думал, что необычная активность на сломанном клиенте приводит к сбою 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

'Эхо 1> / Proc / фс / CIFS / cifsFYI' чудаки до mount.cifs отладки (запись в / вар / журнала / отладки). Вот хорошая часть (выглядит знакомо?):

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) довольно неинформативна (справочная страница не помогает, ребята). Обширный поиск в Интернете показывает, что это распространенный код ошибки, а также подтверждает его неинформативность.

Время проверить на сервере! Установите 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 $». Документы Samba по IPC $ показывают, что он связан с просмотром анонимных ресурсов и доступом к «некоторым другим ресурсам». Я установил запрет хоста на сервере в /etc/samba/smb.conf:

[IPC$]
hosts deny = 0.0.0.0/0

Отлично работает сейчас. Хорошо, надеюсь, что-то здесь поможет бедной душе когда-нибудь в будущем.

Наверное, в духе сайта я задам вопрос: почему бы smbd не очистить акции IPC $? Зачем устанавливать один IPC $ на подключение пользователя к общему ресурсу, а не один на подключение клиента? Можно ли отключить создание общего ресурса IPC $ на стороне клиента? Есть ли способ увеличить max # соединений на акцию (не то, что это помогло бы в этом случае)? Я не видел это в документах.


«Случайно и случайно», «периодические сбои» и ошибки выделения памяти - проверяли ли вы (физические) ошибки памяти?
ckujau

1
Доступ к общему ресурсу IPC $ всегда осуществляется в контексте каждого пользователя, поскольку в действительности это (в мире MSFT) интерфейс удаленного вызова процедур (RPC). Таким образом, общий ресурс IPC $ дает пользователю канал для аутентификации в службе сервера, чтобы он мог затем выполнять вызовы RPC. Хорошей практикой безопасности является отключение, если вам это не нужно (и мне трудно поверить, что кто-то это делает).
AlwaysLearning

Спасибо за подробный пример устранения неполадок Samba. Абстрактные сообщения об ошибках это кошмар.
mmv-ru

Ответы:


1

Это старенькое, но, учитывая, что оно осталось без ответа, и я изучал IPC $ и Samba, я попробую его для документации.

Почему бы smbd не очистить акции IPC $?

Как указано выше в комментариях к вашему вопросу, служба используется для удаленного администрирования и связи между серверами, и, в частности, в Samba она используется для некоторых целей просмотра и tcp / ip. Если вам это не нужно по какой-то причине или что-то не работает, его безопасно отключить. [1]

Зачем устанавливать один IPC $ на подключение пользователя к общему ресурсу, а не один на подключение клиента?

Потому что пользователь может иметь несколько клиентских подключений.

Можно ли отключить создание общего ресурса IPC $ на стороне клиента?

Да и нет. На самом деле это не отключает создание общего ресурса IPC $, но вы можете отключить доступ к нему из клиента Windows. [2]

Для Windows Vista, Windows 7, Windows 8 и Windows 10 вы можете сделать следующее редактирование реестра:

  1. Нажмите «Пуск», введите «regedit» в поле поиска, а затем нажмите regedit.exe в результатах поиска. Откроется диалоговое окно контроля учетных записей.
  2. Скажите «Да» на приглашение UAC, и редактор реестра должен открыться.
  3. Откройте ветку HKEY_LOCAL_MACHINE.
  4. Откройте ветку СИСТЕМА.
  5. Откройте ветку CurrentControlSet.
  6. Откройте ветку Сервисы.
  7. Откройте ветку LanmanServer.
  8. Выберите ветку Параметры.
  9. Выберите Edit, New, «DWORD (32-bit) Value»
  10. Введите «AutoShareWks» и нажмите Enter. (Оставьте значение по умолчанию 0.)
  11. Перезагрузите или перезапустите службу с помощью командной строки (DOS или терминал): «сервер остановки сети», затем «сервер запуска сети».

Есть ли способ увеличить max # соединений на акцию (не то, что это помогло бы в этом случае)? Я не видел это в документах.

Да [3]. Ниже доли просто введите:

[share]
   max connections = ##

Где XX - количество соединений.

Источники:

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.