
Среда:
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://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
Цитата:
Чтобы изменить уровень шифрования общего доступа к файлам в Центре управления сетями и общим доступом
Откройте Панель управления и нажмите/коснитесь значка Центр управления сетями и общим доступом.
Нажмите/коснитесь ссылки «Изменить дополнительные параметры общего доступа» слева (см. снимок экрана ниже).
Разверните сетевой профиль «Все сети».
В разделе «Подключения для общего доступа к файлам» выберите «Включить общий доступ к файлам для устройств, использующих 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 для удаленного доступа к общим ресурсам и обслуживания, поэтому будьте осторожны.
Это может помочь лучше понять последствия, поэтому будьте уверены, что вы действительно хотите это сделать:
#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.