使用最少的 SMB2 从 Linux 命令行访问 Windows 10 Samba 共享

Den*_*lte 4 debian samba windows-10

环境:

  • 带有 Debian 9.3 的 Linux X86 服务器

  • 内核:Debian 4.9.65-3+deb9u1

  • smbclient:版本 4.5.12-Debian

  • cifs-utils: 2:6.7-1

情况:

Backupserver ( backuppc) 必须备份 Windows 10 Home 客户端。

没有域

选择:

由于涉及手动工作,用于其他 Win7 客户端的 Cygwin/Rsync 被拒绝。

已知先决条件:

  • Win10Client 的 DNS 条目:完成、测试和工作

  • Win10Client 的 DHCP 条目:完成、测试和工作

  • SMB1 是不安全的,所以不要走“简单的方法”。

smbclient 支持 SMB2/3 协议,所以我不必设置 smb1 注册表来启用 SMB1,例如

如何检查 Windows Server 2008 R2 上启用了哪个 SMB 版本

问题:我无法挂载管理或任何其他共享,也看不到它们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
Run Code Online (Sandbox Code Playgroud)

我如何让它与 SMB2 或 SMB3 协议一起工作?

Den*_*lte 8

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

报价:

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.
Run Code Online (Sandbox Code Playgroud)

根据我的研究,它也不在扩展向后移植中(cifs-utils 支持 4.11 的内核更改?)

https://packages.debian.org/stretch-backports/allpackages 
Run Code Online (Sandbox Code Playgroud)

但是,我不确定 backport 部分,因为有更新的内核,但就我而言,我不会为此功能升级到 backport 内核,所以我在这里停了下来。


smbtree 需要更多参数才能使用 SMB3

我不太清楚如何让 smbtree 与 SMB3 一起工作,尽管我在上面发现了这个问题,但我完全放弃了 SMB3 的想法。

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


smbclient 默认不使用 SMB2 或 SMB3。

smbclient 的 smb 协议的默认版本是

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}
Run Code Online (Sandbox Code Playgroud)

使能够:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 1 –Force
Run Code Online (Sandbox Code Playgroud)

禁用:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 0 –Force
Run Code Online (Sandbox Code Playgroud)

这取自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/
Run Code Online (Sandbox Code Playgroud)

smbclient -m SMB2 -U WIN10Username -L //Client/
Run Code Online (Sandbox Code Playgroud)

可让您查看该客户的份额。

作为控制台实际访问它的 mountparam :

mount -t cifs -o vers=2.0,username=WIN10Username,password=WIN10Password //CLIENTIP/TESTSHARE MOUNTPOINT
Run Code Online (Sandbox Code Playgroud)

或作为 /etc/fstab 条目(启动时不自动挂载!)

 //CLIENTIP/TESTSHARE /MOUNTPOINT    cifs    vers=2.0,username=WIN10Username,password=WIN10Password 0 0
Run Code Online (Sandbox Code Playgroud)

行政份额

对于管理共享,您必须进行一项额外的注册表更改(如果您不在域中):

Powershell 命令:

Set-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\ -Name LocalAccountTokenFilterPolicy -Value 1 
Run Code Online (Sandbox Code Playgroud)

取自这里:

无法在 ubuntu 中挂载 Windows 共享

基本上它的作用是禁用 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
Run Code Online (Sandbox Code Playgroud)

备份电脑问题:

您将需要另一个特定于 backuppc 的帐户,该帐户必须具有共享的读取权限。

backuppcs smbclient 默认选项不包括 -m SMB2

backuppc 使用的命令是:

/usr/bin/smbclient \\\\CLIENT-NAME\\SHARENAME -U Win10Username -E -N -d 1 -c tarmode\ full -Tc -
Run Code Online (Sandbox Code Playgroud)

将其更改为包括 -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
Run Code Online (Sandbox Code Playgroud)

在 -U 后添加密码手动执行

/usr/bin/smbclient -m SMB2 \\\\CLIENT-NAME\\SHARENAME -U Win10Username WIN10Password -E -N -d 1 -c tarmode\ full -Tc -
Run Code Online (Sandbox Code Playgroud)

作品

删除 -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
Run Code Online (Sandbox Code Playgroud)

域=[CLIENTNAME] OS=[] Server=[] ... cut

非工作版本-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
Run Code Online (Sandbox Code Playgroud)

Backuppc Win10 客户端工作解决方案

鉴于以上所有信息,我可以使用以下 backuppc 选项备份 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.
Run Code Online (Sandbox Code Playgroud)

信用文件:

$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.
Run Code Online (Sandbox Code Playgroud)