Доступ к Windows 10 Samba Share из командной строки Linux с минимальным SMB2

Доступ к Windows 10 Samba Share из командной строки Linux с минимальным SMB2

Среда:

  • Linux X86 Server с Debian 9.3

  • ядро: Debian 4.9.65-3+deb9u1

  • smbclient: Версия 4.5.12-Debian

  • cifs-utils: 2:6.7-1

Ситуация:

Backupserver ( backuppc) должен выполнять резервное копирование клиента Windows 10 Home.

Нет домена

Альтернатива:

Использование Cygwin/Rsync для других клиентов Win7 отклонено из-за необходимости ручной работы.

Предпосылки уже известны:

  • DNS-запись для Win10Client: сделано, протестировано и работает

  • Запись DHCP для Win10Client: сделано, протестировано и работает

  • SMB1 небезопасен, поэтому не идите по «легкому пути».

Smbclient поддерживает протокол SMB2/3, поэтому мне не придется вносить изменения в реестр smb1, чтобы включить SMB1, например,

Как проверить, какая версия SMB включена в Windows Server 2008 R2

Проблемы:Я не могу подключить административный или любой другой ресурс, и я не вижу их с помощьюsmbtree -b -N

Что я пробовал:

  • Я пытался использовать неадминистративную папку ( $в конце стоит no)

  • Я переименовал административный ресурс из C$в mC$или mC.

  • Добавлен тестовый доступ к документам.

  • Добавлен тестовый ресурс вC:\test

Ни один из них не виден через smbtree.

Прямое подключение к общим ресурсам (или получение списка общих ресурсов):

протестировано:

smbclient -U WIN10Username -L //CLIENT/
protocol negotiation failed: NT_STATUS_CONNECTION_RESET

smbclient -L //CLIENT/
protocol negotiation failed: NT_STATUS_CONNECTION_RESET

Как заставить это работать с протоколом SMB2 или SMB3?

решение1

Ответ на инструкцию состоит из нескольких частей, поскольку ситуация может немного отличаться в зависимости от ваших потребностей.

Я включил в него все, что нашел (или считаю, что нашел) с помощью различных поисков, что помогло мне решить мою непосредственную проблему.

Ядро Debian 9 Stretch по умолчанию не поддерживает SMB3

Оказывается, мое ядро ​​не поддерживает SMB3 напрямую.

https://unix.stackexchange.com/questions/202961/mounting-smb3-share-with-encryption-fails-mount-error13-permission-denied-s/376166

На основеhttps://lists.debian.org/debian-kernel/2017/04/msg00266.html

цитата:

Am 22.04.2017 um 17:21 schrieb Ben Hutchings:

On Sat, 2017-04-22 at 16:19 +0100, Ben Hutchings wrote:

    On Sat, 2017-04-22 at 14:47 +0200, [email protected] wrote:

        Hi!

        It´s not possible to mount a enrypted CIFS Share yet. is it possible
        to add the following Kernel changes to Debian 8?

    No, we don't backport big features like that.

