Шрифт:
Слабое место POSIX
Firebird может допустить соединения клиентов с серверами на платформах POSIX, при которых обходится идентификация пользователя Firebird, а вместо этого используется схема разрешений для пользователя операционной системы. Это давно существующая возможность, наследованная от InterBase. Незнание данного факта оставляет большую дыру в безопасности на платформах POSIX, если путь доступа пользователя POSIX будет широко открыт, а системный администратор будет ошибочно предполагать, что база данных безопасности является максимально защищенной.
Это не так. Когда пользователи POSIX соединяются с базой данных без передачи серверу Firebird имени пользователя и пароля, подпрограмма идентификации подставляет текущие характеристики операционной системы вместо характеристик пользователя Firebird. Если пользователь операционной системы имеет привилегии root, опасайтесь, очень опасайтесь.
Поскольку пользователи POSIX могут получить доступ к базам данных Firebird через их учетные данные операционной системы, важно определить надежные взаимосвязи между сервером и каждой клиентской рабочей станцией. Это переводится в записи в /etc/host.equiv или в другие данные, такие как файл .rhost в домашнем каталоге пользователя на сервере.
! ! !
СОВЕТ. Читатель также может поэкспериментировать с файлом /etc/gds_host.equiv - см. текст "Installing InterBase to start automatically and run as a service under Linux" (Инсталляция InterBase для автоматического запуска и выполнения в качестве сервиса под Linux) у Richard Combs на http://community.borland.eom/article/0,1410,27761,00.html.
. ! .
Переменные окружения ISC_USER и ISC_PASSWORD должны быть исключены из системы.
! ! !
ВНИМАНИЕ! Автору не известны способы определения надежной взаимосвязи между рабочей станцией Windows и сервером UNIX, но это не означает, что такое не может быть сделано.
. ! .
Утилита gsec
В Firebird существует утилита gsec в качестве интерфейса командной строки для работы с базой данных безопасности. Она имеет собственную оболочку для интерактивного использования, либо команда gsec может быть непосредственно введена в командной строке операционной системы или запущена из исполняемого скрипта (скрипта командной строки или пакетного файла).
Любой идентифицированный пользователь может запустить gsec, но только пользователь SYSDBA может изменять сведения о пользователе, хранящиеся в базе данных безопасности. Требуются имя пользователя и пароль, независимо от того, видимы ли из командной строки переменные окружения ISC_USER и ISC_PASSWORD. В POSIX, если вы подключились как root, вы можете вызывать gsec без ввода параметров -user и -password.
Запуск интерактивной сессии gsec
В командной строке в каталоге Firebird /bin введите следующее. Для POSIX:
./gsec -user sysdba -password masterkey
Для Windows:
gsec -user sysdba -password masterkey
Подсказка командной строки изменится на GSEO, указывающую, что вы запустили gsec в интерактивном режиме.
Для завершения интерактивной сессии введите QUIT.
SYSDBA может использовать gsec на клиентской машине для управления идентификацией пользователей на удаленном сервере. Синтаксис вызова в этом случае несколько отличается: он требует переключателя -database, за которым следует полный сетевой путь к базе данных безопасности. Например (это одна команда), здесь показывается, как клиент POSIX обращается к серверу Windows в версии 1.5:
./gsec -database hotchicken:с:\Program Files\Firebird\Firebird_1_5\security. fdb
– user sysdba -password masterkey
Следующий пример показывает обращение клиента Windows к серверу POSIX в версии 1.0.x:
gsec -database coolduck:/opt/firebird/isc4.gdb
– user sysdba -password masterkey
Командами интерактивной утилиты gsec являются отображение, добавление, модификация, удаление, помощь и выход. Они не чувствительны к регистру.
* add, modify и delete используются для добавления и удаления пользователей и для изменения паролей. Они требуют в качестве параметра имя пользователя (username) вместе с соответствующими переключателями и аргументами.
* display без имени пользователя отображает список всех пользователей. Пароли не показываются. Эта команда также может получать имя пользователя. В этом случае отображаются подробности этого пользователя.
* help или его алиас ? отображает текст помощи для утилиты.