четверг, 24 июля 2014 г.

Weblogic Server Migration


Server Migration - технология, позволяющая организовать отказоустойчивое решение с  защитой от потери сервиса при потере одного из хостов кластера. Управляемый сервер со всеми приложениями и сервисами поднимается на новом хосте. Решение особенно эффективно для singleton-сервисов.  

Моё окружение.

Host 1: 172.16.1.1 hostname: sms_a
Host 2: 172.16.1.2 hostname: sms_b
VIP     : 172.16.1.3
Weblogic Server 12.1.2
Oracle Linux 6.4

1.Настройки ОС.

1.1 Для пользователя oracle обновить CLASSPATH на обоих хостах.
export MW_HOME=/opt/oracle/middleware/Oracle_WL
PATH=$PATH:$MW_HOME/user_projects/domains/sms_domain/nodemanager:$MW_HOME/user_projects/domains/sms_domain/bin/server_migration:$MW_HOME/Oracle_WL/wlserver/common/bin
export PATH
 1.2 Добавить пользователю oracle возможность запускать утилиты с правами суперпользователя. Для этого на обоих хостах редактируется файл /etc/sudoers 

oracle ALL=NOPASSWD: /sbin/ifconfig,/sbin/arping,$DOMAIN_HOME/bin/server_migration/wlsifconfig.sh


Если этого не сделать, в логах nodemanager-а можно наблюдать вот такие сообщения:
<Jul 16, 2014 11:41:19 AM MSK> <WARNING> <sudo: sorry, you must have a tty to run sudo>
<Jul 16, 2014 11:41:19 AM MSK> <WARNING> <Failed to remove 172.16.5.231 netmask  from eth0:1.>
<Jul 16, 2014 11:41:19 AM MSK> <WARNING> <Exception while executing 'PostStop' ExecutableCallbacks>
java.io.IOException: Exception while executing 'PostStop' ExecutableCallbacks
        at weblogic.nodemanager.server.WLSProcess$MultiExecuteCallbackHook.execute(WLSProcess.java:290)
        at weblogic.nodemanager.server.WLSProcess.executePostStopHooks(WLSProcess.java:239)
        at weblogic.nodemanager.server.WLSProcess.waitForProcessDeath(WLSProcess.java:205)
        at weblogic.nodemanager.server.ServerMonitor.runMonitor(ServerMonitor.java:298)
        at weblogic.nodemanager.server.ServerMonitor.run(ServerMonitor.java:254)
        at java.lang.Thread.run(Thread.java:745)
Caused by: weblogic.nodemanager.util.MultiException:

В Linux обычно запрещено выполнение команд вида
ssh oracle@servername sudo ifconfig
Они не безопасны, так как передают пароль в открытом виде. Такая команда завершится с ошибкой.
sudo: sorry, you must have a tty to run sudo
Вообще говоря, при подключении по ssh у пользователя нет tty не только для sudo:
ssh oracle@servername tty
not a tty
1.4 Опционально можно настроить аутентификацию без пароля
ssh-keygen
ssh-copy-id oracle@servername_1

После выполнения этих пунктов у пользователя oracle будет достаточно прав для создания интерфейса eth0:1 и назначения ему виртуального ip-адреса. Во время миграции сервера этот интерфейс будет создаваться с помощью скрипта wlsifconfig.sh, запущенного nodemanager-ом.
Интерфейс с VIP-адресом (в моём случае это 172.16.1.3) необходимо создать до того, как будет запущен сервер, слушающий на нём.
1.5 Создание интерфейса eth0:1 на первом хосте:
[oracle@servername_1 ~]sudo $DOMAIN_HOME/bin/server_migration/wlsifconfig.sh -addif eth0 172.16.1.3 255.255.240.0
 Здесь 172.16.1.3        - VIPадрес
            255.255.240.0 - маска подсети.
Если скрипт отработает без ошибок, в выводе ifconfig появится новый интерфейс.
eth0      Link encap:Ethernet  HWaddr 55:53:56:56:11:30
          inet addr:172.16.1.1  Bcast:172.16.15.255  Mask:255.255.240.0
         [...]
eth0:1    Link encap:Ethernet  HWaddr 5:53:56:56:11:30
          inet addr:172.16.1.3  Bcast:172.16.15.255  Mask:255.255.240.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
Теперь можно обновить arp-таблицу на ближайшем свиче командой
sudo arping -q -U -c 5 -I eth0 172.16.1.3

 2. Настройка Nodemanager.

 К конфигурационный файл nodemanager.properties добавить строки

Interface=eth0
NetMask=255.255.240.0
UseMACBroadcast=true
ListenAddress=172.16.1.1
В качестве  ListenAddress указываются ip адреса хостов. В моём случае это 172.16.1.1 и 172.16.1.2 соответственно.

3. Настройки Weblogic сервера.

3.1. Необходимо создать кластер. В моём случае это trvlrCluster.

