Решение проблемы с медленной аутентификацией (у нас доходило до 1 минуты) пользователей, использующих WNA.
Окружение:
Несколько доменом Windows.
Master Keytab для всех доменов.
Очень "большая" сеть.
В логах OAM-сервера WLS_OAM1.out:
KrbAsReqBuilder: PREAUTH FAILED/REQ, re-send AS-REQ
default etypes for default_tkt_enctypes: 17 23.
Added key: 23version: 0
Ordering keys wrt default_tkt_enctypes list
default etypes for default_tkt_enctypes: 17 23.
Added key: 23version: 0
Ordering keys wrt default_tkt_enctypes list
default etypes for default_tkt_enctypes: 17 23.
default etypes for default_tkt_enctypes: 17 23.
>>> EType: sun.security.krb5.internal.crypto.ArcFourHmacEType
>>> KrbAsReq creating message
>>> KrbKdcReq send: kdc=uaad1sm.smua.local UDP:88, timeout=30000, number of retries =3, #bytes=236
>>> KDCCommunication: kdc=uaad1sm.smua.local UDP:88, timeout=30000,Attempt =1, #bytes=236
SocketTimeOutException with attempt: 1
>>> KDCCommunication: kdc=uaad1sm.smua.local UDP:88, timeout=30000,Attempt =2, #bytes=236
SocketTimeOutException with attempt: 2
>>> KDCCommunication: kdc=uaad1sm.smua.local UDP:88, timeout=30000,Attempt =3, #bytes=236
SocketTimeOutException with attempt: 3
>>> KrbKdcReq send: error trying uaad1sm.smua.local
java.net.SocketTimeoutException: Receive timed out
at java.net.PlainDatagramSocketImpl.receive0(Native Method)
at java.net.AbstractPlainDatagramSocketImpl.receive(AbstractPlainDatagramSocketImpl.java:146)
at java.net.DatagramSocket.receive(DatagramSocket.java:817)
at sun.security.krb5.internal.UDPClient.receive(NetClient.java:207)
at sun.security.krb5.KdcComm$KdcCommunication.run(KdcComm.java:390)
at sun.security.krb5.KdcComm$KdcCommunication.run(KdcComm.java:343)
at java.security.AccessController.doPrivileged(Native Method)
at sun.security.krb5.KdcComm.send(KdcComm.java:327)
at sun.security.krb5.KdcComm.send(KdcComm.java:219)
at sun.security.krb5.KdcComm.send(KdcComm.java:191)
at sun.security.krb5.KrbAsReqBuilder.send(KrbAsReqBuilder.java:319)
at sun.security.krb5.KrbAsReqBuilder.action(KrbAsReqBuilder.java:364)
at com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:735)
at com.sun.security.auth.module.Krb5LoginModule.login(Krb5LoginModule.java:584)
at sun.reflect.GeneratedMethodAccessor1782.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at javax.security.auth.login.LoginContext.invoke(LoginContext.java:762)
Необходимо добавить в конфиг krb5.conf:
[libdefaults]
udp_preference_limit = 1
Что это такое:
udp_preference_limit
When sending a message to the KDC, the library will try using TCP before UDP if the size of the message is above udp_preference_limit. If the message is smaller thanudp_preference_limit, then UDP will be tried before TCP. Regardless of the size, both protocols will be tried if the first attempt fails.
После этого в логах всё ок:
default etypes for default_tkt_enctypes: 17 23.
>>> KrbAsReq creating message
>>> KrbKdcReq send: kdc=uaad1sm.smua.local TCP:88, timeout=30000, number of retries =3, #bytes=153
>>> KDCCommunication: kdc=uaad1sm.smua.local TCP:88, timeout=30000,Attempt =1, #bytes=153
>>>DEBUG: TCPClient reading 177 bytes
>>> KrbKdcReq send: #bytes read=177
>>>Pre-Authentication Data:
PA-DATA type = 11
PA-ETYPE-INFO etype = 23, salt =
среда, 12 октября 2016 г.
вторник, 19 апреля 2016 г.
Weblogic 12.2.1 WNA
После оновления weblogic с 12.1.3 до 12.2.1 внезапно перестала работать Windows Native Authentication.
Конфигурационные файлы при обновлении не менялись. Манипуляций с кейтабами не проводилось.
Сообщения в логах:
<Debug> <SecurityAtn> <sm-ecm-idm-test1.moscow.sportmaster.ru> <tst_1> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <6d5d0986-0aaa-4118-ace1-d9a310c02383-00000021> <1454403844063> <[severity-value: 128] [rid: 0] [partition-id: 0] [partition-name: DOMAIN] > <BEA-000000> <Failed to create GSSContext for HTTP/sm-ecm-idm-test1.moscow.sportmaster.ru@GKSM.LOCAL
GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos credentails)
at sun.security.jgss.krb5.Krb5AcceptCredential.getInstance(Krb5AcceptCredential.java:87)
Общение с техподдержкой результатов не дало.
На данный момент найден воркэраунд - перегенерить кейтаб.
Для Weblogic 12.1.3 кейтаб генерировался по следующей схеме.
FQDN: someserver.somedomain
UserName: someserver_srv
UserPrincipalName: HTTP/someserver_srv@ADDOMAIN
SPN: someserver.somedomain
То есть имя сервера обычно не совпадает с именем учётки, которая создаётся для кейтаба.
Кейтаб генерируется безявного указания UserPrincipalName.
После генерации кеутаба добавляется spn, соответствующий FQDN.
Кейтаб генерируется безявного указания UserPrincipalName.
После генерации кеутаба добавляется spn, соответствующий FQDN.
Для Weblogic 12.2.1 это схема почему-то не работает. Поддержка комментирует это как "изменения, связанные с новой версией JVM", что есть глупость.
рабочий воркэраунд:
FQDN: someserver.somedomain
UserName: someserver_srv
UserPrincipalName: HTTP/someserver@ADDOMAIN
То есть при генерации кейтаба надо явно указать UserPrincipalName = hostname.
Если этого не сделать, бесполезно потом добавлять правильные SPN. Работать всё равно не будет.
Если этого не сделать, бесполезно потом добавлять правильные SPN. Работать всё равно не будет.
среда, 27 января 2016 г.
Embedded Ldap Error (conn=1 op=0 RESULT err=0 tag=0 nentries=0 etime=0)
После одного из внезапных ребутов сервера возникли проблемы со свтроенным LDAP-каталогом сервера Weblogic.
Обнаружилось по всё замедляющейся работе сервера приложений.
Netstat показал, что к серверу wsm-pm открыто более 37 000 соединений.
Netstat -ntp | grep 8003 | wc -l
34872
В логах самого сервера сообщений об ошибках не наблюдалось, но в LDAP-логи
${DOMAIN_HOME}/servers/${servername}/data/ldap/log со скоростью несколько сотен в секунду добавлялись вот такие записи:
и ${DOMAIN_HOME}/servers/${servername}/data/store
Они отреплицируются с AdminServer-а после того, как ManagedServer будет перезапущен.
Обнаружилось по всё замедляющейся работе сервера приложений.
Netstat показал, что к серверу wsm-pm открыто более 37 000 соединений.
Netstat -ntp | grep 8003 | wc -l
34872
В логах самого сервера сообщений об ошибках не наблюдалось, но в LDAP-логи
${DOMAIN_HOME}/servers/${servername}/data/ldap/log со скоростью несколько сотен в секунду добавлялись вот такие записи:
[20/Jan/2016 11:43:12 MSK] conn=1 op=0 BIND dn="cn=Admin" method=0 version=3Лечится удалением папки ${DOMAIN_HOME}/servers/${servername}/data/ldap
[20/Jan/2016 11:43:12 MSK] conn=1 op=0 RESULT err=0 tag=0 nentries=0 etime=0
и ${DOMAIN_HOME}/servers/${servername}/data/store
Они отреплицируются с AdminServer-а после того, как ManagedServer будет перезапущен.
Unpublished kernel bug 21683388
Сегодня нашёл ноту на металинке с подтверждением важного исправления для многих своих установок. Unpublish kernel bug 21683388.
Баг исправлен в ноябре прошлого года.
Проблема проявлялется в падении ядра при использовании связки
Oracle Linux 6 (kernel 3.8.13-98.6.1) или ниже + HugePages
JVM с ключом -XX:+UseLargePages
В такой конфигурации после нескольких часов работы сервер уходил в ребут с примерно таким сообщением об ошибке:
------------[ cut here ]------------
Jan 19 11:17:33 serverName kernel: WARNING: at lib/list_debug.c:33 __list_add+0xbe/0xd0()
Jan 19 11:17:33 serverName kernel: Hardware name: ProLiant BL460c Gen9
Jan 19 11:17:33 serverName kernel: list_add corruption. prev->next should be next (ffff883f174af828), but was ffff883f209a7e20. (prev=ffff883f218688c0).
Jan 19 11:17:33 serverName kernel: Modules linked in: mptctl mptbase autofs4 cpufreq_ondemand pcc_cpufreq bonding ipv6 scsi_dh_alua sg serio_raw ses enclosure hpilo hpwdt coretemp hwmon freq_table mperf intel_powerclamp kvm ghash_clmulni_intel microcode pcspkr ioatdma dca shpchp ext4 jbd2 mbcache dm_round_robin sd_mod crc_t10dif usb_storage aesni_intel ablk_helper cryptd lrw aes_x86_64 xts gf128mul qla2xxx scsi_transport_fc scsi_tgt crc32c_intel be2net be2iscsi bnx2i cnic uio cxgb4i cxgb4 xhci_hcd cxgb3i libcxgbi cxgb3 mdio libiscsi_tcp qla4xxx wmi iscsi_boot_sysfs libiscsi scsi_transport_iscsi dm_multipath dm_mirror dm_region_hash dm_log dm_mod
Jan 19 11:17:33 serverName kernel: Pid: 2888, comm: java Tainted: G W 3.8.13-68.3.4.el6uek.x86_64 #2
Jan 19 11:17:33 serverName kernel: Call Trace:
Jan 19 11:17:33 serverName kernel: [<ffffffff8105e83f>] warn_slowpath_common+0x7f/0xc0
Jan 19 11:17:33 serverName kernel: [<ffffffff8105e936>] warn_slowpath_fmt+0x46/0x50
Jan 19 11:17:33 serverName kernel: [<ffffffff8129bf7e>] __list_add+0xbe/0xd0
Jan 19 11:17:33 serverName kernel: [<ffffffff81173e8e>] region_chg+0x7e/0x100
Jan 19 11:17:33 serverName kernel: [<ffffffff81173f72>] vma_needs_reservation+0x62/0xb0
Jan 19 11:17:33 serverName kernel: [<ffffffff81174c52>] alloc_huge_page+0x62/0x2c0
Jan 19 11:17:33 serverName kernel: [<ffffffff811308fe>] ? find_get_page+0x1e/0xa0
Jan 19 11:17:33 serverName kernel: [<ffffffff81175390>] hugetlb_no_page+0xa0/0x360
Jan 19 11:17:33 serverName kernel: [<ffffffff81176797>] hugetlb_fault+0x337/0x430
Jan 19 11:17:33 serverName kernel: [<ffffffff8115d9e8>] __handle_mm_fault+0x168/0x1f0
Jan 19 11:17:33 serverName kernel: [<ffffffff81098090>] ? wake_up_state+0x10/0x20
Jan 19 11:17:33 serverName kernel: [<ffffffff8115db22>] handle_mm_fault+0xb2/0x1a0
Jan 19 11:17:33 serverName kernel: [<ffffffff8159ed37>] __do_page_fault+0x217/0x4d0
Jan 19 11:17:33 serverName kernel: [<ffffffff810bf6f0>] ? do_futex+0x100/0x1b0
Jan 19 11:17:33 serverName kernel: [<ffffffff8159968d>] ? __schedule+0x3fd/0x720
Jan 19 11:17:33 serverName kernel: [<ffffffff810bf81b>] ? sys_futex+0x7b/0x180
Jan 19 11:17:33 serverName kernel: [<ffffffff8159effe>] do_page_fault+0xe/0x10
Jan 19 11:17:33 serverName kernel: [<ffffffff8159b498>] page_fault+0x28/0x30
Jan 19 11:17:33 serverName kernel: ---[ end trace 71a6e99ef3a2ba66 ]---
Лечится обновлением ядра.
вторник, 10 ноября 2015 г.
Tomcat. Хранение пароля пользователей в зашифрованном виде.
1. Отредактировать ./webapps/manager/WEB-INF/web.xml
Указать метод аутентификации DIGEST
2. Отредактировать ./conf/server.xml.
<user username="manager-admin" password="7e111111111111111111141d7333df2b0" roles="manager-gui,manager-script,manager-jmx"/>
Указать метод аутентификации DIGEST
<login-config>
<auth-method>DIGEST</auth-method>
<realm-name>Tomcat Manager Application</realm-name>
</login-config>
2. Отредактировать ./conf/server.xml.
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>добавить digest="md5"
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase" digest="md5"/>3. Сгенерировать
digest -a md5 username:myrealm:mypasswordВ случае приложения manager:
digest -a md5 manager-admin:Tomcat\ Manager\ Application:Welcome1
manager-admin:Tomcat Manager Application:7e1111111111111111111141d7333df2b0
4. Отредактировать файл ./conf/tomcat-users.xml |
<user username="manager-admin" password="7e111111111111111111141d7333df2b0" roles="manager-gui,manager-script,manager-jmx"/>
четверг, 13 августа 2015 г.
пятница, 7 августа 2015 г.
Установка SOA Server 12c. TriggerWithRescheduleError NoClassDefFoundError
Один из необходимых шагов после установки SOA Suite 12c - отредактировать файл setDominEnv.sh, добавив в переменную CLASSPATH необходимую библиотеку. Например. вот так:
PRE_CLASSPATH="/opt/oracle/middleware/fmw_12.1.3/soa/soa/modules/oracle.bpm.runtime.classloader-util.jar:${PRE_CLASSPATH}"
export PRE_CLASSPATH
Если этого не сделать. в логах можно наблюдать вот такое сообщение:
<Error> <oracle.bpm.engine> <BEA-000000> <post deploy failed for component TransferToArchive
javax.ejb.EJBException: EJB Exception: : java.lang.NoClassDefFoundError: oracle/bpm/runtime/quartz/trigger/TriggerWithReschedule
вторник, 21 июля 2015 г.
OVD NO-SSL Listener
Oracle рекомендует отказаться от NIO для листенера, не исползующего SSL, в случае, если LDAP-операции занимают необычно долгое время (до 60 сек.)
Как правило, этот листенер слушает на порту 6501.
Конфигурационный файл:
$ORACLE_INSTANCE/config/OVD/ovd1/listener.os_xml
Необходимо добавить тэг <useNIO>false</useNIO> так же, как в SSL листенере
четверг, 4 июня 2015 г.
Oracle Access Manager BasicAuth&WNA
Недвно получили проблему для следующего окружения:
Oracle Access Manager занимается аутентификацией пользователей в некотором домене.
В качестве источника учётных данных пользователей используется AD.
Аутентификация проходит по алгоритму: WNA, если возможно. Если WNA не поддерживается клиентом, используется Basic Auth.
После установки OAM BP3 перестала работать Basic аутентификация.
Оказалось, в readme патча отсутствуют необходмые дополнительные шаги:
1. В файле oam-config.xml заменить DEFAULT на BASIC
2. В том же файле в ноду <Setting Name="credCollectReqRespHandlers" Type="htf:map">
добавить строку
3. В файле config.xml в ноду <security-configuration>'
добавить строку
Oracle Access Manager занимается аутентификацией пользователей в некотором домене.
В качестве источника учётных данных пользователей используется AD.
Аутентификация проходит по алгоритму: WNA, если возможно. Если WNA не поддерживается клиентом, используется Basic Auth.
После установки OAM BP3 перестала работать Basic аутентификация.
Оказалось, в readme патча отсутствуют необходмые дополнительные шаги:
1. В файле oam-config.xml заменить DEFAULT на BASIC
<Setting Name="WNAOptions" Type="htf:map">' <Setting Name="HandleNTLMResponse" Type="xsd:string">DEFAULT</Setting>
2. В том же файле в ноду <Setting Name="credCollectReqRespHandlers" Type="htf:map">
добавить строку
<Setting Name="WNA" Type="xsd:string">oracle.security.am.engines.enginecontroller.plugin.WNAReqRespHandler</Setting>'
3. В файле config.xml в ноду <security-configuration>'
добавить строку
<enforce-valid-basic-auth-credentials>false</enforce-valid-basic-auth-credentials>после элемента <node-manager-password-encrypted>.
воскресенье, 31 мая 2015 г.
OAM11 OAMAuthnCookie perser.
Петя написал инструкцию для просмотра содержимого OAMAuthnCookie.
Ссылка
Кука выводит пользователя и текущий Level (переменная, зависящая от типа аутентификации)
user: cn=UserName,OU=Office,dn=sm,dn=ru
last use: Tue May 26 13:34:11 MSK 2015
getLevel(): 2
getLocation(): 1.1.1.1
Ссылка
Кука выводит пользователя и текущий Level (переменная, зависящая от типа аутентификации)
user: cn=UserName,OU=Office,dn=sm,dn=ru
last use: Tue May 26 13:34:11 MSK 2015
getLevel(): 2
getLocation(): 1.1.1.1
среда, 13 мая 2015 г.
Синхронизация конфигурации адаптеров Oracle Virtual Directory
Для поддержания актуальной конфигурации адаптеров Oracle Virtual Directory можно пользоваться штатным скриптом от Oracle.
Local Store Adapter этим скриптом синхронизировать не получится. Его надо создать на всех инстансах руками.
export ORACLE_HOME=/opt/oracle/ovdmiddleware/Oracle_IDM1
${MW_HOME}/Oracle_IDM1/ovd/bin/syncovdconfig.pl -srcHost ${SRS_HOSTNAME} -srcPort 8899 -dstHost {DST_HOSTNAME} -dstPort 8899 -configFile adapters.os_xml -adapterName "${ADAPTER_NAME}"
Local Store Adapter этим скриптом синхронизировать не получится. Его надо создать на всех инстансах руками.
вторник, 2 декабря 2014 г.
JVM timezone
Класс для проверки JVM timezone:
cat ./TimeTest.java
import java.util.Date;
import java.util.TimeZone;
public class TimeTest {
public static void main(String args[]) {
long time = System.currentTimeMillis();
String millis = Long.toString(time);
Date date = new Date(time);
System.out.println("Current time in milliseconds = " + millis + " => " + date.toString());
System.out.println("Current time zone: " + TimeZone.getDefault().getID());
}
}
cat ./TimeTest.java
import java.util.Date;
import java.util.TimeZone;
public class TimeTest {
public static void main(String args[]) {
long time = System.currentTimeMillis();
String millis = Long.toString(time);
Date date = new Date(time);
System.out.println("Current time in milliseconds = " + millis + " => " + date.toString());
System.out.println("Current time zone: " + TimeZone.getDefault().getID());
}
}
$JAVA_HOME/bin/javac TimeTest.java
$JAVA_HOME/bin/java TimeTest
Current time in milliseconds = 1417528126582 => Tue Dec 02 16:48:46 MSK 2014
Current time zone: Europe/Moscow
четверг, 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 на обоих хостах.1.2 Добавить пользователю oracle возможность запускать утилиты с правами суперпользователя. Для этого на обоих хостах редактируется файл /etc/sudoersexport 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
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 tty1.4 Опционально можно настроить аутентификацию без пароля
not a tty
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Теперь можно обновить arp-таблицу на ближайшем свиче командой
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
sudo arping -q -U -c 5 -I eth0 172.16.1.3
2. Настройка Nodemanager.
К конфигурационный файл nodemanager.properties добавить строкиInterface=eth0В качестве ListenAddress указываются ip адреса хостов. В моём случае это 172.16.1.1 и 172.16.1.2 соответственно.
NetMask=255.255.240.0
UseMACBroadcast=true
ListenAddress=172.16.1.1
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/сек
Скорость записи в файл без использования кэша операционки.
%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.
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%
Добавить список классов, соответствующие пользователю в 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Можно удалить бесполезные service principal name командой
ver,OU=CentralOffice,DC=wcc,DC=local:
HTTP/srv_budwf
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. Его можно найти здесь:
На контроллере необходимо выполнить:
2. Дополнительное редактирование схемы.
Для редактирования схемы можно использовать оснастку windows. По умолчанию она не включена. Чтобы ей воспользоваться, надо зарегистрировать библиотеку командой, выполненной в консоли "as Administrator"
В этом примере я редактирую класс 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 браузер
Оглавление:
Установка 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-а появляются ошибки (полный текст под катом):
Текущие настройки сервера:
1. Credentian Store Provider - база данных
2. Текущее содержимое bootstrap/cwallet.sso
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 - база данных
/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>
Подписаться на:
Сообщения (Atom)