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

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

环境:

  • 搭载 Debian 9.3 的 Linux X86 服务器

  • 内核:Debian 4.9.65-3+deb9u1

  • smbclient:版本 4.5.12-Debian

  • cifs-实用程序:2:6.7-1

情况:

备份服务器(backuppc)必须备份 Windows 10 家庭客户端。

无域名

选择:

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

已知的先决条件:

  • Win10Client 的 DNS 条目:已完成、已测试且正常运行

  • Win10Client 的 DHCP 条目:已完成、已测试且正常运行

  • SMB1 不安全,所以不要走“捷径”。

smbclient 支持 SMB2/3 协议,因此我不需要设置 smb1 注册表 hack 来启用 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

我如何使其与 SMB2 或 SMB3 协议一起工作?

答案1

如何解答包括多个部分,因为根据您的需要情况可能会有点不同。

我包含了通过各种搜索找到的(或认为已经找到的)所有内容,这些内容可以帮助我解决直接问题。

默认的 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, [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.

根据我的研究,它也不位于延伸反向移植中(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。

smbclient 的 smb 协议默认版本是

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

取自此处:

无法在 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

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客户端工作解决方案

鉴于以上所有信息,我能够使用以下 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.

信用文件:

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

相关内容