3.2. Создать две машины.


 В настройках первой указать ip-адрес (hostname) и порт nodemanager-a первого хоста 172.16.1.1 (sms-a) Для второго - 172.16.1.2 (sms-b)


 3.3. Создать два сервера. trvlr_1 и trvlr_2.  Для первого серверa указать Listen Address - адрес виртуального интерфейса, созданного на шаге 1.5. В моём случае это 172.16.1.3. Для второго сервера - ip адрес второго хоста(172.16.1.2). Возможности мигрировать у второго сервера не будет.



 В настройках серверов (Servers -> trvlr_1 -> Configuration - > General) выбрать имя кластера, созданного в пункте 3.2 и машину, созданную в пункте 3.2
 Для второго сервера мои настройки выглядят так:

 В настройках первого сервера выбрать Automatic Server Migration Enabled


 3.4 Опционально с помощью скрипта $WL_HOME/wlserver/server/db/oracle/920/leasing.ddl  можно создать в БД таблицу лизинга для кластера. Затем создать датасорс (в моём случае leasingDS), назначить его всем серверам кластера и на вкладке Clustername - > Configuration ->Migration   выбрать в качетве Migration Basis базу данных.

4. Проверка работоспособности.

4.1 На вкладке servers -> trvlr_1 -> Control -> Migration можно проверить возможность мигрировать на второй хост. 
После нажатия кнопки "Save" на втором хосте будет поднят интерфейс eth0:1 с адресом  172.16.1.3 и сервер trvlr_1. На хосте 172.16.1.1 (sms-a) соответствующий интерфейс будет опущен автоматически.
4.2 После того как сервер поднимется на втором хосте можно проверить автоматическую миграцию сервера. Для этого надо выключить host 172.16.1.2. Если возможности выключить хост нет, можно погасить на нём nodemanager, сервер trvlr_1 и интерфейс eth0:1

killall -f -9 weblogic.NodeManager
killall -f -9 trvlr_1
sudo $DOMAIN_HOME/bin/server_migration/wlsifconfig.sh -removeif eth0 172.16.1.3 255.255.240.0





понедельник, 14 июля 2014 г.

Проверка загруженности дисков

 Проблема нехватки  I/O c дискаового массива выглядит примерно так:
 %iowait растёт при не самой высокой нагрузке (35 Mb/сек достойный результат для диска, но не для полки HP 9500):
 Ещё один признак того, что массив не справляется - очередь на диск.
Второй столбец на скриншоте (b) - количество процессов в очереди.
2 - это много. 5-6 - это очень много.

Получить скорость блочного чтения hdparm -t. На скриншоте проблемный раздел даёт 75 Mb/сек

Скорость записи в файл без использования кэша операционки.
time dd if=/dev/zero of=filename bs=8192 count=10000 oflag=direct

четверг, 15 мая 2014 г.

Использование HugePages и hugetlbfs для JVM

1. Необходимо включить использование HugePages в операционной системе.
Для линукса размер страницы почти всегда равен 2Mb. Проверить можно так:
cat /proc/meminfo|grep Hugepagesize

Hugepagesize:       2048 kB

В файле /etc/sysctl.conf необходимо добавить количество необходимых страниц и id группы,
 которой разрешено эти страницы использовать.

vm.nr_hugepages=3000
Количество страниц nr_hugepages=(HeapSize + PermSize)/Hugepagesize

 JVM запускается с опцией java -XX:+UseLargePages


понедельник, 5 мая 2014 г.

Настройки OVD для связки Oracle Portal + OVD + MS Active Directory

Для связки Oracle Virtual Directory и продуктов Oracle Portal необходима некоторая дополнительная настройка OVD.

1. Убрать отметку в настройках адаптера follow referrals.


2. Для связки ODV - Acrive Directory
Добавить список классов, соответствующие пользователю в Actie Directory в файл jps-config.xml
<serviceInstance name="idstore.ldap" provider="idstore.ldap.provider">
            <property name="idstore.config.provider" value="oracle.security.jps.wls.internal.idstore.WlsLdapIdStoreConfigProvider"/>
            <property name="CONNECTION_POOL_CLASS" value="oracle.security.idm.providers.stdldap.JNDIPool"/>
            <extendedProperty>
                <name>user.object.classes</name>
                <values>
                    <value>top</value>
                    <value>person</value>
                    <value>inetorgperson</value>
                    <value>organizationalperson</value>
                </values>
            </extendedProperty>

        </serviceInstance>
3. Добавить виртуальный атрибут orclguid в настройках виртуального адаптера VirtualAttrPlugin.
AddAttribute orclguid=%objectguid%


понедельник, 24 марта 2014 г.

Аутентификация на weblogic-серверах через домен windows. Настройка SSO.


Настройки моего окружения:
домен: WCC.LOCAL
Контроллер домена ( KDC-сервер): dc1.wcc.local
Сервер приложений: budwf.moscow.mydomain.ru

Настройки на стороне домена AD.

Необходимо создать пользователя с произвольным именем. Для аутентификации будут использоваться principals этого пользователя. Использование протокола Kerberos предполагает шифрование. В настройках созданной учётной записи необходимо отметить поддержку, например, AES 128. При использовании это типа шифрования не понадобится скачивание дополнительных библиотек на сервера приложений.

