如何让 samba 遵循共享路径之外的符号链接

如何让 samba 遵循共享路径之外的符号链接

这是 Ubuntu 服务器 10.04 64 和 samba 3.4.7。

我有一个共享目录/home/mit/share和另一个/home/temp链接到共享目录的目录:

ln -s /home/temp /home/mit/share/temp

但是在Windows上,使用互联网后,我无法打开S:/temp,但在Linux上可以/home/mit/share/temp像预期一样访问。

如果我链接内部目录/home/mit/share/temp,这会起作用,所以我猜 samba 限制使用共享目录外部/上方的链接跳转。

编辑:

另请参阅标题为的这个问题Ubuntu + 最新的 samba 版本,符号链接不再适用于 Windows 中安装的共享

似乎最好将其放入unix extensions = no全局部分,follow symlinks = yes并且wide links = yes仅放入您真正需要的共享部分。

unix extension标志必须位于全局部分,而不是单个共享部分。但出于安全原因,最好仅在需要时使用其他选项,而不是全局使用。

答案1

编辑smb.conf

[global]
unix extensions = no

[share]
follow symlinks = yes
wide links = yes

注意:如果您使用的是较新版本的 samba,以下内容可能适合您:

[global]
allow insecure wide links = yes

[share]
follow symlinks = yes
wide links = yes

文档follow symlinkswide links标志:https://www.samba.org/samba/docs/using_samba/ch08.html#samba2-CHP-8-TABLE-1

答案2

除了其他答案之外,为了保持 UNIX 扩展处于启用状态,可以使用:

[global]
allow insecure wide links = yes

[share]
follow symlinks = yes
wide links = yes

答案3

您好,我尝试将其放入配置中以修复我的设置的 Windows 符号链接,但我不确定它是否会影响 Windows 客户端,否则当我连接到此框时它会遵循符号链接。

[global]                                                                        
unix extensions = no

答案4

如果您运行的是 AppArmor,您可能需要处理的不仅仅是 Samba 配置文件。

您确实需要在您的 中包含以下指令smb.conf

follow symlinks = yes
wide links = yes
unix extensions = no
# No need for "allow insecure wide links" unless you want "unix extensions = yes"

但是,AppArmor 根据其自己的规则集语义阻止对部分文件系统的访问。因此,如果 Samba 中的符号链接指向 AppArmor 会阻止的位置,Samba 将拒绝访问。

在我的系统上,Samba 在服务启动/停止时更新 AppArmor 配置文件,因此我可以更改 AppArmor 配置文件,但有 Samba 或其他程序覆盖它的风险。相反,我决定在 Samba 中创建一个无法访问的共享,引用包含我想要访问的符号链接目标的位置(仍在 中smb.conf):

# The following is a hack for AppArmor to allow the path
[share1 for AppArmor] # Or whichever name you choose
    browseable = no
    path = /home # Point to directory or parent directory of the location to access
    read only = yes
    guest ok = no
    valid users = none

相关内容