smbclient NT_STATUS_ACCESS_DENIED

15

大约每十年我需要与SAMBA搏斗,因为我要迁移到新的主机上,然后我会压抑创伤性记忆,直到我下一次重新学习所有内容:S 因此,这是一个新手问题。

我有一个Ubuntu虚拟机和几个共享文件夹 - 其中一个("Public")未经保护,另一个("Public2")受到保护,目的是只能通过在Ubuntu上定义的经过身份验证的用户帐户访问。 这两个共享文件夹在XP和Win8.1上的Windows资源管理器中都可见。 但是,我无论如何都无法弄清楚如何登录到受保护的Public2共享文件夹。

不考虑Windows客户端,我尝试简单地使用smbclient回到该计算机,结果产生以下输出,指示它无法进行身份验证:

michael@ubuntu:~$ smbclient //ubuntu/Public2 --user=michael%mypasswd
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 4.1.6-Ubuntu]
tree connect failed: NT_STATUS_ACCESS_DENIED

同时未经保护的股份是可以访问的。我可能漏掉了什么(非常明显的)事情?我没有正确指定用户名吗?

/var/lib/samba/usershares/public (unsecure, works) contains:


#VERSION 2
path=/home/michael/Public
comment=
usershare_acl=S-1-1-0:F
guest_ok=y
sharename=Public

/var/lib/samba/usershares/public2 (我无法访问) 包含:

#VERSION 2
path=/home/michael/Public2
comment=
usershare_acl=S-1-1-0:F
guest_ok=n
sharename=Public2

1
我遇到了与OP标题相同的错误,但是原因完全不同:我尝试移动到的目录名(使用cd命令)不正确(由于目录名中有空格)。当我使用引号时它可以工作。我在这里写下来,因为这可能与其他用户遇到此帖子的原因相关。 - emre
5个回答

14

对于使用命令行选项的用户,请使用

$ sudo smbpasswd -a <user_name>

这将提示您分配密码。


8

警告:此处指的是Samba 2。我们现在使用的是Samba 4。请注意您正在使用哪个版本的Samba。正如我的评论所述,GUI将破坏您的配置。

我的一个同事指出了正确的方向:

访问Linux共享的Linux用户ID需要为其定义第二个“samba”密码。最简单的方法是安装并运行GUI Samba服务器配置应用程序,该应用程序不会默认安装。

Samba文档确实解释了这一点,但它被埋藏在大量的文档中,这些文档解释了samba.conf配置等各种神秘的方面。

以下文章深入探讨了这个主题:

http://ubuntuhandbook.org/index.php/2014/05/ubuntu1404-file-sharing-samba/


很好的答案。我和提问者一样,每隔几年就要重新学习Samba相关的东西。基本的解决方法是使用Samba服务器配置,然后重新启动smbd和nmbd。在我的情况下,还需要将端口445转发到Mac客户端。 - JanKanis
2
请勿安装GUI Samba服务器配置应用程序。它仅支持Samba 2,而我们现在使用的是Samba 4。这将破坏您的所有配置。 - andreas

1

您需要编辑'/etc/samba/smb.conf'文件, 使用sudo nano /etc/samba/smb.conf来编辑conf文件。 其中,Workgroup = [您的域名]


0

可能是Apparmor引起的问题。您需要将所有共享位置添加到白名单中,否则您将始终收到“权限被拒绝”的错误。

解决方法是将以下内容添加到/etc/apparmor.d/local/usr.sbin.smbd

"/path_to_share/" rk,
"/path_to_share/**" lrwk,

对于每个共享文件夹,第一行允许读取基目录的权限,第二行递归地允许读写基目录中的所有内容。

来源:https://wiki.archlinux.org/title/Samba#Permission_issues_on_AppArmor
转载自:https://serverfault.com/a/1109267/592032


很好的猜测,但首先我们必须确定是否涉及到了AppArmor。 - undefined

0

没有“第二个Samba密码”。有Linux密码:/etc/passwd,然后是Samba密码,可以是smbpasswd或passdb.tdb。它的位置取决于Samba版本和smb.conf中的设置。两者都必须设置。这意味着在Linux的/etc/passwd和Samba中(以上两者之一)都要设置。这在大多数情况下是此错误消息的问题所在。或尝试重新启动Lanman服务或Windows。
但我想评论另一种可能更少见的情况。

如果您正在使用自定义的Samba,只有在这种情况下,可能会出现另一个(扩展的)原因导致此错误。
Samba可能编译了额外的权限检查,如果返回“NO”(false),则Samba将宣布错误,就像此Q所提到的那样。
检查日志以获取错误信息。如果是这种情况,可能会有线索。

再次强调,这仅适用于自定义构建的Samba。

具体来说,在我的情况下,在QNAP NAS上,Samba将调用一个二进制文件/sbin/appriv -C -u 502 -S1

   -C, --check                     Check user privilege.
   -S, --samba [bit]               The privilege of Samba
   -u, --uid [uid]                 UID.

appriv是"appriv -> nasutil",这是QNAP自己的二进制文件,而不是Linux或GNU的一部分。

由于Samba内置了如此多的选项,我找不到这个额外检查的理由。
特别是当它可以通过返回“true”的空文件来满足。
只是一个复杂的问题,可能会导致问题出现,没有安全性提升。

我一直在更新Qnap上的旧系统。从另一个更新的NAS替换了Samba。
这就是我遇到这个问题并浪费了很多时间的原因。谢谢QNAP。


评论编辑:我理解原因,但我的情况是前沿案例,因此在SO上没有特定的位置。这不是“正确”的答案,也不是我的本意。这是针对特定目标群体的答案。我预料到大多数人阅读此答案时会对我的回答持不同意见,在这种精神下,我添加了结尾“希望这能帮助某些人”,现已删除。 - papo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接