ktpass -princ HTTP/srv_budwf@WCC.LOCAL -mapuser  srv_budwf -kvno 0 -crypto AES128-SHA1 -ptype KRB5_NT_PRINCIPAL -pass ***** -out c:\distr\budwf.keytab
Targeting domain controller: DC1.wcc.local
Successfully mapped HTTP/srv_budwf to srv_budwf.
Password succesfully set!
Key created.
Output keytab to c:\distr\oracleadmintst.keytab:
Keytab version: 0x502
keysize 60 HTTP/srv_budwf@WCC.LOCAL ptype 1 (KRB5_NT_PRINCIPAL) vno 0 etype 0x1
1 (AES128-SHA1) keylength 16 (0x5e4018d5c51d4445677201f95477046f)

setspn -L srv_budwf
Зарегистрирован ServicePrincipalNames для CN=srv_budwf,OU=System Accounts,OU=Ser
ver,OU=CentralOffice,DC=wcc,DC=local:
        HTTP/srv_budwf
Можно удалить бесполезные service principal name командой
setspn -D HTTP/srv_budwf srv_budwf
и добавить spn с полным именем сервера
setspn -S HTTP/budwf.moscow.mydomain.ru srv_budwf
Checking domain DC=gksm,DC=local

Registering ServicePrincipalNames for CN=srv_budwf,OU=System Accounts,OU=Server,OU=CentralOffice,DC=wcc,DC=local
HTTP/budwf.moscow.mydomain.ru srv_budwf
Updated object
Должно получиться что-то похожее на это:
setspn -L srv_budwf
Registered ServicePrincipalNames for CN=srv_budwf,OU=System Accounts,OU=Server,OU=CentralOffice,DC=wcc,DC=local:
        HTTP/budwf.moscow.mydomain.ru srv_budwf
        HTTP/budwf

Настройки хоста сервера приложений.

Готовый кейтаб можно копировать на сервер приложений, в корневую директорию домена.
На сервере приложений необходимо отредактировать файл /etc/krb5.conf

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = WCC.LOCAL
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true

 default_tgs_enctypes = aes128-cts
 default_tkt_enctypes = aes128-cts
 permitted_enctypes = aes128-cts
 clockskew = 300


[realms]
 WCC.LOCAL = {
  kdc = dc1.wcc.local
  admin_server = dc1.wcc.local
  default_domain = wcc.local
 }

[domain_realm]
 .wcc.local = WCC.LOCAL
 wcc.local = WCC.LOCAL

Проверить правильность конфигов можно командой kinit. Ей вывод должен быть пустой:
kinit -k -t /opt/oracle/middleware/user_projects/domains/budwf_domain/budwf.keytab  HTTP/srv_budwf@WCC.LOCAL
В качестве второго аргумента нужно указать principal из keytab-а. Его можно посмотреть командой:
klist -k -t /opt/oracle/middleware/user_projects/domains/budwf_domain/budwf.keytab
Keytab name: FILE:/opt/oracle/middleware/user_projects/domains/budwf_domain/budwf.keytab
KVNO Timestamp         Principal
---- ----------------- --------------------------------------------------------
   0 01/01/70 03:00:00 HTTP/srv_budwf@WCC.LOCAL

Настройка Weblogic для SSO.

1.Конфигурационный файл JAAS. В качестве principal указывается principal кейтаба.
В качестве keyTab - путь к кейтабу относительно корня домена.

/opt/oracle/middleware/user_projects/domains/budwf_domain $ cat krb5Login.conf
com.sun.security.jgss.initiate {
  com.sun.security.auth.module.Krb5LoginModule required
  principal="HTTP/srv_budwf@WCC.LOCAL"
  useKeyTab=true
  keyTab=budwf.keytab
  storeKey=true
  debug=false;
};

com.sun.security.jgss.krb5.accept {
  com.sun.security.auth.module.Krb5LoginModule required
  principal="HTTP/srv_budwf@WCC.LOCAL"
  useKeyTab=true
  keyTab=budwf.keytab
  storeKey=true
  debug=false;
};
2.Ключи для запуска JVM weblogic-сервера. Их необходимо добавить в переменную JAVA_OPTIONS либо на странице ServerStart консоли. Путь для Djava.security.auth.login.config необходимо указывать либо относитьельно корня файловой системы, либо относительно корня домена.
-Dsun.security.krb5.debug=true
-Djava.security.krb5.realm=wcc.LOCAL
-Djava.security.krb5.kdc=dc1.wcc.local
-Djava.security.auth.login.config=/opt/oracle/middleware/user_projects/domains/budwf_domain/krb5Login.conf-Djavax.security.auth.useSubjectCredsOnly=false

3. Настройка AD-провайдера.
Настраивается как обычно.
4. Настройка WebLogic Negotiate Identity Assertion provider
Заключается в выборе имени для этого провайдера. Он должен стоять выше, чем AD-провайдера в списке.

Настройка браузера

В адресоной строке firefox набрать about:config.
изменить значения

вторник, 20 августа 2013 г.

Настройка Windows AD для смены пароля через Access Manager

Этот пост описывает настройку Active Directory для аутентификации пользователя и смены его пароля средствами OracleAccess Manager 11gR2. Дополнительных настроек ovd, описанных в этом посте, делать не нужно.
Оглавление:

Установка Access Manager 11gR2.
Установка  Oracle Virtual Directory
Настройка Virtual Directory
Настройка Active Directory 
Настройка Access Manager


