Linux samba-сервер: cifs_mount не вдається w / return code = -12


16

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

Я вже вирішив цю проблему, але для пошуку цих кодів помилок був такий кошмар, я відчував, що це потребує універсального документування.

Симптоми : непередбачуваний, переривчастий збій монтажу від одного конкретного клієнта cifs до сервера linux samba. Усі мої клієнти linux пам’ятіть будинки користувачів під час входу. Випадково та епізодично кріплення домашнього режиму почали виходити з ладу на одній машині. Логіни та кріплення продовжували бездоганно працювати на всіх інших клієнтів. Спочатку я думав, що незвичний обсяг активності на зламаному клієнті спричиняє 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) є досить неінформативною (man page не допомагає, THX хлопці). Розширений пошук в Інтернеті виявляє, що це звичайний код помилки, а також підтверджує його як неінформативний.

Час перевірити на сервері! Встановіть 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 $ від клієнта? Чи є спосіб збільшити максимум # з'єднань на одну акцію (не те, що це допомогло б у цьому випадку)? Я не бачив цього в документах.


"Випадково та епізодично", "періодичні збої" та помилки розподілу пам'яті - чи перевіряли ви (фізичні) помилки пам'яті?
ckujau

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

Дякуємо за детальний приклад усунення несправностей 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. Виберіть "Правка", "Нове", значення "DWORD (32-бітове)"
  10. Введіть “AutoShareWks” та натисніть Enter. (Залиште значення за замовчуванням 0.)
  11. Перезавантажте або перезапустіть послугу, використовуючи командний рядок (DOS або термінал): «сервер чистого зупинки», а потім «сервер чистого запуску».

Чи є спосіб збільшити максимум # з'єднань на одну акцію (не те, що це допомогло б у цьому випадку)? Я не бачив цього в документах.

Так [3]. Нижче лише введіть частку:

[share]
   max connections = ##

Де XX - кількість з'єднань.

Джерела:

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.