我刚刚遇到了一个我在任何地方都找不到的问题(例如 samba 文档)。
我在 server1 上有一个 samba 共享,并且该共享安装到了 server2 上。 server1 的共享是到 的符号链接/var/container/db
。
问题是,当我尝试从 server2 打开此符号链接文件夹时,它会显示 server2 上的本地文件,因为该路径/var/container/db
存在于我的 server2 上。
什么会导致这个问题,解决方案是什么?
两台服务器都运行在 Debian 上。
答案1
如果您在类 Unix 主机之间共享符号链接,则安装共享的系统将根据其自己的文件系统树解释符号链接。这就是 Unix 风格的符号链接的工作原理。
如果服务器 1 上的共享包含您希望符号链接指向的内容,则可以使用相对的符号链接而不是绝对链接。
例如,如果您在 server1 上的 samba 共享是,/var
并且它作为 挂载在 server2 上/server1var
,并且符号链接位于 server1 上/var/some/directory/link-to-db
,则您当前的符号链接将如下所示:
server1# ln -s /var/container/db /var/some/directory/link-to-db
相反,你可以这样做:
server1# cd /var/some/directory
server1# ln -s ../../container/db link-to-db
如果 server1 上的数据库不在 Samba 共享内,那么您将需要 Samba 服务器参数wide links = yes
。这将使 server1 遵循符号链接并提供对 server1 的访问,/var/container/db
而不仅仅是传递符号
但是,如果服务器在默认设置下运行,它也会unix extensions = yes
默认启用 -wide links
如果客户端是类 Unix 系统(如您的情况),这将禁用。
但是,通过设置,即使在共享连接上有效,allow insecure wide links = yes
您也可以允许该wide links
参数起作用-unix extensions
但不建议这样做,因为它不安全。server1 上的管理员将失去对共享内容和不可共享内容的控制,因为客户端可以尝试通过在共享上创建合适的符号链接(如果可写)来访问 Samba 共享之外的任何文件 - 然后它就只是连接上使用的用户帐户是否有权读取该文件。
基本上,allow insecure wide links
+ wide links
+ unix extensions
+ 客户端可写共享实际上等同于仅/
与 Samba 共享。不建议。