понедельник, 20 декабря 2010 г.

Как правильно клонировать ORACLE HOME

В данном примере рассмотрим процесс клонирования бинаров оракла с сервера DEV на сервер TEST.

Сервер DEV:
Запаковываем директорию с бинарами Оракла и переносим на сервер TEST

dev:$ echo $ORACLE_HOME
/u01/app/oracle/product/11.2.0/orahome
dev:$ cd /u01/app/oracle/product/11.2.0
dev:$ tar -cvf orahome.tar orahome
dev$: scp -rp orahome.tar oracle@test:/u01/app/oracle/product/11.2.0/

Сервер TEST:
Распаковываем директорию

test:$ cd /u01/app/oracle/product/11.2.0
test:$ tar -xvf orahome.tar

Клонируем ORACLE HOME с помощью скрипта $ORACLE_HOME/clone/bin/clone.pl

test:$ cd /u01/app/oracle/product/11.2.0/orahome/clone/bin
test:$ perl clone.pl ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/11.2.0/orahome ORACLE_HOME_NAME=ORA_HOME11R2

./runInstaller -clone -waitForCompletion  "ORACLE_BASE=/u01/app/oracle" "ORACLE_HOME=/u01/app/oracle/product/11.2.0/orahome" "ORACLE_HOME_NAME=ORA_HOME11R2" -silent -noConfig -nowait
Starting Oracle Universal Installer...

Checking swap space: must be greater than 500 MB.   Actual 13044 MB    Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2010-06-28_12-19-47PM. Please wait ...Oracle Universal Installer, Version 11.2.0.1.0 Production
Copyright (C) 1999, 2009, Oracle. All rights reserved.

You can find the log of this install session at:
 /u01/app/oracle/oraInventory/logs/cloneActions2010-09-28_12-19-47PM.log
.................................................................................................... 100% Done.

Installation in progress (Monday, June 28, 2010 12:20:29 PM WST)
..............................................................................                                                  78% Done.
Install successful

Linking in progress (Monday, June 28, 2010 12:21:06 PM WST)
Link successful

Setup in progress (Monday, June 28, 2010 12:23:34 PM WST)
Setup successful

End of install phases.(Monday, June 28, 2010 12:34:05 PM WST)
Starting to execute configuration assistants
The following configuration assistants have not been run. This can happen because Oracle Universal Installer was invoked with the -noConfig option.
--------------------------------------
The "/u01/app/oracle/product/11.2.0/orahome/cfgtoollogs/configToolFailedCommands" script contains all commands that failed, were skipped or were cancelled. This file may be used to run these configuration assistants outside of OUI. Note that you may have to update this script with passwords (if any) before executing the same.
The "/u01/app/oracle/product/11.2.0/orahome/cfgtoollogs/configToolAllCommands" script contains all commands to be executed by the configuration assistants. This file may be used to run the configuration assistants outside of OUI. Note that you may have to update this script with passwords (if any) before executing the same.

--------------------------------------
WARNING:
The following configuration scripts need to be executed as the "root" user.
/u01/app/oracle/product/11.2.0/orahome/root.sh
To execute the configuration scripts:
    1. Open a terminal window
    2. Log in as "root"
    3. Run the scripts

The cloning of ORA_HOME11R2 was successful.
Please check '/u01/app/oracle/oraInventory/logs/cloneActions2010-06-28_12-19-47PM.log' for more details.

Запускаем скрипт root.sh под root.

# pwd
/u01/app/oracle/product/11.2.0/orahome
# ./root.sh

Running Oracle 11g root.sh script...

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /u01/app/oracle/product/11.2.0/orahome
Entries will be added to the /var/opt/oracle/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.
Finished product-specific root actions.

Клонирование успешно завершено.

суббота, 11 декабря 2010 г.

Обеспечение защиты листенера


Листенер – это первая ступень на пути к базе данных, которая может содержать конфиденциальную секретную информацию. Плохо сконфигурированный незащищенный листенер предоставляет нарушителю различные способы атак, включая удаленное выполнение команд, атаки типа отказ в обслуживании”. Целью хакера, атакующего базу данных, является поиск и использование просчетов в конфигурировании листенера.

