1

由于某些不幸的原因,我必须将专有和二进制库从每个工作站一个用户转换为每个工作站设置一个多用户。

当前设置。用户使用与库链接的程序。该库读取系统范围的配置文件(使用硬编码路径,即 /usr/local/thelib/main.conf ),该文件本身包含多个工作目录的多个路径。wdir 本身包含一堆用户数据文件。

想要的结果。能够在同一工作站上管理多个用户。当然,用户不能通过库读取或更改任何其他用户的数据,如果我设法为每个用户提供不同的工作目录,则应该由 unix 权限处理。

该库可能同时被多个用户使用,因此在运行时将配置文件输入 /usr/local 不是一种选择。

我正在考虑使用 FUSE 为文件 /usr/local/thelib/main.conf 提供不同的内容,具体取决于环境变量或当前的 unix 用户。然后,环境变量将用作生成配置文件的代码中的开关。

我很喜欢使用 Python、Perl 或 C。

该工作站正在运行最新的 GNU/Linux Debian 或 Ubuntu 发行版,并带有相当新的内核。

所以。你觉得怎么样 :

  • 你会用保险丝吗?
  • 你会生产另一种包装器吗?根据 janneb 建议使用 chroot(2)?
  • 使用Linux允许的其他东西?

我有点知道我能够生产出一些实用的东西,但我会得到社区的建议,因为我现在不想重新发明轮子。

谢谢。弗洛里安

4

2 回答 2

2

一个简单的方法是应用程序在调用库初始化函数之前调用 chroot()。例如,如果你 chroot 进入 $HOME/theapp,那么每个用户都可以在 $HOME/theapp/usr/local/thelib/main.conf 中拥有一个私有的配置文件,以及在 $HOME/theapp 下的某个地方的私有工作目录。

于 2010-07-12T21:53:26.540 回答
2

您可以使用 LD_PRELOAD 加载一个拦截 open() 调用并打开 ~/.main.conf 的小存根(假设这是一个共享对象)。然后在您的应用程序启动例程中,检查 LD_PRELOAD 是否设置为正确的值,如果没有,请使用正确的环境重新启动应用程序。

于 2010-07-13T08:43:59.407 回答