1. Для хранения ob-атрибутов в АД необходимо расширить её схему. Ldif-файл для расширения схемы входит в дистрибутив AccessManager 11gR2. Его можно найти здесь:
$MIDDLEWARE_HOME/Oracle_IDM1/oam/server/pswdservice/ldif
 В файле много лишних спецсимволов, из-за которых импорт проходит с ошибкой. Под катом отредактированный файл.
 На контроллере необходимо выполнить:
ldifde -i -f "c:\ora\AD_PWDPersonSchema.ldif" –v

2. Дополнительное редактирование схемы.
Для редактирования схемы можно использовать оснастку windows. По умолчанию она не включена. Чтобы ей воспользоваться, надо зарегистрировать библиотеку командой, выполненной в консоли "as Administrator"
regsvr32 schmmgmt.dll
После этого станет доступна оснастка  ActiveDirectory Shema


В этом примере я редактирую класс person, который есть у каждого пользователя.
Импортированные из ldiff-файла классы необходимо добавить в Auxiliary-классы person

и в возможных superior-aх этих классов указать класс person
3. Создание ACL для ob-атрибутовПользователям необходимо дать права на редактирования добавленных атрибутов.
Это можно сделать из оснастки Users And Computers, включив Advanced  Features View

В этом примере создаются ACL на объект сn=users, dn=wcc, dn=local. Доступ даётся для группы SELF. Таким образом пользователи будут иметь возможность менять только свои атрибуты.


Теперь можно сменить значение всех ob-атрибутов через LDAP браузер




среда, 7 августа 2013 г.

JPS-01016: A password credential expected after upgradeOPSS()

На одной из инсталляций после ручного выполнения команды upgradeOPSS() в логах AdminServer-а появляются ошибки (полный текст под катом):

A password credential is expected; instead found null for alias BOOTSTRAP_JPS and key bootstrap_sO8uNRI9l8k4f8ZuBwsz+PME/qI=
JPS-00071: Ldap bootstrap credential retrieval failed
<Critical> <WebLogicServer> <BEA-000386> <Server subsystem failed. Reason: weblogic.security.SecurityInitializationException:

Текущие настройки сервера:
1. Credentian Store Provider  - база данных


