覆盖 Samba 调用 unlink 和 unlinkat

覆盖 Samba 调用 unlink 和 unlinkat

我尝试在使用 Samba 时覆盖对 unlink/unlinkat 的调用。为此,我编写了一个共享库。然后我执行了以下行:

export LD_PRELOAD=<my shared library>

并重新启动 smbd 服务。现在,如果我从当前目录中删除一个文件,我可以看到我的 unlink 版本正在被调用,但是当我从另一个 Ubuntu 框通过 Samba 执行相同操作时,我的覆盖不会被调用。我认为这与 LD_PRELOAD 的位置有关。我将其放在 /etc/samba/smb.conf 和 /etc/init/smbd.conf 中,但没有用,剩下的唯一文件是 /etc/init.d/smbd。但是我不知道将 LD_PRELOAD 放在哪里。我确实将 LD_PRELOAD 放在了几个地方,但也没有用。我希望有人能帮助我。在此先感谢任何帮助。

平台:Ubuntu 14.04

答案1

(我知道这已经是两年后了。它可能对其他人仍然有用。)

LD_PRELOAD 是一个环境变量,需要在 smbd 的环境中设置。

由于该服务不是从 shell 调用的,因此您必须使用发行版的启动/服务系统。

快速网络搜索告诉我 Ubuntu 14.04 正在使用upstart,因此您可能需要输入类似以下内容:

env LD_PRELOAD=<my shared library>
export LD_PRELOAD

进入/etc/init/smbd.conf

请注意,这是一个有根据的猜测,因此您可能需要更改一两件事。

相关内容