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

Geo*_*ake 9 server windows-7 samba 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
Run Code Online (Sandbox Code Playgroud)

我正在把我的头发拉到这个上面。有什么建议?

编辑:

呃,这让我很难受。我离得那么近

这就是我所拥有的。

我可以通过开始并键入 \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
Run Code Online (Sandbox Code Playgroud)

更新:因此,无论工作组如何,共享现在都可以在我的网络中使用。任何连接到我的网络的 Windows 用户都可以在网络下看到 NAS 并访问它。关键是将安全设置为安全 = 共享。我知道,它已被弃用,但它有效并且安全 = 用户和映射到用户 = 坏用户对我不起作用。

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

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

Aar*_*ron 10

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

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

当该用户名被传递时,Samba 将搜索该用户的密码数据库:

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

  • 如果找到与用户名匹配的 samba 密码,并且有一个与 Windows 客户端发送的密码匹配的 samba 密码,则 Windows 用户会自动获得访问权限,尽管不是匿名用户,这就是您需要添加“强制用户 = 无人”的原因您的共享定义。

  • 如果它找到与用户名匹配但 samba 密码与 Windows 客户端自动发送的密码不完全匹配的密码,则系统将提示您输入密码 - 即使是来宾共享也是如此。

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

2013 年 2 月 20 日编辑:

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


小智 8

这就是 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
Run Code Online (Sandbox Code Playgroud)

  • 啊!“来宾帐户= root”。这意味着来宾帐户被映射到 root,即具有不受限制的权限来做任何事情。要非常小心!龙在前方! (15认同)

小智 7

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

以下是确保 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>others也许 Samba 只是忽略了为?设置的权限。没有把握。