![将 SMB 登录从访客更改为其他用户?](https://linux22.com/image/1512635/%E5%B0%86%20SMB%20%E7%99%BB%E5%BD%95%E4%BB%8E%E8%AE%BF%E5%AE%A2%E6%9B%B4%E6%94%B9%E4%B8%BA%E5%85%B6%E4%BB%96%E7%94%A8%E6%88%B7%EF%BC%9F.png)
我有一个文件服务器(如果重要的话,使用 Samba 4),我通常以具有只读访问权限的访客身份连接到它。我很少想更改其内容,因此我必须以其他用户身份登录。这有两个问题。
1) 我想在不断开共享的情况下执行此操作。也就是说,我想执行类似于 Unixsu
命令的操作。SMB 协议中是否有这样的功能?
2)net use
似乎不知道我何时连接到共享(通过运行访问它的程序)。它报告“列表中没有条目”,我也无法使用net use \\server\share /delete
(“找不到网络连接”)。net use \\server\share /u:user
但是尝试使用会失败,提示不允许使用多个用户名进行多个连接。除了关闭使用该连接的每个程序外,有没有办法强制断开隐式来宾连接?
答案1
回答你的第一个问题:
我认为不是。它不受支持的原因很简单,因为创建 SMB 的人没有费心添加这种支持。但是,作为一种解决方法,只需使用多个凭据,正如您所想的那样。
回答你的第二个问题:
不,你引用了计算机告诉你不能这样做。
“尝试使用 net use \server\share /u:user 但是会失败,提示不允许使用多个用户名进行多个连接。”
但是,我怀疑您可能能够使用另一个共享。只需创建一个指向同一位置的新共享文件夹即可。(使用 fsmgmt.msc,因为该界面将允许您创建共享。在命令行中,键入:“start fsmgmt.msc”。)或者,从客户端,尝试访问 \server\c$ 或 \server\d$ 或任何适当的位置。(如果您在服务器上运行 fsmgmt.msc,您可以看到适当的位置。)
共享正在使用,但“net use”看不到它,这听起来很奇怪。虽然理论上我认为程序可能包含嵌入式 SMB 客户端而不是使用 Windows 的客户端,这会导致“net use”看不到它(在客户端上)。不过,服务器应该使用“net session”报告它。
答案2
奇怪的是net use
,它似乎不适用于访客用户。您可能必须深入研究 Win32 API 才能获得您真正想要的东西,而不是依赖命令行工具。
在 Windows 上更改网络共享的登录凭据的一种方法是试图以其他用户身份登录(例如输入错误的用户名和密码)。Windows 将自行清除旧的登录凭据。
不过,我发现了一种更有效的方法。只需调用WNetAddConnection2
,Windows 就会自行清理,无需登录。
我编写了一个小型 C 程序,允许我在 Windows 上注销并以其他网络共享用户身份登录。运行该程序会显示标准的 Windows 网络登录对话框。
在我的代码中,我WNetCancelConnection2
之前曾调用过WNetAddConnection2
。如果我没记错的话,我认为取消未映射共享的连接不是必要的。但是,我还是取消了映射共享的连接,因为首先删除映射驱动器是有意义的,这样当没有活动登录凭据时它就不会出现。
请参阅我在此处针对 C 代码的回答: