Установка специального пользователя / пароля для сценариев csh с использованием db2 connect to table в Linux 2.6 / IBM DB2 v9.7

У нас есть много старых сценариев csh, которые подключаются к нашей базе данных db2 с помощью команды «db2 connect to‹ table> ». Они НЕ используют явно "db2 connect to‹ table> user ‹user> using‹ password> ", поэтому соединение по умолчанию установлено для пользователя запуск скрипта.

Мы хотим изменить соединение db2 с учетной записи пользователя, запускающей сценарий csh, на выделенную учетную запись db2 (называемую «dblegacy»).

Я попытался написать исполняемый файл оболочки, который будет загружаться / запускаться от имени пользователя root, а затем изменить учетную запись на «dblegacy» перед выполнением сценариев csh. Единственная проблема заключается в том, что Linux (ld.so) удаляет переменную среды LD_LIBRARY_PATH из всех скриптов / файлов, загружаемых после изменения учетной записи setuid () на «dblegacy». И, конечно же, для скриптов csh требуются разделяемые библиотеки.

Итак, мне нужен способ использования "db2 connect to table" или использования по умолчанию для этой учетной записи "dblegacy".


person Richard    schedule 08.12.2011    source источник
comment
Я действительно не понимаю, почему очистка переменной LD_LIBRARY_PATH приведет к сбою ваших csh(1) скриптов - если вашему csh(1) интерпретатору требуются библиотеки, которых нет в /etc/ld.so.conf или /etc/ld.so.conf.d/* списке каталогов, этот каталог, вероятно, должен быть в списке.   -  person sarnold    schedule 08.12.2011
comment
Был там, пробовал. :-) Я убедился, что каталог находится в файле ld.so.conf (я даже пробовал его в конфигурациях .d sub. Не повезло. Ld.so, похоже, игнорирует все это и разрешает только определенную предопределенную базовую библиотеку каталоги.   -  person Richard    schedule 12.12.2011


Ответы (2)


Если вы выполняете сценарии от имени пользователя dblegacy (с использованием su или sudo), вам необходимо убедиться, что сценарии правильно настраивают среду DB2.

Для csh сценарий должен иметь в верхней части сценария (то есть до и команды DB2), который выглядит примерно так:

# Initialize DB2 environment
source /home/db2inst1/sqllib/db2cshrc

Конкретное расположение этого файла может варьироваться в зависимости от того, для какого пользователя определен ваш экземпляр DB2. Обычно он находится в .cshrc пользователя, так что это может помочь вам определить правильное расположение правильного файла db2cshrc.

После того, как вы добавили эту строку, вы должны иметь возможность от имени пользователя root запускать свой скрипт, например:

su - dblegacy -c "/path/to/script.csh"
person Ian Bjorhovde    schedule 08.12.2011
comment
Проблема в том, что процесс запускается как обычный пользователь, и нам нужно перейти с этого пользователя на пользователя dblegacy. Для этого выполняется исполняемый файл chmod + s и chown root, а внутри он вызывает setuid () для перехода на пользователя dblegacy перед выполнением сценария csh. ld.so затем (в целях безопасности) удаляет несколько переменных среды. - person Richard; 10.12.2011

Это (пока) кажется нашим способом обойти проблему ...

Вызов программы: execve ("/ cvt / scripts / cvtwrap", argv [], envp []), где argv [1] - это полный путь к целевому сценарию.

cvtwrap:

#!/bin/csh -fx

alias db2 "db2cvt `which db2`"
source /cvt/scripts/$*

Затем всякий раз, когда целевой скрипт выполняет db2, он выполняет db2cvt (chmod + s как root), который выполняет наш setuid для учетной записи dblegacy перед выполнением реального db2.

person Richard    schedule 12.12.2011