【发布时间】:2017-05-21 18:48:14
【问题描述】:
Windows 使创建具有匿名访问权限的网络共享变得困难(换句话说,共享主机不知道的用户可以访问)。 net share ShareName=C:\DesiredShareSource /GRANT:EVERYONE,FULL 向所有人提供访问权限,但不包括匿名访问(例如,未加入域的用户,没有提示凭据)。
我知道有一种方法可以从 GUI (https://serverfault.com/questions/272409/setting-up-an-anonymous-windows-server-2008-network-share) 执行此操作,但是有没有一种方法可以更改安全策略和创建匿名网络共享可以严格从 PowerShell 完成?
编辑
这就是我运行 Ansgar Wiechers 发布的 WMI 脚本时发生的情况。我得到一个例外,但共享成功安装: 但是,当我尝试从同一网络上的另一个盒子连接到共享时,仍会提示我输入用户名和密码,如下所示:
再次,我希望全部从命令行设置匿名访问(没有用户名和密码)。
这是我在 Win7 系统上的 testingAnonShare.ps1 中使用的确切代码:
$path = 'C:\Users\<REDACTED>\Desktop\Attempt'
$name = 'testinganon'
$description = 'share description'
function Get-Trustee($sid) {
$trustee = ([wmiclass]'Win32_Trustee').CreateInstance()
$trustee.SID = ([wmi]"Win32_SID.SID='$sid'").BinaryRepresentation
return $trustee
}
function New-FullAce($sid) {
$ace = ([wmiclass]'Win32_ACE').CreateInstance()
$ace.AccessMask = 2032127 # full control
$ace.AceFlags = 3 # container inherit + object inherit
$ace.AceType = 0 # access allowed
$ace.Trustee = Get-Trustee $sid
return $ace
}
$sd = ([wmiclass]'Win32_SecurityDescriptor').CreateInstance()
$sd.ControlFlags = 4
$sd.DACL = (New-FullAce 'S-1-1-0'),
(New-FullAce 'S-1-5-7')
$wmi = Get-WmiObject Win32_Share -List
$wmi.Create($path, $name, 0, $null, $description, '', $sd) | Out-Null
【问题讨论】:
-
net.exe SHARE ShareName=C:\DesiredShareSource /GRANT:"ANONYMOUS LOGON",FULL但"ANONYMOUS LOGON"必须是本地化字符串 - 它将在LookupAccountName函数中使用。但是,如果您只授予匿名登录“ - 普通用户在这里没有权限,所以也需要添加每个人 -/GRANT:Everyone,FULL -
当我输入
net SHARE ShareName=C:\DesiredShareSource /GRANT:"ANONYMOUS LOGON",FULL时,系统仍然提示我输入密码。此外,它要求我在两个 GRANT 语句中的逗号前加一个 `。当我从其他框访问共享时,是否仍提示我输入凭据? -
@RbMm 这就是我从这里开始的方式。我想通过 PowerShell 完成这一切。
标签: windows powershell cmd share