用户相关的文件内容

时间:2010-07-12 21:38:17

标签: linux operating-system filesystems fuse chroot

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

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

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

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

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

我使用Python,Perl或C很舒服。

工作站正在运行最新的GNU / Linux Debian或Ubuntu发行版,其中包含一个非常新的内核。

因此。你怎么看:

  • 你会使用FUSE吗?
  • 你会生产另一种包装 - 使用chroot(2)建议在每个janneb下面 - ?
  • 使用Linux允许的其他内容吗?

我知道我能够生产出一些功能性但我会得到社区建议,因为我现在不想重新发明轮子。

感谢。 弗洛里安

2 个答案:

答案 0 :(得分:2)

一种简单的方法是让app在调用库init函数之前调用chroot()。例如。如果你chroot到$ HOME / theapp然后每个用户可以在$ HOME / theapp / usr / local / thelib / main.conf中拥有一个私有的配置文件,以及在$ HOME / theapp下的某个私人工作目录。

答案 1 :(得分:2)

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