Листенер по команде STATUS сообщает о себе массу информации, включая:
·   операционную систему сервера (полезна для атак на ОС);
·   версию листенера (обычно, но не всегда, совпадает с версией базы данных). Полезная информация, когда известны уязвимости данной версии и DBA не вставил соответствующие заплаты;
·   время запуска и время работы с точностью до секунд. Знание текущего системного времени может дать ключ к часовому поясу, в котором работает машина, – это всегда полезно для планирования атак, когда администратор, скорее всего, спит;
·   проверку установки пароля листенера (установка SECURITY);
·   контроль включения трассировки и определение данного ее уровня. Трассировочный файл может содержать подробную информацию о получаемых пакетах;
·   контроль включения протокола SNMP (открывает еще один механизм атаки);
·   файл параметров листенера и протокольные файлы. Это позволяет узнать каталог ORACLE_HOME (так что, когда мы проникнем в систему, мы будем знать, где находятся данные);
·   доступные сервисы;
Простейший метод удаленной отправки команд листенера, это использование lsnrctl в командной строке с параметрами:
lsnrctl <команда> IP адрес
lsnrctl status 192.168.1.100
lsnrctl stop 192.168.1.100
Для защиты листенера существуют несколько параметров, которые повышают его безопасность.
Установка пароля листенера
Эта мера является обязательной и позволит остановить большинство попыток атак. Обычно это простой процесс, вам требуется установить пароль в lsnrctl, который будет хранится в файле listener.ora в зашифрованном виде, или установить параметр PASSWORDS_, тогда пароль будет хранится в открытом виде.

LSNRCTL> set current_listener <имя_листенера>
LSNRCTL> change_password
Old password: <нажать ввод если старого пароля не было>
New password: <указать новый пароль>
Reenter new password: <повторить ввод нового пароля>
LSNRCTL> set password
Password: <указать пароль>
LSNRCTL> save_config

Проверяете файл listener.ora на наличие параметра PASSWORDS_. Важно помнить, что в версиях Oracle до 10g можно использовать как обычный пароль так и зашифрованную строку пароля.
Локальная авторизация на уровне ОС
Основное изменение в безопасности листенера в версии Oracle 10g (Release 1 и Release 2), стала локальная авторизация. Листенер не может быть удаленно управляемым по умолчанию, и может управляться только локально, владельцем процесса tnslcnr (обычно это пользователь oracle). Если любой другой поль-зователь операционной системы предпримет попытку управлять прослушивателем, то  увидит следующее сообщение в журнале листенера:

TNS-01190: The user is not authorized to execute the requested commend

При попытке удаленного управления, будет сообщение:

TNS-01189: The listener could not authenticate the user

Локальная аутентификация может быть отключена установкой параметра LOCAL_OS_AUTHENTICATION_ в файле listener.ora:

LOCAL_OS_AUTHENTICATION_ = OFF
Включение журналирования
Мера так же является обязательной, это позволит определить атаки, выполнение команд и попытки подбора пароля перебором.

LSNRCTL> set current_listener
LSNRCTL> set password
Password:
LSNRCTL> set log_directory /network/admin
LSNRCTL> set log_file .log
LSNRCTL> set log_status on
LSNRCTL> save_config
Установка ADMIN_RESTRICTIONS в LISTENER.ORA
Действие является обязательным, и позволяет запретить любые изменения листенера во время работы. Достигается установкой параметра ADMIN_RESTRICTIONS_ в значение ON в файле listener.ora. Этот параметр позволит запретить исполнение команд set и все изменения в работу листенера можно будет внести только вручную в файл listener.ora.

ADMIN_RESTRICTIONS_ = ON

После перезапускаете листенер выполнив команду reload в lsnrctl, для того что бы изменения вступили в силу. Все последующие изменения можно будет делать только вручную в файле listener.ora, не используя команду set в lsnrctl. После внесения изменений в файл listener.ora используйте команду reload или stop и start в lsnrctl.

Защита директории $ORACLE_HOME /network/admin

Пароль прослушивателя хранится в файле listener.ora. Легким редактированием файла можно убрать парольную защиту. Если же пароль добавлялся вручную, то он хранится в открытом виде. Если средствами lsnrctl, то в виде зашифрованной строки. Разрешения на файлы listener.ora, sqlnet.ora и protocol.ora в директории $ORACLE_HOME/network/admin должны быть чтение/запись/исполнение только для учетной записи владельца oracle, для других учетных записей, в *NIX системах – 0600. На файл tnsnames.ora в *NIX системах должны быть права 0644.

Защита tnslsnr и lsnrctl

Эта мера призвана ограничить разрешения на исполняемые файлы tnslsnr и lsnrctl. Они расположены в директории $ORACLE_HOME/bin, и разрешения на них, в *NIX системах, по рекомендации Oracle должны быть выставлены в 0751. Возможно изменить разрешения на 0700, что более обезопасит файлы, но это можно делать только после тщательной проверки на тестовых средах.
Удаление неиспользуемых служб
Большинство установок по умолчанию имеют в настройках прослушивателя PL/SQL External Procedures (ExtProc). Обычно имя ExtProc или PLSExtProc. Как правило эта служба устанавливается но не используется. Узнать используется служба или нет можно у разработчиков. Если не используется, то удалите ее описание из файла listener.ora. Очень часто файл listener.ora копируется с других экземпляров и серверов, в таком случае требуется очистка файла от ненужного мусора.