it-swarm.cn

如何使samba遵循共享路径之外的symlink

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

我有一个共享目录/home/mit/share和另一个目录/home/temp,我将其链接到共享目录中:

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

但是在Windows上,使用Internet后,我无法打开S:/temp,但是在Linux上可以像预期的那样访问/home/mit/share/temp

如果我在/home/mit/share/temp内链接目录,则此方法有效,因此我猜想samba会限制使用共享目录外部/上方的链接跳转。

编辑:

另请参见标题为 buntu +最新的Samba版本,符号链接在Windows中安装的共享上不再起作用 的问题。

最好将unix extensions = no放入全局部分,并将follow symlinks = yeswide links = yes只放入您真正需要的共享部分。

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

65
mit

编辑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

102
Mahesh

除了其他答案以外,要保持启用unix扩展,可以使用:

[global]
allow insecure wide links = yes

[share]
follow symlinks = yes
wide links = yes
11
user1182474

问候,我尝试将其设置为固定Windows的符号链接以进行设置,但是我不确定它是否会影响Windows客户端,否则当我连接到此框时它将遵循符号链接。

[global]                                                                        
unix extensions = no
11
Qiqi

为了允许Samba客户端遵循共享路径之外的符号链接,在Samba配置中所需要做的就是:

[global]
allow insecure wide links = yes
unix extensions = no

[myShare]
wide links = yes

(当然,除了Samba本身也共享定义)。从理论上讲,这对于* nix客户端是足够的。

注意:“ follow symlinks”指令不是必需的,因为它默认为“ yes”

对于Windows客户端,仍然缺少1个设置来让他们遵循此类链接。为此:

  1. 打开具有管理员权限的Windows Shell
  2. 跑 :

    fsutil behavior set SymlinkEvaluation L2L:1 R2R:1 L2R:1 R2L:1
    
  3. 重新启动以重新加载设置

注意:通过编辑Windows注册表可以获得相同的结果。见下面的链接

资料来源:

4
Httqm

如果您正在运行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
0
palswim