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

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

Окружающая среда:

Ситуация:

Резервный сервер (backuppc) необходимо сделать резервную копию клиента Windows 10 Home.

Нет домена

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

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

Предварительные условия уже известны:

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

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

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

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

Ничего из этого не видно через 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?

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

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

По умолчанию Debian 9 Stretch Kernel не поддерживает 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

qoute:

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, debian@alpenjodel.de 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:

SMB1

По умолчанию это не поддерживается в 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/

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

Как mountparam для консоли, чтобы получить к ней доступ:

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:

Вам понадобится другая учетная запись, предназначенная для 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.

Credfile:

$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.