Пользовательский контент файла - PullRequest
1 голос
/ 13 июля 2010

По некоторым прискорбным причинам мне приходится преобразовывать проприетарную и двоичную библиотеку из однопользовательской для каждой рабочей станции в многопользовательскую для каждой рабочей станции.

Текущая настройка .Пользователь использует программу, связанную с библиотекой.Эта библиотека читает системный файл конфигурации (используя жестко заданный путь, например /usr/local/thelib/main.conf), который сам содержит несколько путей к нескольким рабочим каталогам.Сами wdir содержат кучу файлов пользовательских данных.

Желаемый результат .Возможность управлять несколькими пользователями на одной рабочей станции.Конечно, пользователь не сможет читать или изменять какие-либо данные других пользователей через библиотеку, о чем должны позаботиться права Unix, если мне удастся передать библиотеке разные рабочие каталоги для каждого пользователя.

Библиотека может использоваться несколькими пользователями одновременно, поэтому использование файла конфигурации в / usr / local во время выполнения не вариант.

Я думал об использовании FUSE для обеспечения другогосодержимое для файла /usr/local/thelib/main.conf, в зависимости от переменной окружения или текущего пользователя unix.Затем окружение var будет использоваться в качестве переключателя внутри кода, создающего файл конфигурации.

Мне удобно использовать Python, Perl или C.

Рабочая станция работает сдата выпуска GNU / Linux Debian или Ubuntu с довольно свежим ядром.

Итак.Как вы думаете:

  • вы бы использовали FUSE?
  • вы бы сделали другую обертку - использование chroot (2) было предложено ниже для каждого janneb -?
  • использовать что-то еще, разрешенное Linux?

Я знаю, что смогу создать что-то функциональное, но я получу совет от сообщества, так как не хочу сейчас изобретать велосипед.

Спасибо.Florian

Ответы [ 2 ]

2 голосов
/ 13 июля 2010

вы можете использовать LD_PRELOAD для загрузки небольшой заглушки, которая перехватывает вызовы open () и открывает ~ / .main.conf (при условии, что это общий объект). Затем в подпрограмме запуска приложения убедитесь, что для LD_PRELOAD задано правильное значение, а если нет, перезапустите приложение в правильной среде.

2 голосов
/ 13 июля 2010

Простой способ состоит в том, чтобы приложение вызывало chroot () перед вызовом функций библиотеки init.Например, если вы подключаетесь к $ HOME / theapp, каждый пользователь может иметь свой собственный файл конфигурации в $ HOME / theapp / usr / local / thelib / main.conf, а также частные рабочие каталоги где-то в $ HOME / theapp.

...