Окружающая среда:
Сервер Linux X86 с Debian 9.3
ядро: Debian 4.9.65-3 + deb9u1
smbclient: Версия 4.5.12-Debian
cifs-utils: 2: 6.7-1
Ситуация:
Резервный сервер (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
Что я пробовал:
Я пытался использовать неадминистративный общий ресурс (нет $
в конце)
Я переименовал административный ресурс из 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?
Ответ на Howto включает несколько частей, так как ситуация может немного отличаться в зависимости от того, что вам нужно.
Я включил все, что нашел (или считаю, что нашел) с помощью различных поисков, которые помогли мне решить мою прямую проблему.
Оказывается, мое ядро не поддерживает SMB3 напрямую
На основе 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, и с проблемой, которую я выяснил выше, я вообще отказался от идеи SMB3.
https://www.samba.org/samba/docs/current/man-html/smbtree.1.html
Версия по умолчанию для протокола 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
Цитата:
Изменение уровня шифрования общего доступа к файлам в Центре управления сетями и общим доступом
Откройте панель управления и щелкните / коснитесь значка Центра управления сетями и общим доступом.
Щелкните / коснитесь ссылки «Изменить дополнительные параметры общего доступа» слева. (см. снимок экрана ниже)
Разверните сетевой профиль Все сети.
В разделе «Подключения к совместному использованию файлов» выберите «Разрешить общий доступ к файлам для устройств, использующих 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 для удаленного доступа к общим ресурсам и обслуживания, так что будьте осторожны.
Это может помочь лучше понять последствия, поэтому будьте уверены, действительно ли вы хотите это сделать:
#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
Учитывая всю приведенную выше информацию, я могу сделать резервную копию административного ресурса 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.