Назад | Перейти на главную страницу

Redhat 5 с Samba 3.6 приводит к системной ошибке 58 в Windows 7

В настоящее время я пытаюсь вернуть к жизни старый автономный сервер Samba Share, работающий на Redhat 5! Раньше он работал с версией 3.0, из-за множества проблем я решил обновить до версии 3.6 с официальным пакетом. Теперь я правильно запускаю samba 3.6 на Radhat 5

Red Hat Enterprise Linux Server release 5.11 (Tikanga)

Samba version 3.6.23-12.el5_11

Вот мой вывод testparm:

Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[diro]"
Processing section "[dirt]"
Processing section "[dire]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions

[global]
        workgroup = DUMMY
        server string = Samba %v
        interfaces = 127.0.0.1, eth0
        bind interfaces only = Yes
        client ipc signing = auto
        printcap name = cups
        idmap config * : backend = tdb
        cups options = raw

[diro]
        path = /home/diro
        valid users = usero
        read only = No
        create mask = 0664
        directory mask = 0775

[dirt]
        path = /home/diro/t
        valid users = usero
        read only = No
        create mask = 0777
        directory mask = 0777

[dire]
        path = /home/diro/e
        valid users = usert
        read only = No
        create mask = 0777
        directory mask = 0777

полный smb.conf:

[global]
        workgroup = DUMMY
        server string = Samba %v
        interfaces = 127.0.0.1 eth0
        bind interfaces only = true
        printing = cups
        printcap name = cups
        load printers = yes
        client ipc signing = auto
        client signing = auto
        log level = 3
        min protocol = core
        map to guest = Bad User
        security = user
        passdb backend = tdbsam
        load printers = yes
        cups options = raw
[diro]
        path = /home/diro
        valid users = usero
        read only = No
        create mask = 0664
        directory mask = 0775

[dirt]
        path = /home/diro/t
        valid users = usero
        read only = No
        create mask = 0777
        directory mask = 0777

[dire]
        path = /home/diro/e
        valid users = usert
        read only = No
        create mask = 0777
        directory mask = 0777

Я могу подключиться к одному из общих ресурсов с localhost:

>$ smbclient //DUMMYMO/diro -U usero usero
Domain=[DUMMY] OS=[Unix] Server=[Samba 3.6.23-12.el5_11]
smb: \>

Это хорошо, но мне все еще интересно, почему это не работает на машине с Windows 7:

>$ net use x: \\DUMMYMO\diro /user:usero usero
System error 58 has occurred.

The specified server cannot perform the requested operation.

Установив уровень журнала на 3, я могу видеть эти строки журнала во время попытки подключения Windows:

[2017/11/06 15:12:46.107877,  3] lib/access.c:338(allow_access)
  Allowed connection from XXX.XXX.XXX.XXX (XXX.XXX.XXX.XXX)
[2017/11/06 15:12:46.108026,  3] smbd/oplock.c:922(init_oplocks)
  init_oplocks: initializing messages.
[2017/11/06 15:12:46.108087,  3] smbd/oplock_linux.c:246(linux_init_kernel_oplocks)
  Linux kernel oplocks enabled
[2017/11/06 15:12:46.108167,  3] smbd/process.c:1609(process_smb)
  Transaction 0 of length 109 (0 toread)
[2017/11/06 15:12:46.108198,  3] smbd/process.c:1414(switch_message)
  switch message SMBnegprot (pid 13707) conn 0x0
[2017/11/06 15:12:46.108463,  3] smbd/negprot.c:598(reply_negprot)
  Requested protocol [NotSmb]
[2017/11/06 15:12:46.108496,  3] smbd/negprot.c:598(reply_negprot)
  Requested protocol [NotSmb]
[2017/11/06 15:12:46.108517,  3] smbd/negprot.c:598(reply_negprot)
  Requested protocol [NotSmb]
[2017/11/06 15:12:46.108537,  3] smbd/negprot.c:598(reply_negprot)
  Requested protocol [NotSmb]
[2017/11/06 15:12:46.108556,  3] smbd/negprot.c:598(reply_negprot)
  Requested protocol [NotSmb]
[2017/11/06 15:12:46.108576,  3] smbd/negprot.c:598(reply_negprot)
  Requested protocol [NotSmb]
[2017/11/06 15:12:46.108595,  3] smbd/negprot.c:598(reply_negprot)
  Requested protocol [SMB 2.002]
[2017/11/06 15:12:46.108615,  3] smbd/negprot.c:598(reply_negprot)
  Requested protocol [SMB 2.???]
[2017/11/06 15:12:46.108669,  0] smbd/negprot.c:706(reply_negprot)
  No protocol supported !
[2017/11/06 15:12:46.110716,  1] smbd/process.c:457(receive_smb_talloc)
  receive_smb_raw_talloc failed for client XXX.XXX.XXX.XXX read error = NT_STATUS_CONNECTION_RESET.
[2017/11/06 15:12:46.110790,  3] smbd/server_exit.c:181(exit_server_common)
  Server exit (failed to receive smb request)

Это сетевая трассировка:

>$ sudo tcpdump -i eth0 -nn "tcp port 445"
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
15:21:05.292627 IP XXX.XXX.XXX.XXX.54997 > YYY.YYY.YYY.YYY.445: S 946161236:946161236(0) win 8192 <mss 1380,nop,wscale 8,nop,nop,sackOK>
15:21:05.292732 IP YYY.YYY.YYY.YYY.445 > XXX.XXX.XXX.XXX.54997: S 2489729164:2489729164(0) ack 946161237 win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 7>
15:21:05.294416 IP XXX.XXX.XXX.XXX.54997 > YYY.YYY.YYY.YYY.445: . ack 1 win 258
15:21:05.294748 IP XXX.XXX.XXX.XXX.54997 > YYY.YYY.YYY.YYY.445: P 1:110(109) ack 1 win 258
15:21:05.294772 IP YYY.YYY.YYY.YYY.445 > XXX.XXX.XXX.XXX.54997: . ack 110 win 46
15:21:05.298603 IP YYY.YYY.YYY.YYY.445 > XXX.XXX.XXX.XXX.54997: P 1:42(41) ack 110 win 46
15:21:05.300286 IP XXX.XXX.XXX.XXX.54997 > YYY.YYY.YYY.YYY.445: R 110:110(0) ack 42 win 0

Как упоминалось в журнале, клиент отправляет флаг RST сразу после ответа сервера, и я не знаю почему. Я уже пробовал много решений, таких как протокол min, подписывание сервера без успеха.

У меня кончились решения .. Есть ли у вас предложения?

Обратите внимание, что у меня нет прав администратора на моем рабочем столе, и я предполагаю, что многие параметры накладываются доменом.

Благодаря подсказке MadHatter я смог решить проблему: клиенту просто требуется SMB2 вместо SMB3. Этот трюк можно легко применить в конфигурации в разделе Global:

максимальный протокол = SMB2