Сервер Linux samba: сбой cifs_mount с кодом возврата = -12
Сервер: 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
'echo 1> / proc / fs / cifs / cifsFYI' запускает отладку 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) довольно неинформативна (справочная страница не помогает, ребята). Обширный поиск в Интернете показывает, что это распространенный код ошибки, а также подтверждает его неинформативность.
Время проверить на сервере! Задавать 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 # соединений на акцию (не то, что это помогло бы в этом случае)? Я не видел это в документах.
1 ответ
Это старая версия, но, учитывая, что она не получила ответа, и я изучил IPC$ и Samba, я попробую ее для документации.
Почему бы smbd не очистить акции IPC$?
Как указано выше в комментариях к вашему вопросу, служба используется для удаленного администрирования и связи между серверами, и, в частности, в Samba она используется для некоторых целей просмотра и tcp / ip. Если вам это не нужно по какой-то причине или что-то не работает, его безопасно отключить. [1]
Зачем устанавливать один IPC$ на соединение пользователя с общим ресурсом, а не одно на соединение клиента?
Потому что пользователь может иметь несколько клиентских подключений.
Можно ли отключить создание общего ресурса IPC$ со стороны клиента?
И да и нет. На самом деле это не отключает создание общего ресурса IPC$, но вы можете отключить доступ к нему из клиента Windows.[2]
Для Windows Vista, Windows 7, Windows 8 и Windows 10 вы можете сделать следующее редактирование реестра:
- Нажмите "Пуск", введите "regedit" в поле поиска, а затем нажмите regedit.exe в результатах поиска. Откроется диалоговое окно контроля учетных записей.
- Скажите "Да" на приглашение UAC, и редактор реестра должен открыться.
- Откройте ветку HKEY_LOCAL_MACHINE.
- Откройте ветку СИСТЕМА.
- Откройте ветку CurrentControlSet.
- Откройте ветку Сервисы.
- Откройте ветку LanmanServer.
- Выберите ветку Параметры.
- Выберите Edit, New, "DWORD (32-bit) Value"
- Введите "AutoShareWks" и нажмите Enter. (Оставьте значение по умолчанию 0.)
- Перезагрузите или перезапустите службу с помощью командной строки (DOS или терминал): "сервер остановки сети", затем "сервер запуска сети".
Есть ли способ увеличить max # соединений на акцию (не то, что это помогло бы в этом случае)? Я не видел это в документах.
Да [3]. Ниже доли просто введите:
[share]
max connections = ##
Где XX - количество соединений.
Источники:
- [1] https://www.samba.org/samba/docs/old/Samba3-HOWTO/securing-samba.html
- [2] https://www.petri.com/disable_administrative_shares
- [2] https://www.weavweb.net/2015/08/27/disabling-hidden-shares-in-windows-10-windows-vista-windows-7-and-windows-8-1/
- [2] https://support.microsoft.com/en-us/help/954422/how-to-remove-administrative-shares-in-windows-server-2008
- [3] https://www.samba.org/samba/docs/using_samba/ch09.html