无法使用 CIFS 从 Linux 挂载 Windows 7 共享:挂载错误 (13):权限被拒绝

无法使用 CIFS 从 Linux 挂载 Windows 7 共享:挂载错误 (13):权限被拒绝

我们的 FSTAB 中有一个 Windows XP 共享条目,其工作原理如下:

//MAIN/StorageD /mnt/storaged cifs username=admin,password='',uid=1001,gid=1000,iocharset=utf8,file_mode=0777,dir_mode=0777,noperm 0    0

但是 Windows 7 的条目却没有:

//MAIN-WIN7/Win7VM /mnt/Win7VM cifs username=main,password='',uid=1001,gid=1000,iocharset=utf8,file_mode=0777,dir_mode=0777,noperm 0    0

目录 /mnt/Win7VM 设置为 777 权限并由用户 1001 拥有

因此我们尝试进行一些调试并手动安装......

正如检查一样,以下操作有效:

mount -t cifs '//MAIN/backupx' /mnt/backupx -o username=Admin,password=''

但对于 Windows 7 机器来说,这不起作用。

mount -t cifs '//MAIN-WIN7/Win7VM' /mnt/Win7VM -o username=Main,password=''

当我收到错误时(我猜这个错误很有名):

root@debian:/home/user# mount -t cifs //MAIN-WIN7/Win7VM /mnt/Win7VM -o     username=Main,password='',sec=ntlm
mount error(13): Permission denied
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

因此,我花了几个小时搜索、检查并尝试执行以下操作:

检查的设置:

  • 工作组为“WORKGROUP”
  • 域名为“MAIN-WIN7”
  • 用户是“主要”
  • 未设置密码
  • 分享的是Win7VM
  • 可通过 Windows 中的网络共享进行共享

SMBTREE 列出:

root@debian:/home/user# smbtree
Enter root's password: 
WORKGROUP
\\MAIN-WIN7             
    \\MAIN-WIN7\Win7VM    
  • 将“Microsoft 网络客户端:将未加密的密码发送给第三方”的 Windows 安全策略设置更改为“已启用”
  • 更改了 Windows 安全策略“网络安全:LAN 管理器身份验证级别以发送 LM 和 NTLM - 如果协商则使用 NTLMv2 会话安全”
  • 关闭所有防病毒软件和防火墙
  • 添加“sec=ntlm”开关,如“/mnt/Win7VM -o username=Main,password='',sec=ntlm”
  • 将域添加到用户,如“MAIN-WIN7/Main”
  • 使用“mount.cifs”而不是“mount -t cifs”
  • CHMOD 将目录挂载到 777 CHOWN 将目录挂载到用户“1001”并将组挂载到“用户”(如果我可以手动挂载它,则需要此项作为 fstab 条目)

共享在 Windows 7 Ultimate 上,而存在权限错误的客户端是 Debian Wheezy。

现在我已经没有搜索术语和想法了。我以为这会很简单;现在我浪费了好几个小时。有人有什么想法吗?这可能是一件简单的事情,对吧?

编辑:

忘记了尝试从 Windows 计算机访问共享的虚拟检查。它没有起作用,导致我调查了更多 Windows 设置,并找到了下面发布的解决方案。

答案1

问题出在 Windows 上,而不是 Linux 上。

解决方案是更改共享和安全设置以包含必要的权限。

找到一个视频这里在 YouTube 上这是拼图的最后一块。

本质上,您向想要共享的驱动器上的“每个人”授予共享和安全权限(对于文件夹来说这可能也是如此,但这不是我想要共享的)。

首先,转到驱动器,然后转到属性>共享>高级共享>权限,并在“EVERYONE”组/用户上分配所有权限。如果没有列出所有人,则将他们添加到列表中。

第二步,转到属性>安全>编辑>添加并添加“EVERYONE”。然后将您想要的所有权限分配给“EVERYONE”。

需要注意的是,我还通过控制面板>管理工具>本地安全策略>网络管理器列表策略>将网络标识为“私人”,然后选择适用的网络并将位置更改为“私人”......不确定这是否最终影响了任何事情。

我确信默认设置都是为了好的目的,而通过赋予“每个人”完全控制权限会打开一些巨大的漏洞,这将导致我的计算机和网络因某些人对未来事件的解释而爆炸,但是,嘿,它解决了这个问题。

答案2

这可能很奇怪,但当我使用上一个答案时,似乎它并没有解决所有问题。但我找到了一个解决方案组合,似乎确实可以解决问题,而且由于这个问题似乎很普遍,发布我的解决方案似乎是明智之举。

首先记录 Windows 中的一些项目并更改一些设置。记录用户名、密码和工作组(域)。我还保留了我的“家庭组”。

还要更改注册表项,以防止较大(<1GB 导致我遇到问题)共享和传输时出现内存分配错误。更改HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\Size为“3”

关于此注册表设置的其他信息的链接是这里

现在重新启动 LanmanServer 以应用注册表设置。以管理员权限打开 CMD 提示符并输入:

sc stop LanmanServer
sc start LanmanServer

该解决方案来自这里

现在希望 Windows 已准备就绪。

接下来是 Linux 方面。最大的变化是将共享的用户和服务器信息放入凭证文件而不是挂载命令中。这是最后一个我认为不会产生任何作用的神奇部分,它在更改后立即开始工作(尽管存在我们上面解决的内存问题)。通过创建一个文件来执行此操作:

user="UserName"
password="Password"
domain="WindowsWorkgroup"

然后在 fstab 条目中添加一个“cred”参数。我还添加了一个 rw 参数。为了以防万一,我将 uid 和 gid 更改为登录到 Linux 机器的用户。1001 可能有效,我只是还没有尝试过。

所以我的最终 fstab 条目看起来像这样。

//DESIGNPC/BackupX /mnt/backupx cifs rw,uid=user,gid=user,file_mode=0777,dir_mode=0777,cred=/home/user/.cred,sec=ntlm 0 0

部分细节来自这里

双向传输文件以及读取和删除都运行顺畅,而我之前的答案仍然存在一些写入和删除的权限问题,我只是在解决这个问题,并没有回到这个问题上。这也解决了必然会出现的内存分配问题,这些问题似乎是在 Linux 端,但需要更改 Windows 注册表才能修复。

相关内容