我无法让 Samba 共享访问共享。
我设置了一个运行 Fedora 16 的独立机器,用作文件共享和 Web 开发服务器。它需要能够与 Windows 7 PC 和运行 OSX Snow Leopard 的 Mac 共享文件。
我已经使用 Fedora 上的 Samba 配置 GUI 工具设置了 Samba。将用户添加到 Fedora 并以 Samba 用户身份连接他们(与 Windows 和 Mac 用户名和密码相同)。工作组名称与 Windows 工作组相同。身份验证设置为用户。我已允许 Samba 和 Samba 客户端通过防火墙,并将以太网设置为防火墙中的受信任端口。
Windows 和 Mac 机器都可以连接到服务器并查看共享,但是在尝试访问共享时,Windows 会抛出错误:
0x80070035 " Windows cannot access \\SERVERNAME\ShareName."
Windows 用户在访问服务器时(位于“网络位置”下)不会提示输入用户名或密码。使用 IP 而不是服务器名称进行连接时也会发生这种情况。
Mac 也可以连接到服务器并查看共享,但是在选择共享时出现错误:
The original item for ShareName cannot be found.
通过 IP 连接时,Mac 用户会提示输入用户名和密码,经过身份验证后会提供共享列表,但是在选择要连接的共享时,会显示错误并且用户无法访问该共享。
由于两台机器在尝试访问共享时的行为类似,因此我认为这是 Samba 配置方式的问题。
smb.conf:
[global]
workgroup = workgroup
server string = Server
log file = /var/log/samba/log.%m
max log size = 50
security = user
load printers = yes
cups options = raw
printcap name = lpstat
printing = cups
[homes]
comment = Home Directories
browseable = no
writable = yes
[printers]
comment = All Printers
path = /var/spool/samba
browseable = yes
printable = yes
[FileServ]
comment = FileShare
path = /media/FileServ
read only = no
browseable = yes
valid users = user1, user2
[webdev]
comment = Web development
path = /var/www/html/webdev
read only = no
browseable = yes
valid users = user1
我如何使 Samba 共享正常工作?
更新:我明白了,这是因为我共享了第二个硬盘。请参阅下面的答案。
推测 1:在此机器之前,我有另一台机器,其中安装了相同版本的 Fedora(16),并且 Samba 在这些相同的计算机上运行。我启动了旧机器,并将 smb.conf 文件从旧机器复制到新机器(当然,编辑了新共享的共享定义),但两台客户端机器上仍然出现相同的错误。环境的唯一区别是硬件和路由器。在旧机器上,路由器收到动态公共 IP,并为网络上的每个设备分配动态私有 IP,而新机器连接到具有静态公共 IP 的路由器(但仍然是动态内部 IP)。其中任何一个都会影响 Samba 吗?
猜测2:由于我尝试共享的目录实际上是整个内部磁盘,因此我尝试了以下操作:
1.) 将挂载磁盘的所有者从 root 更改为我的用户(与 Windows 计算机上的用户名相同)
2.) 建立了一个共享,其中仅包含磁盘上的一个文件夹,而不是整个磁盘,并且我的用户再次作为所有者。
两次测试都失败了,并给出了有关网络地址的相同错误。
推测 3:每当我尝试连接到 Windows 7 客户端上的共享时,系统都会提示我输入用户名和密码。当我输入正确的凭据时,我收到一条拒绝访问的消息。但是我确实注意到在登录框下列出了“域:WINDOWS-PC-NAME”。我相信这很可能就是问题所在。
推测 4:所以我现在已经完全重新安装了 Fedora 和 Samba。我在第一个硬盘上创建了一个共享(安装了 Fedora),我可以从 Windows 正常访问它。但是,当我尝试共享第二个磁盘上的任何数据时,我收到相同的错误。我相信这就是问题所在。我想我需要在 fstab 或 fdisk 中更改一些内容,或者其他什么。
推测 5:因此,在 fstab 中,我将驱动器映射到文件夹中的自动挂载,该文件夹可以正常工作。我还将 samba_share_t SElinux 标签添加到挂载点目录,现在我可以访问 Windows 计算机上的共享,但是我无法在 Windows 计算机上的目录中看到任何文件。(它们在那里,我可以在本地的 Fedora 文件浏览器中看到它们)
答案1
终于搞定了。首先,问题在于我试图共享第二个硬盘,而不是共享安装操作系统的同一驱动器上的数据。以下是通过 Samba 共享第二个驱动器的步骤:(这些步骤适用于内部安装的驱动器,但我认为它也可能适用于外部驱动器)
1.) 您必须在 fstab 中设置驱动器以自动挂载。添加:
/dev/sdbx /mountpoint ext3 auto 0 0
到 /etc/fstab,其中 x 是驱动器的分区号,“/media/mountpoint”是挂载目录(我创建了一个名为 /share 的目录并在那里挂载了驱动器),“ext3”是文件系统
2.)将挂载点的权限设置为755:
chmod 755 /mountpoint
3.) 添加新的 SElinux 标签“samba_share_t”,并将此标签应用于挂载点
chcon -t samba_share_t /mountpoint
4.) 将这些权限应用于所有封闭的文件和文件夹。(我为此使用了 Gnome 的 GUI)
我可以从 Windows 7 PC 和运行 OSX 的 Mac 访问共享的读写权限。
答案2
发布您的 smb.conf,以便我们检查您的所有配置是否正常。
smb.conf 中最重要的部分如下:
[name_of_the_shared_folder_resource]
valid users = user1 user2 #you can use groups
public = no
path = /var/www #the path of your folder
printable = no
writable = yes
记住smbpasswd
为每个用户运行以生成 Samba 密码。
另一件重要的事情...重新启动 Samba。:P
答案3
确保你可以使用 netstat 看到 samba 正在运行
netstat -an | grep LISTEN | egrep "445"
还可以尝试在配置中添加接口绑定:
interfaces = eth0
或者interfaces = <ip address>
在 smb.conf 中
答案4
我遇到了同样的问题,最后我解决了,编辑/etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled # if the files dont appears is because this parameters is not disabled