2. Текущее содержимое bootstrap/cwallet.sso
/opt/oracle/middleware/oracle_common/bin/orapki wallet display -wallet cwallet.sso
Oracle PKI Tool : Version 11.1.1.7.0
Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.
Requested Certificates:
User Certificates:
Oracle Secret Store entries:
BOOTSTRAP_JPS@#3#@bootstrap_E9Tyfa0er5oeWvzaKnpyyKmg0cA=
fks@#3#@current.key
fks@#3#@master.key.0
fks@#3#@master.key.0.base64
IntegrityChecker@#3#@kss
Trusted Certificates:
Subject:        OU=Class 2 Public Primary Certification Authority,O=VeriSign\, Inc.,C=US
Subject:        OU=Class 3 Public Primary Certification Authority,O=VeriSign\, Inc.,C=US
Subject:        CN=GTE CyberTrust Global Root,OU=GTE CyberTrust Solutions\, Inc.,O=GTE Corporation,C=US
Subject:        OU=Class 1 Public Primary Certification Authority,O=VeriSign\, Inc.,C=US
полный текст команды
upgradeOpss(jpsConfig='/opt/oracle/middleware/user_projects/domains/demo_domain/config/fmwconfig/jps-config.xml',jaznData='/opt/oracle/middleware/oracle_common/modules/oracle.jps_11.1.1/domain_config/system-jazn-data.xml',jdbcDriver="oracle.jdbc.driver.OracleDriver",url="jdbc:oracle:thin:@oraclehost:1521:orcldb",user="DEV_OPSS", password="Welcome")
Команда завершается успешно, но в файле jps-config.xml не верно указан ключ к аутентификационным данным для БД (BOOTSTRAP_JPS). Если исправить их на верные (взятые из вывода orapki, сервер стартует успешно.
<propertySet name="props.db.1">
            <property name="oracle.security.jps.farm.name" value="cn=ecmdev_domain"/>
            <property name="server.type" value="DB_ORACLE"/>
            <property name="oracle.security.jps.ldap.root.name" value="cn=SecurityStore"/>
            <property name="datasource.jndi.name" value="jdbc/OPSS_DS"/>
            <property name="jdbc.url" value="
jdbc:oracle:thin:@oraclehost:1521:orcldb"/>
            <property name="bootstrap.security.principal.key"value="bootstrap_E9Tyfa0er5oeWvpyyKmddffasaA="/>
            <property name="oracle.security.jps.db.useDSAdminMapKey" value="true"/>
            <property name="bootstrap.security.principal.map" value="BOOTSTRAP_JPS"/>
            <property name="jdbc.driver" value="oracle.jdbc.driver.OracleDriver"/>
</propertySet>


пятница, 12 июля 2013 г.

Настройка join-адаптера для ActiveDirectory и Database

Этот пост описывает настройку join -адаптера, который будет использоваться для аутентификации пользователя и смены его пароля средствами OracleAccess Manager 11gR2
Оглавление:
Установка Access Manager 11gR2.
Установка  Oracle Virtual Directory
Настройка Virtual Directory
Настройка Active Directory 
Настройка Access Manager



В качестве LDAP каталога для хранения учётных записей пользователей в текущей задаче используется ActiveDirectory. Использование возможности смены пароля пользователя средствами OAM подразумевает расширение схемы LDAP-каталога. В этом примере не подразумевается модификация каталога AD. Для хранения дополнительных атрибутов пользователей в этом примере используется база данных.

1. Импорт схемы 

Для дальнейшей настройки необходимо расширить стандартную схему OVD, добавив туда необходимые атрибуты и классы. В дистрибутив OAM 11gR2 входит комплект ldif- файлов, позволяющий расширить распространённые LDAP-каталоги. Они находятся здесь:
 $MIDDLEWARE_HOME/Oracle_IDM1/oam/server/pswdservice/ldif
Импорт схемы
ldapadd -D "cn=orcladmin" -w Welcome1 -h $HOSTNAME -p 6501 -x -f $MW_HOME/Oracle_IDM1/oam/server/pswdservice/ldif/OVD_PWDPersonSchema.ldif

 2. Настройка адаптера к Active Directory.

Создание адаптера.


Тип адаптера
Настройки адаптера. В этом примере используется пользователь Administrator.
  Список плагинов. Плагин ActiveDirectory Password обязателен.

3. Создание адаптера к БД.


 Для хранения этих атрибутов в текущей задаче необходимо добавить в БД таблицу и замапить её поля в соответствующем БД-адаптере.
  CREATE TABLE "OVD_OB_PASSWORD"
   ("OBPASSWORDCREATIONDATE" VARCHAR2(100 BYTE),
    "OBPASSWORDHISTORY" VARCHAR2(100 BYTE),
    "OBPASSWORDCHANGEFLAG" VARCHAR2(100 BYTE),
    "OBPASSWORDEXPIRYDATE" VARCHAR2(100 BYTE),
    "OBLOCKOUTTIME" VARCHAR2(100 BYTE),
    "OBLOGINTRYCOUNT" NUMBER,
    "OBLASTSUCCESSFULLOGINTIME" VARCHAR2(100 BYTE),
    "OBLASTFAILEDLOGINTIME" VARCHAR2(100 BYTE),
    "CN" VARCHAR2(100 BYTE),
    "OBUSERACCOUNTCONTROL" VARCHAR2(100 BYTE),
    "OBANSWEREDCHALLENGES" VARCHAR2(100 BYTE),
    "OBYETTOBEANSWEREDCHALLENGE" VARCHAR2(100 BYTE),
    "OBFIRSTLOGIN" VARCHAR2(100 BYTE),
    "OBLASTLOGINATTEMPTDATE" VARCHAR2(100 BYTE),
    "OBLASTRESPONSEATTEMPTDATE" VARCHAR2(100 BYTE),
    "OBPASSWORDEXPMAIL" VARCHAR2(100 BYTE),
    "OBRESPONSETIMEOUT" VARCHAR2(100 BYTE),
    "OBRESPONSETRIES" VARCHAR2(100 BYTE)
   )
Создание адаптера
На следующем шаге после ввода данных для соединения с БД необходимо выбрать только что созданную таблицу и замапить её поля на LDAP атрибуты. В документации есть некоторые ошибки. При мапинге лучше пользоваться предлагаемыми подсказками, а не копировать их со станицы документации.
oblastloginattemptdate
oblockouttime
oblastresponseattemptdate
obLoginTryCount
obresponsetries
obAnsweredChallenges
obpasswordexpirydate
obpasswordexpmail
obLastSuccessfulLoginTime
obresponsetimeout
obPasswordCreationDate
obYetToBeAnsweredChallenge
obPasswordChangeFlag
obPasswordHistory
obuseraccountcontrol
oblastsuccessfullogin
oblastfailedlogin
obfirstlogin
obpasswordcreationdate
obLockoutTime
obLastFailedLoginTime

В обоих адаптерах необходимо настроить роутинг. В адаптере Active Directory надо запретить хранение ob-атрибутов. И явно разрешить хранение атрибута unicodePWD.



В адаптере БД хранение ob-атрибутов надо разрешить и запретить хранение unicodePWD.


Если этого не сделать, согин и смена пароля пользователя будут завершаться с ошибкой

[2013-08-20T14:34:32.815+04:00] [oam_server1] [ERROR] [OAMSSA-20084] [oracle.oam.user.identity.provider] [tid: [ACTIVE].ExecuteThread: '1' for queue: 'weblogic.kernel.Default (self-tuning)'] [userId: ] [ecid: 004t5uQ0IOMFS8G6yzJb6G0007G70000bV,0:2] [APP: oam_server#11.1.2.0.0] [URI: /oam/server/auth_cred_submit] User password change failed for user: LALALA, idstore OVD with exception : oracle.security.idm.OperationFailureException: javax.naming.NamingException: [LDAP: error code 80 - [[
modifycn=lalalal,dc=ruDBLDAP Error 16 : LDAP Error 16 : Attribute unicodePwd is not present in the entry.[unicodePwd]]; remaining name 'cn=lalala,dc=ru'

4. Создание join-адаптера.

 Использование join-адаптера позволяет объединить в одной возвращаемой пользователю записи атрибуты из LDAP-каталога и атрибуты из таблицы БД.
Тип адаптера.

Настройки Join-адаптера. Primary и Bind адаптеры необходимо выбрать LDAPDemo

Плагины в join-адаптере. Плагин ActiveDirectory Password обязателен.

В примере объединение происходит по столбцу\атрибуту "CN" 
5. Настройка разрешений.
Необходимо создать новую Access controll point на закладке Security. В этом примере область её действия вся ветка Users в LDAP-каталоге. В качестве  DN необходимо ввести имя в Join-адаптере.
В этом примере грант выдан на все действия

 Можно дополнительно ограничить пользователей, на которых распространяется действие записи.
 После этих настроек в таблицу БД можно добавить запись какого-нибудь пользователя из ActiveDirectory и увидеть его атрибуты через join адаптер. Заполнять все БД атрибуты не обязательно. Необходим только тот, по которому происходит объединение.


Исследованием этого вопроса я занимался совместно с коллегой, Петром Дегтярёвым.









вторник, 7 мая 2013 г.

ObSSOCookie Parser

Маленький класс, который показывает содержимое ObSSOCookie.
На вход подаётся шифрованная кука. 

Prereq: Oracle Access Manager Access SDK (11.1.1.7.0)
SDK Java API Reference: http://docs.oracle.com/cd/E23943_01/apirefs.1111/e22472/toc.htm

Для компиляции и запуска необходимо добавить в  переменную CLASSPATH путь к архиву oamasdk-api.jar.
export CLASSPATH=/opt/oracle/middleware/webgate/access/oamasdk-api.jar:.





среда, 24 апреля 2013 г.

WebGate 10g Installation


Дистрибутив
http://www.oracle.com/technetwork/middleware/ias/downloads/101401-099957.html

После распаковки получаем 3 исполняемых файла для различных конфигураций.

Запуск установки
Oracle_Access_Manager10_1_4_3_0_CR1_linux64_APACHE22_WebGate -gui

Лог установка пишет в файл
/tmp/WebGate.log

Инсталятор спросит про пользователя и группу, под которыми планируется запускать web-сервер. В поём случае это apache.



понедельник, 16 апреля 2012 г.

Deploying JVMD Agents

В состав продукта Enterprise manager 12c входит средство мониторинга JVM и web-приложений.
Называются они соответственно JVM Diagnostics и Application Dependency and Performance. Как и в 11 Enterprise Manager  эти средства реализованы в виде отдельный weblogic-серверов на которых выполняются ADP Manager и JVM Manager. Если верить документации от Oracle  - настройка проста и не должна вызывать проблем.

Когда проблемы всё-таки возникнут, придётся почитать расширенную версию документации.
В ней можно разжиться рекомендуемыми начальными размерами heap и permanent областей памяти
USER_MEM_ARGS="-Xms256m -Xmx1024m -XX:MaxPermSize=768m"


Основная проблема возникнет на шаге
Deploying JVMD Agents.
Чтобы начать процедуру деплоя агентов необходимо пройти по ссылке:

Ввести Credetials для целевого сервера и для EM 12с.

Job завершится с ошибкой, так как инсталлятор не найдёт нужных jar-архивов. Архивы можно собрать самому с помощью утилиты
wljarbuilder.jar
cd $WEBLOGIC_HOME/server/lib
$JAVA-HOME/bin/java -jar $WEBLOGIC_HOME/server/lib/wljarbuilder.jar
После того, как она отработает, документация предлагает скопировать 4 архива в папку $AGENT_HOME/sysman/jlib.
Copy the following files from <WEBLOGIC_HOME>/server/lib/ to <AGENT_HOME>/sysman/jlib directory:
Это ошибка. Инсталятор там эти пакеты не находит. Нужная папка -
$AGENT_HOME/jlib
cp $WEBLOGIC_HOME/server/lib/wlfullclient.jar $AGENT_HOME/jlib/
cp $WEBLOGIC_HOME/server/lib/cryptoj.jar $AGENT_HOME/jlib/
cp $WEBLOGIC_HOME/server/lib/wlcipher.jar $AGENT_HOME/jlib/
cp $WEBLOGIC_HOME/server/lib/webserviceclient+ssl.jar $AGENT_HOME/jlib/

В недрах металинка можно откопать ноту, в которой рекомендуется добавить ключ
-Djava.security.egd=file:/dev/./urandom 
к остальным переменным плагина агента, чтобы исправить известный баг JVM.
Баг лучше исправлять по старинке, изменив строку в файле java.security
$JAVA_NOME/jre/lib/security/java.security. Это исправит проблему для всех JVM, запускаемых из данного $JAVA_HOME
securerandom.source=file:/dev/urandom
заменить на
securerandom.source=file:/dev/./urandom






воскресенье, 27 ноября 2011 г.

Восстановление пароля weblogic


Для безопасного хранения паролей в Weblogic server  предусмотрено их шифрование с помощью алгоритмов 3DES  или AES. Шифрованные пароли и логины хранятся в конфигурационных файлах домена (config.xml), конфигурационных файлах источников данных ($DOMAIN_HOME/config/jdbc/Datasource_name.xml ), в файле для запуска серверов без ввода пароля (boot.properties) и т.д. Ключ хранится в файле SerializedSystemIni.dat

Зашифрованные этими ключом данные при наличии доступа к ключу шифрования могут быть расшифрованы.

под катом - маленький класс, позволяющий это сделать.
На вход утилите требуются путь к домену и зашифрованный пароль. На выходе - дешифрованный пароль.
перед запуском необходимо добавить в переменную CLASSPATH директорию, где находится скомпилированный класс и путь к файлу  weblogic.jar

например, вот так:




понедельник, 14 ноября 2011 г.

установка APEX на хост c EM Grid Control 11 Upd 29.11



Установка APEX на хост с EM Grid Control 11g.

Я буду использовать конфигурацию APEX + Oracle HTTP server: Scenario 3

Для этого требуется установить и сконфигурировать 2 инстанса:
1. Oracle DB с компонентом APEX.
2. Oracle HTTP server. (Компонент Oracle Web Tier). 

Установка компонента БД

1. Download дистрибутив с OTN.
2. Копирование в Oracle_home
cp apex_4.1_en.zip $ORACLE_HOME/
3. Распаковка 
unzip apex_4.1_en.zip
cd $ORACLE_HOME/apex
5. Установка
sqlplus / as sysdba
@apexins SYSAUX SYSAUX TEMP /i/
7.Установка пароля администратора
sqlplus / as sysdba
@apxchpwd
8. Включение аккаунта APEX_PUBLIC_USER
sqlplus / as sysdba
ALTER USER APEX_PUBLIC_USER ACCOUNT UNLOCK
ALTER USER APEX_PUBLIC_USER IDENTIFIED BY PASSWORD
Настройка ORACLE_HTTP_SERVER

В этом примере я использую компонент Web Tier, установленный вместе с Oracle Enterprise Manager Grid Control 11g. Инстанс Oracle HTTP Server уже сконфигурирован в директории /opt/oracle/gc_inst/WebTierIH1 и для его работы с APEX необходимо немного изменить конфигурацию.

Для проверки его состояния инстанса можно использовать команды opmnctl
$ export ORACLE_INSTANCE=/opt/oracle/gc_inst/WebTierIH1
$ /opt/oracle/middleware/oms11g/opmn/bin/opmnctl status
В моём случае вывод команды выглядит так:
Processes in Instance: instance1
------------------------+---------------+--------+---------
ias-component              | process-type    |     pid   | status
------------------------+---------------+--------+---------
ohs1                             | OHS                |    1343 | Alive

 Для старта/остановки сервера можно пользоваться командами
$ /opt/oracle/middleware/oms11g/opmn/bin/opmnctl startproc ias-component=ohs1
$ /opt/oracle/middleware/oms11g/opmn/bin/opmnctl stopproc ias-component=ohs1 

1.  В конфигурации APEX + Oracle HTTP Server  изображения для web-страниц не хранятся в базе данных. Страницы с изображениями пользователю отправляет Apache-сервер, поэтому их нужно скопировать из дистрибутива в то место, где Apache сможет их увидеть. Например в
/opt/oracle/gc_inst/WebTierIH1/config/OHS/ohs1/htdocs
cp -r $ORACLE_HOME/apex/images /opt/oracle/gc_inst/WebTierIH1/config/OHS/ohs1/htdocs/
2. Конфигурирование mod_pl
Конфигурационный файл mod_pl располагается в директории 
/opt/oracle/gc_inst/WebTierIH1/config/OHS/ohs1/mod_plsql/dads.conf
Он по умолчанию включён в конфигурацию сервера.

Добавляем туда конфиг:
Alias /i/ "/opt/oracle/gc_inst/WebTierIH1/config/OHS/ohs1/images/"
<Location /pls/apex>
      Order                                     deny,allow
      PlsqlDocumentPath                 docs
      AllowOverride                        None
      PlsqlDocumentProcedure        wwv_flow_file_mgr.process_download
      PlsqlDatabaseConnectString   localhost:1521:orcl
      PlsqlNLSLanguage                 AMERICAN_AMERICA.AL32UTF8
      PlsqlAuthenticationMode        Basic
      SetHandler                             pls_handler
      PlsqlDocumentTablename       wwv_flow_file_objects$
      PlsqlDatabaseUsername         APEX_PUBLIC_USER
      PlsqlDefaultPage                     apex
      PlsqlDatabasePassword          PASSWORD
      PlsqlRequestValidationFunction wwv_flow_epg_include_modules.authorize
      Allow from all
</Location>

Пояснения к конфигурации
/opt/oracle/gc_inst/WebTierIH1/config/OHS/ohs1/images/ - Директория где хранятся рисунки. На конце должен быть слэш.
PlsqlDatabaseConnectString - строка соединения с БД. Она может быть задана в различных форматах. Не все из них одинаково хорошо работают.
PlsqlNLSLanguage - Языковые настройки БД.
PlsqlDatabasePassword - пароль, заданный APEX_PUBLIC_USER на этапе установки APEX.

3. Рестарт HTTP Server-а
$ export ORACLE_INSTANCE=/opt/oracle/gc_inst/WebTierIH1
$ /opt/oracle/middleware/oms11g/opmn/bin/opmnctl stopproc ias-component=ohs1
$ /opt/oracle/middleware/oms11g/opmn/bin/opmnctl startproc ias-component=ohs1 
 4. Можно попытаться получить страницу входа в приложение:
http://Host:Port/pls/apex/apex_admin
Здесь хост - имя хоста
Port  - порт, на котором слушает Apache. Его можно посмотреть в файле 
$ORACLE_INSTANCE/config/OHS/ohs1/httpd.conf
параметр 
Listen
У меня это файл /opt/oracle/gc_inst/WebTierIH1/config/OHS/ohs1/httpd.conf и порт 7788 соответственно.

Troubleshuting

Причину большинства ошибок можно понять, почитав вывод файла
$ORACLE_INSTANCE/diagnostics/logs/OHS/ohs1/ohs1.log
У меня их было две.
1. После попытки получить страницу http://Host:Port/pls/apex/apex_admin в логе появилось сообщение об ошибке:

[2011-11-11T15:25:49.1473+04:00] [OHS] [INCIDENT_ERROR:32] [OHS-9999] [core.c] [host_id: OEM.host.ru] [host_addr: 10.0.0.10] [tid: 1126410560] [user: orcl] [ecid: 004gNF8ScXFFS8G6yzjc6G0007nx00000t] [rid: 0] [VirtualHost: OEM.host.ru:0]  File does not exist: /opt/oracle/gc_inst/WebTierIH1/config/OHS/ohs1/htdocs/favicon.ico

Apache не смог найти иконку сайта. Просто копируем туда любую.
cp /opt/oracle/gc_inst/WebTierIH1/config/OHS/ohs1/htdocs/images/favicon.ico /opt/oracle/gc_inst/WebTierIH1/config/OHS/ohs1/htdocs/favicon.ico

2. При следующем запросе я получил ещё одну ошибку.

[2011-11-11T15:25:51.2482+04:00] [OHS] [INCIDENT_ERROR:32] [OHS-9999] [mod_context.c] [OEM.host.ru] [host_addr: 10.0.0.10] [tid: 1126410560] [user: orcl] [ecid: 004gNF8^b5_FS8G6yzjc6G0007nx000019] [rid: 0] [VirtualHost: OEM.host.ru:0]  MODPLSQL-00054: mod_plsql: HTTP-503 ORA-12154 ORA-12154: TNS:could not resolve the connect identifier

Проблема оказалась в строке подключения
в формате TNSFormat.
Заработало в таком виде:

PlsqlDatabaseConnectString localhost:1521:orcl


Ссылки:
APEX на otn.oracle.com.











понедельник, 31 октября 2011 г.

TZ-Update Для Weblogic Portal 10.3

В результате отмены перехода на зимнее время потребоалось ручное вмешательство в скрипты запуска Weblogic-серверов портала. Стартующий сервер не использует локатьные настройки времени на машине и стартует с учётом timezone в JVM (у меня версия 1.6.25). Локальная pointbase  с учётными записями также читает настройки из timezone в JVM.
Решение проблемы:
1. Patch для JVM
2. Ручная установка смещения GMT+4  в параметры запуска JVM
    ключ -Duser.timezone=
    смещению на 4 часа соответствует зона NET
       для серверов можно отредактировать $DOMAIN_HOME/$DOMAIN_NAME/bin/setDomainEnv.sh
JAVA_PROPERTIES="${JAVA_PROPERTIES} -Duser.timezone=NET ${EXTRA_JAVA_PROPERTIES}"

для Pointbase в конце файла
/opt/oracle/middleware/wlserver_10.3/common/bin/startPointBase.sh
нужно отредактировать запись
"${JAVA_HOME}/bin/java" -Duser.timezone=NET  com.pointbase.net.netServer ${CONSOLE} ${SERVERWINDOW} ${LOGFILE} /port:${PORT} /d:${DEBUG} /pointbase.ini="${POINTBASE_INI}"

среда, 12 октября 2011 г.

Запуск VirtualBox на OEL 6 с новым uek-ядром


На новом ядре от Oracle не компилируются модули VirtualBox
rpm -qa | grep kernel
kernel-uek-headers-2.6.32-100.34.1.el6uek.x86_64
kernel-uek-devel-2.6.32-100.34.1.el6uek.x86_64
kernel-uek-firmware-2.6.32-100.34.1.el6uek.noarch
kernel-uek-2.6.32-100.34.1.el6uek.x86_64
Решение - выстаить пременную MAKE c ключём -i
export MAKE='/usr/bin/gmake -i'
./VBoxLinuxAdditions.run
Источник: 

вторник, 27 сентября 2011 г.

Demo-хранилища сертификатов

Для работы с SSL-сертификатами в Weblogic server используются хранилища сертификатов (javakeystore). При установке создаются Demo-хранилища, позволяющие начать использовать SSL соединения с сервером.

DemoTrust.jks - хранилище сертификатов коневых удостоверяющих центров.
DemoIdentity.jks - хранилище дляпользовательских сертификатов и цепочек сертификации.
По умолчанию, оба хранилища имеют пароль.

ХранилищеПутьPassword
Trust store location%ORACLE_HOME%/weblogic/wlserver_10.3/ server/lib/DemoTrust.jksDemoTrustKeyStorePassPhrase
Key store location%ORACLE_HOME%/weblogic/wlserver_10.3/ server/lib/DemoIdentity.jksDemoIdentityPassPhrase