设置匿名公共 Samba 共享以通过 Windows 7 和 XBMC 访问

设置匿名公共 Samba 共享以通过 Windows 7 和 XBMC 访问

因此,我应该首先说,我在不到一周前成功地完成了这项工作,并且没有遇到任何问题,但此后我重新格式化并重新配置了我的服务器,现在我很难记住我是如何做到的。

这是我之前遇到的问题,也是我再次尝试解决的问题。我在 Ubuntu 服务器上有一个公共 samba 共享。我的网络上的任何人都可以通过键入 \Hostname 来访问该共享及其内容。无需密码。不在共享工作组中的用户具有读取权限,但工作组中的用户具有读/写权限。(Windows 7)

现在,如果我尝试连接到 \Hostname,系统会提示我输入用户名和密码。如果我输入 un pw,我会获得完全访问权限,但我不应该这样做;我当前的设置是...

security = user
map to guest = bad user

[Shares]
path = /home/shares
available = yes
read only = no
browsable = yes
public = yes
writable = yes
guest ok = yes

我为此绞尽了脑汁。有什么建议吗?

编辑:

唉,这真是让我难受。我已经很接近成功了。

这是我得到的。

我可以通过转到开始并输入 \Hostname\Sharename 从 Windows 7 访问共享,但系统会提示我输入用户名和密码。但我不能将其留空,因为它将使用我的工作组作为域;因此我输入 \ 作为用户名以清除它并使用空白用户名和密码登录。太好了,现在我可以访问共享中的文件了。

一旦我进入,工作组配置就可以正常工作。如果我在具有默认工作组的计算机上,我可以读取和执行;我的家庭工作组中的计算机可以读写和执行。所以这是正常的。

问题是,它根本不应该要求输入密码。它应该对网络上的任何人都完全公开。我试图与 XBMC 共享它,但它甚至没有显示在文件管理器的 smb 下。我也无法从 XBMC 手动访问它。我收到连接被拒绝错误。

仍然为此而烦恼。最糟糕的是,大约一周前我第一次这样做时,我花了大约 30 分钟,它运行得很好。现在我可能花了至少 4 个小时,它仍然不起作用。

Testparm:

Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[printers]"
Processing section "[print$]"
Processing section "[Shares]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions

[global]
        workgroup = FELLOWSHIP
        server string = %h server (Samba, Ubuntu)
        map to guest = Bad User
        obey pam restrictions = Yes
        pam password change = Yes
        passwd program = /usr/bin/passwd %u
        passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
        unix password sync = Yes
        syslog = 0
        log file = /var/log/samba/log.%m
        max log size = 1000
        socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
        dns proxy = No
        wins support = Yes
        usershare allow guests = Yes
        panic action = /usr/share/samba/panic-action %d
        idmap config * : backend = tdb

[printers]
        comment = All Printers
        path = /var/spool/samba
        create mask = 0700
        printable = Yes
        print ok = Yes
        browseable = No

[print$]
        comment = Printer Drivers
        path = /var/lib/samba/printers

[Shares]
        path = /home/shares
        read only = No
        guest ok = Yes

更新:因此,无论工作组如何,共享现在都可在我的网络上使用。任何连接到我的网络的 Windows 用户都可以在 Netowork 下看到 NAS 并访问它。关键是将 security 设置为 security = share。我知道,它已被弃用,但它有效,而 security = user 和 map to user = bad user 对我来说不起作用。

无论如何,现在看来,任何连接到共享的人都会获得该目录的 unix 全局权限,这是可管理的,但我希望加入 smb.conf 中指定的工作组的用户获得 unix 组权限。

这样,我可以将目录设置为 775,并且我将能够写入,因为我已加入工作组,但其他用户只能读取和执行。

答案1

偶然发现Ubuntu 论坛上的这个帖子,并认为它可能会有所帮助。它解释了幕后发生的步骤:

在 Windows 中,客户端在浏览共享时会自动发送用户名和密码 - 这是在用户不知情的情况下完成的。这迫使 Samba 处理发送的凭据,即使它是不需要身份验证的来宾共享。

