返回

Linux 根目录下 smbClient/Samba NT_STATUS_ACCESS_DENIED 错误的解决方案

Linux

解决 Linux 根目录下 smbClient/Samba 的 NT_STATUS_ACCESS_DENIED 错误

概述

在使用 smbClient 访问 Samba 共享目录时,用户可能会遇到 NT_STATUS_ACCESS_DENIED 错误,即使拥有 Linux 根用户权限。本文将深入探讨这个问题,并提供逐步解决方案。

原因

此错误通常是由以下原因引起的:

  • Samba 配置不正确
  • 共享权限设置错误
  • 文件系统权限不足
  • SELinux 限制
  • 防火墙阻止连接

解决方案

步骤 1:检查 Samba 配置

确保 Samba 配置文件 /etc/samba/smb.conf 中设置了以下选项:

follow symlinks = yes
wide links = yes
unix extensions = no

步骤 2:检查共享配置

检查共享配置是否设置了以下选项:

valid users = root
force user = root

步骤 3:检查文件系统权限

确保挂载共享目录的目录具有适当的文件系统权限。用户应具有读写权限。

步骤 4:重新启动 Samba 服务

重新启动 Samba 服务以应用更改:

sudo service smbd restart

步骤 5:检查 SELinux 状态(如果适用)

如果系统启用了 SELinux,请检查是否允许 smbd 访问文件系统。运行以下命令:

getenforce

如果输出为 "Enforcing",请授予访问权限:

sudo setsebool -P samba_share_nfs_on off

步骤 6:检查防火墙

确保防火墙允许 smbd 连接。检查端口 139 和 445 是否已打开:

sudo ufw status verbose

如果端口未打开,请打开它们:

sudo ufw allow 139/tcp
sudo ufw allow 445/tcp

步骤 7:检查密码

确认输入的密码正确。运行以下命令检查:

sudo smbpasswd -a root

输入新密码,然后再次输入以确认。

其他提示

  • 使用其他 SMB 客户端(例如,cifs-utils)尝试连接到共享。
  • 检查 Samba 日志 /var/log/samba/log.nmbd/var/log/samba/log.smbd 查找错误消息。
  • 在 Samba 配置文件中禁用 SMBv1:
[global]
min protocol = SMB2

常见问题解答

  1. 为什么使用 Linux 根用户仍然无法访问共享?
    即使使用根用户,也需要设置适当的 Samba 配置、共享权限和文件系统权限。

  2. SELinux 是什么,它如何影响 Samba 访问?
    SELinux(安全增强型 Linux)是一项内核安全模块,它可以限制进程对文件系统和网络资源的访问。

  3. 如何确定防火墙是否阻止了 Samba 连接?
    使用 ufw 命令检查端口 139 和 445 是否已打开。

  4. 如何在 Samba 配置中禁用 SMBv1?
    编辑 /etc/samba/smb.conf 文件并添加 min protocol = SMB2 行。

  5. 如果所有步骤都已执行,但问题仍然存在,怎么办?
    请检查 Samba 日志或寻求专业帮助。