Of course, if this feature is in Linux 4.9 (I don't know) then you have
the option to install the new kernel version from jessie-backports
(https://backports.debian.org/).

Ben.

По моим исследованиям, его также нет в backports stretch (cifs-utils для поддержки изменения ядра с 4.11?)

https://packages.debian.org/stretch-backports/allpackages 

Однако я не уверен насчет бэкпорта, так как есть более новые ядра, но в моем случае я не буду обновляться до бэкпортированного ядра ради этой функции, поэтому я остановился на этом.


smbtree нужно больше параметров для работы с SMB3

Мне не сразу стало ясно, как заставить smbtree работать с SMB3, и после того, как я обнаружил проблему, описанную выше, я вообще отказался от идеи SMB3.

https://www.samba.org/samba/docs/current/man-html/smbtree.1.html


smbclient по умолчанию не использует SMB2 или SMB3.

Версия по умолчанию для протокола smb для smbclient —

СМБ1

По умолчанию в Windows 10 эта функция не поддерживается.

Если вам это нужно для вашего случая использования, вам необходимо добавить соответствующий ключ реестра:

HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\SMB1 (тип DWORD32, значение 1 для включения, 0 для выключения)

Команды Powershell:

Обнаружить:

Get-Item HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters | ForEach-Object {Get-ItemProperty $_.pspath}

Давать возможность:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 1 –Force

Запрещать:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 0 –Force

Это было взято изhttps://support.microsoft.com/en-us/help/2696547/how-to-detect-enable-and-disable-smbv1-smbv2-and-smbv3-in-windows-and

Возможно, вам придется изменить уровень шифрования общего доступа к файлам в Windows 10, чтобы SMB1 также заработал:

поскольку я не проверял это напрямую, я не знаю, действительно ли это необходимо:

Посмотрите, например, как это сделать здесь:

https://www.tenforums.com/tutorials/51024-change-file-sharing-encryption-level-windows-10-a.html

Цитата:

Чтобы изменить уровень шифрования общего доступа к файлам в Центре управления сетями и общим доступом

  1. Откройте Панель управления и нажмите/коснитесь значка Центр управления сетями и общим доступом.

  2. Нажмите/коснитесь ссылки «Изменить дополнительные параметры общего доступа» слева (см. снимок экрана ниже).

  3. Разверните сетевой профиль «Все сети».

  4. В разделе «Подключения для общего доступа к файлам» выберите «Включить общий доступ к файлам для устройств, использующих 40- или 56-битное шифрование».

Рабочие команды

Теперь, чтобы все заработало на самом деле

Неадминистративная доля:

изменение команды smbclient

smbclient -U WIN10Username -L //Client/

к

smbclient -m SMB2 -U WIN10Username -L //Client/

позволяет просматривать акции этого клиента.

В качестве параметра монтирования для консоли, чтобы получить к нему доступ:

mount -t cifs -o vers=2.0,username=WIN10Username,password=WIN10Password //CLIENTIP/TESTSHARE MOUNTPOINT

или как запись в /etc/fstab (без автомонтирования при загрузке!)

 //CLIENTIP/TESTSHARE /MOUNTPOINT    cifs    vers=2.0,username=WIN10Username,password=WIN10Password 0 0

Административная доля

Для административного общего ресурса вам необходимо сделать одно дополнительное изменение реестра (если вы не находитесь в домене):

Команда Powershell:

Set-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\ -Name LocalAccountTokenFilterPolicy -Value 1 

взято отсюда:

Невозможно смонтировать общий ресурс Windows в Ubuntu

По сути, он отключает UAC для удаленного доступа к общим ресурсам и обслуживания, поэтому будьте осторожны.

Это может помочь лучше понять последствия, поэтому будьте уверены, что вы действительно хотите это сделать:

https://www.harmj0y.net/blog/redteaming/pass-the-hash-is-dead-long-live-localaccounttokenfilterpolicy/

#note the \$ is actually needed!, i did read about Qouting the whole String "//CLIENTIP/C$" but i did not test that
mount -t cifs -o vers=2.0,username=WIN10Username,password=WIN10Password //CLIENTIP/C\$ MOUNTPOINT

Проблемы с резервным копированием:

Вам понадобится еще одна учетная запись, предназначенная для backuppc, которая должна иметь разрешения на чтение общего ресурса.

параметры backuppcs smbclient по умолчанию не включают -m SMB2

Команда backuppc использует:

/usr/bin/smbclient \\\\CLIENT-NAME\\SHARENAME -U Win10Username -E -N -d 1 -c tarmode\ full -Tc -

измените это, включив -m SMB2

После этого я все еще получаю NT_STATUS_ACCESS_DENIED:

session setup failed: NT_STATUS_ACCESS_DENIED
session setup failed: NT_STATUS_ACCESS_DENIED
tarExtract: Done: 0 errors, 0 filesExist, 0 sizeExist, 0 sizeExistComp, 0 filesTotal, 0 sizeTotal

сделать это вручную, добавив пароль после -U

/usr/bin/smbclient -m SMB2 \\\\CLIENT-NAME\\SHARENAME -U Win10Username WIN10Password -E -N -d 1 -c tarmode\ full -Tc -

работает

удаление -N запрашивает пароль, с которым это также работает.

Поскольку я не хотел сохранять его в файле конфигурации из backuppc, в окончательной версии я буду использовать метод учетных данных.

Попытавшись вручную выяснить, в чем разница между командой backuppc и командой smbclient, я понял, что -Nрезультаты приводят к разному поведению во время подключения.

рабочее решение без -N (с именем пользователя, паролем или файлом учетных данных, не имеет значения. Неадминистративный или административный общий доступ также ничего не изменил)

/usr/bin/smbclient -m SMB2 \\\\CLIENTNAME\\test3 -U WIN10Username WIN10Password -E -d 5 -c tarmode\ full -Tc -
/usr/bin/smbclient -m SMB2 \\\\CLIENTNAME\\test3 -A /etc/samba/smb.cred -E -d 5 -c tarmode\ full -Tc -


cut
...
NTLMSSP Sign/Seal - Initialising with flags:
Got NTLMSSP neg_flags=0x62088215
NTLMSSP_NEGOTIATE_UNICODE
NTLMSSP_REQUEST_TARGET
NTLMSSP_NEGOTIATE_SIGN
NTLMSSP_NEGOTIATE_NTLM
NTLMSSP_NEGOTIATE_ALWAYS_SIGN
NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY
NTLMSSP_NEGOTIATE_VERSION
NTLMSSP_NEGOTIATE_128
NTLMSSP_NEGOTIATE_KEY_EXCH
NTLMSSP Sign/Seal - Initialising with flags:
Got NTLMSSP neg_flags=0x62088215
NTLMSSP_NEGOTIATE_UNICODE
NTLMSSP_REQUEST_TARGET
NTLMSSP_NEGOTIATE_SIGN
NTLMSSP_NEGOTIATE_NTLM
NTLMSSP_NEGOTIATE_ALWAYS_SIGN
NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY
NTLMSSP_NEGOTIATE_VERSION
NTLMSSP_NEGOTIATE_128
NTLMSSP_NEGOTIATE_KEY_EXCH

Домен=[ИМЯ КЛИЕНТА] ОС=[] Сервер=[] ... вырезать

Нерабочая версия с -N:

/usr/bin/smbclient -m SMB2 \\\\CLIENTNAME\\test3 -U WIN10Username WIN10Password -N -E -d 5 -c tarmode\ full -Tc -
/usr/bin/smbclient -m SMB2 \\\\CLIENTNAME\\test3 -A /etc/samba/smb.cred -N -E -d 5 -c tarmode\ full -Tc -


cut
...
NTLMSSP Sign/Seal - Initialising with flags:
Got NTLMSSP neg_flags=0x62088215
NTLMSSP_NEGOTIATE_UNICODE
NTLMSSP_REQUEST_TARGET
NTLMSSP_NEGOTIATE_SIGN
NTLMSSP_NEGOTIATE_NTLM
NTLMSSP_NEGOTIATE_ALWAYS_SIGN
NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY
NTLMSSP_NEGOTIATE_VERSION
NTLMSSP_NEGOTIATE_128
NTLMSSP_NEGOTIATE_KEY_EXCH
SPNEGO login failed: Logon failure
...
cut
...
SPNEGO login failed: Access denied
session setup failed: NT_STATUS_ACCESS_DENIED

Рабочее решение Backuppc Win10 Client

Учитывая всю вышеизложенную информацию, я могу создать резервную копию административного ресурса Win10, используя следующие параметры резервного копирования:

SmbClientFullCmd:

Жестко закодировано:

$smbClientPath -m SMB2 \\$host\$shareName $I_option -U $userName WIN10Password -E -d 5 -c tarmode\ full -Tc$X_option - $fileList

I was unable to use the Password in SmbSharePasswd, but as this wasn't the desired output i did not dig deeper if i made an possible error here.

Кредитный файл:

$smbClientPath -m SMB2 \\$host\$shareName $I_option -A /PATH/samb_creditfile -E -d 5 -c tarmode\ full -Tc$X_option - $fileList


Remember you need permissions for the backuppc user on that file.

Связанный контент