当传递该用户名时,Samba 将在其密码数据库中搜索该用户:

  • 如果用户名不匹配,客户端用户将被标记为“坏用户”并转换(映射)为访客帐户,默认情况下为“无人”。

  • 如果它找到与用户名匹配的并且 Samba 密码与 Windows 客户端发送的密码相匹配,那么 Windows 用户将自动获得访问权限,尽管不是以匿名用户的身份,这就是为什么您需要在共享定义中添加“强制用户 = nobody”的原因。

  • 如果发现用户名匹配,但 samba 密码与 Windows 客户端自动发送的密码不完全匹配,那么系统将提示您输入密码 - 即使是访客共享。

尝试添加force user = nobody到您的共享定义,看看是否可行。

编辑于2013年2月20日:

返回的退出代码不是testparm零吗?尽管如此,我还是会继续仔细查看配置的该区域。另外,我不确定 smb.conf 是否区分大小写,但我看到的每个示例(例如)都将map to guest = Bad UserB 和 U 大写。查看Samba 手册页您正在使用的选项,并仔细检查所有内容。

答案2

这就是 OpenElec 的配置方式。应该可以满足您的要求。(即使一年后……也许它会对下一个有所帮助)只需根据需要调整共享设置即可。

[global]
  server string = YOURSERVERNAME
  workgroup = WORKGROUP
  netbios name = %h
  security = share
  guest account = root
  socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536
  smb ports = 445
  max protocol = SMB2
  min receivefile size = 16384
  deadtime = 30
  os level = 20
  mangled names = no
  syslog only = yes
  syslog = 2
  name resolve order = lmhosts wins bcast host
  preferred master = auto
  domain master = auto
  local master = yes
  printcap name = /dev/null
  load printers = no
  browseable = yes
  writeable = yes
  printable = no
  encrypt passwords = true
  enable core files = no
  passdb backend = smbpasswd
  smb encrypt = disabled
  use sendfile = yes

[share]
comment = Share
path = /share
available = yes
browsable = yes
writable = yes
public = yes

答案3

由于 Google 搜索把我们带到这里并且没有明确的答案,所以我总结了一下。

以下是确保 SMB 客户端在访问您的 Samba 服务器时不会提示输入用户名和密码所需的条件:

  1. 添加guest account = <owner-of-your-shares>一个[global]部分。重要的是,您的共享的所有者帐户有权访问它们。如果您不这样做,Samba 将假定来宾帐户是nobody不太可能访问您共享中的数据的用户。

    或者,您可以force user = <owner-of-your-share>在您的区块下指定[shareXYZ]

  2. 确保您的[shareXYZ]guest ok = yes

    设置browsable = yes但它通常是从继承而来的并且默认[global]设置为。yes

然后,可能security = user还应该设置(当您的环境中没有设置 Active Directory 时,这是默认设置)。不过,我不确定是否需要此标志,因为我的环境中没有 AD。

当然,如果您想让用户nobody工作,那么您只需chown -Rh 65534:65534 /yourshare,之后您只需guest ok = yes在您的 下进行单独设置就可以了[shareXYZ]

请注意,设置rwxothers( chmod o+rwx /yourshare) 不会让 Samba 及其nobody用户进入共享。我已使用 进行了检查strace -f -e chdir,geteuid,getegid -p <pid-of-the-parent-smbd-process>。Samba 可能只是忽略了为 设置的权限others?不确定。

答案4

这可能不是所有遇到此类问题的人的解决方案,但我的问题是由于共享目录所在的父目录的权限造成的。只要我启用“其他人读取”,我就可以匿名访问共享。这让我有点吃惊,因为在 Windows 服务器中,父目录的权限与共享目录无关。

所以我的路径是这样的:

/data1/Downloads 

我必须在data1目录上启用“其他人读取”。

我没有做任何特别的事情smb.conf,我的共享条目看起来像这样......

[Downloads]
path = /data1/Downloads
browseable = yes
read only = yes
guest ok = yes
public = yes

相关内容