在 Windows 中通过 Linux Samba 共享 NTFS 驱动器显示隐藏文件

在 Windows 中通过 Linux Samba 共享 NTFS 驱动器显示隐藏文件

我有一台 Raspberry Pi,它使用sambantfs-3g来在我的家庭网络上共享 USB 外部硬盘。在硬盘上,有一些文件标记为“隐藏”Windows 文件属性。但是,当我在 Windows PC 上访问共享时,文件不会显示为隐藏。因此,我看到许多隐藏文件,例如desktop.ini、,thumbs.db以及目录,例如$RECYCLE.BINSystem Volume Information,即使我的“文件夹选项”中的 Windows 设置设置为不显示隐藏文件。

我知道这samba没有正确传输隐藏属性,因为如果我查看应该隐藏的文件的属性,则不会选中隐藏复选框:

未隐藏

这些是我的文件的当前内容smb.conf

#### GLOBAL CONFIG #####

workgroup = WORKGROUP
netbios name = raspberrypi
server string = %h
wins support = yes
dns proxy = no
security = share
null passwords = yes
guest account = nobody
interfaces = eth0 lo
bind interfaces only = yes

#### PUBLIC SHARE #####

[Mazda6]
comment = Media Drive
path = /media/HDD
browseable = yes
guest ok = yes
writeable = yes
public = yes
available = yes
create mask = 0666
directory mask = 0777

samba如何让 NTFS 驱动器上标记为隐藏文件属性的文件在通过Windows PC 上的共享查看时显示为隐藏?

答案1

我相信——但我自己没有测试过——你只需要添加map hidden = yes到共享的配置中。请注意,这可能会产生意想不到/不受欢迎的行为,使“其他可执行”文件(根据 Linux 文件权限)在 Windows 中也呈现为“隐藏”;这是因为 Samba 实际上将该位重新用作 Windows 的“隐藏”属性,因为它驻留在没有此类属性的 Linux 之上。

否则,您应该能够使用该hide files选项来隐藏您指定的文件;例如,您将其应用于您的共享配置:

hide files = /$RECYCLE.BIN/System Volume Information/desktop.ini/thumbs.db/

当然,这里的缺点是,您必须在配置中明确对要隐藏的文件进行硬编码,不幸的是,没有办法区分desktop.ini应该隐藏的文件和desktop.ini不应该隐藏的文件——使用此设置,两者都将被隐藏。(注意:我不确定这是否适用于目录;我相信它应该可以,但目前无法测试它。字符也可能存在问题$;同样,我认为它会起作用,但我现在无法测试它。)

一如既往,文档是你的朋友。

更新:根据下面评论中报告的 OP 测试,似乎 NTFS 分区上的所有文件都可能以 0777 权限显示在 Linux 中;由于这意味着设置了“其他执行”位,Samba 最终会在打开该map hidden设置的情况下将每个文件解释为“隐藏”,如果不先将所有数据移动到不同的文件系统,则该解决方案无法维持。

答案2

Linux 没有与 Windows 的“隐藏”属性真正等同的功能,因此 Samba 无法从 NTFS 正确读取它。但是,您可以使用带选项的 NTFS-3G hide_hid_files,这会导致隐藏文件不显示在目录列表中,从而在与 Samba 共享时在 Windows 中隐藏。

这种方法的缺点是,即使文件夹选项设置为显示所有文件,所有隐藏文件在 Windows 中都是不可见的,并且(根据我的测试)即使给出了明确的文件名,在 Windows 中也无法访问。但对于您的用例来说,这应该足够了。

最好的解决方案是编写一些代码来让 Samba 读取system.ntfs_attrib_beNTFS-3G 的 xattr,但我不知道有任何此类项目。

相关内容