因此,我应该首先说,我在不到一周前成功地完成了这项工作,并且没有遇到任何问题,但此后我重新格式化并重新配置了我的服务器,现在我很难记住我是如何做到的。
这是我之前遇到的问题,也是我再次尝试解决的问题。我在 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 User
B 和 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 服务器时不会提示输入用户名和密码所需的条件:
添加
guest account = <owner-of-your-shares>
一个[global]
部分。重要的是,您的共享的所有者帐户有权访问它们。如果您不这样做,Samba 将假定来宾帐户是nobody
不太可能访问您共享中的数据的用户。或者,您可以
force user = <owner-of-your-share>
在您的区块下指定[shareXYZ]
。确保您的
[shareXYZ]
有guest ok = yes
。设置
browsable = yes
但它通常是从继承而来的并且默认[global]
设置为。yes
然后,可能security = user
还应该设置(当您的环境中没有设置 Active Directory 时,这是默认设置)。不过,我不确定是否需要此标志,因为我的环境中没有 AD。
当然,如果您想让用户nobody
工作,那么您只需chown -Rh 65534:65534 /yourshare
,之后您只需guest ok = yes
在您的 下进行单独设置就可以了[shareXYZ]
。
请注意,设置rwx
为others
( 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