Переход с механизма OPS$ на Oracle SSFS под Linux и Windows

Настройка Oracle SSFS:
SSFS поддерживается с версии ядра 7.20 для SAP 7.x систем для ABAP. Для Java систем SSFS не применим, вместо него придется использовать OPS$.
До SSFS связь между системой SAP (AS ABAP) и инструментов SAP, использующих интерфейс базы данных ABAP (R3trans, R3load и т.д.) с базой данных с помощью SQLNET работал через соединение OPS$ (с OPS пользователем базы данных $<SID>ADM), которое было санкционировано пользователем операционной системы sidadm. При таком подходе был организован доступ к таблице OPS $<SID>ADM.SAPUSER. Таблица содержит зашифрованный пароль для фактического подключения к базе данных SAP (имя схемыпо умолчанию).
В последующих версиях Oracle OPS$ механизм больше не будет поддерживается. С версии SAP Kernel 7.20, SAP введен новый способ безопасного хранения пароля базы данных -механизм Secure Storage in File System (SSFS). Не зашифрованный пароль для пользователя базы данных SAP больше не хранится в самой базе данных, а располагается в файловой системе в шифрованном хранилище. С внедрением ядра 7.20 как downward-compatible ядра, новый метод доступен во всех системах SAP 7.x. По соображениям безопасности рекомендуется использовать новый метод доступа. Для обратной совместимости, обычный метод соединения продолжает поддерживаться до Oracle версии 11.2 для всех систем SAP. Все системы SAP с ядром 7.20, использующие будущие версии Oracle 11g, смогут работать только с новым методом. Подключение к базе данных Oracle с использованием OPS $ механизма содержит уязвимость, которая дает возможность злоумышленнику войти в базу данных в качестве пользователя OPS$ без ввода пароля.
Ниже приведены команды с описанием, выполнив которые вы переведете систему на SSFS. Команды используют переменные окружения, поэтому если команда не срабатывает проверьте наличие нужной переменной в системе. В примере будет использоваться SID SM1.

Linux: 
1. Перейти в пользователя sm1adm

su - sm1adm

2. Рекурсивно создать каталоги

/usr/sap/SM1/SYS/global/security/rsecssfs/data

/usr/sap/SM1/SYS/global/security/rsecssfs/key  

и объявить переменные окружения, добавив их в соответствующей вашей

системе профиль ~/.sapenv.

Добавим строчки в sapenv для создания перманентных переменных окружения:

setenv RSEC_SSFS_DATAPATH /usr/sap/"$SAPSYSTEMNAME"/SYS/global/security/rsecssfs/data

 

setenv RSEC_SSFS_KEYPATH /usr/sap/"$SAPSYSTEMNAME"/SYS/global/security/rsecssfs/key

Создадим каталоги:

mkdir -p $RSEC_SSFS_DATAPATH

mkdir -p $RSEC_SSFS_KEYPATH

3. Сменить права для каталога security на 700

chmod -R 700 /usr/sap/$SAPSYSTEMNAME/SYS/global/security/

4. Создать хранилище и положить в него логин (SAPSR3) и пароль (Pass12345 - заменить на свой )

rsecssfx put DB_CONNECT/DEFAULT_DB_USER $dbs_ora_schema -plain

rsecssfx put DB_CONNECT/DEFAULT_DB_PASSWORD Pass12345

5. Сменить ключ шифрования для хранилища (заменить на свой). Ключ этот фиксированной длинны 48 символов HEX, его проще сгенерировать, чем придумать. Отчет RSECKEYGEN поможет преобразовать придуманный вами 15-значный пароль в ключ шифрования.

rsecssfx changekey F633CEC2B5C58C64250AFBEBD991449D43EAFBF9A3DEF166

6. Сменить права на файлы SSFS_SM1.DAT и SSFS_SM1.KEY на 600

chmod 600 /usr/sap/$SAPSYSTEMNAME/SYS/global/security/rsecssfs/key/SSFS_$SAPSYSTEMNAME.KEY
chmod 600 /usr/sap/$SAPSYSTEMNAME/SYS/global/security/rsecssfs/data/SSFS_$SAPSYSTEMNAME.DAT
Добавить вручную или с помощью команды в профиль DEFAULT.PFL параметр rsdb/ssfs_connect = 1, активизирующий SSFS после перезагрузки системы.

echo 'rsdb/ssfs_connect = 1' >> /usr/sap/$SAPSYSTEMNAME/SYS/profile/DEFAULT.PFL
7. В данном примере используется интерпретатор csh, в профиле переменных
окружения sapenv можно внести нужную нам переменную:nano ~/.sapenv_$HOSTNAME.csh - вписать строку setenv rsdb_ssfs_connect 1
Определить перманентную переменную окружения rsdb_ssfs_connect=1
8. Вывести содержимое хранилища

rsecssfx list

Пример:

|---------------------------------------------------------------------------------------------------------------------------|
| Record Key                                                                           | Status             | Timestamp of last Update  |
|----------------------------------------------------------------------------------------------------------------------------|
| DB_CONNECT/DEFAULT_DB_PASSWORD        | Encrypted          | 2016-04-26  12:11:28  UTC |
| DB_CONNECT/DEFAULT_DB_USER                     | Plaintext          | 2016-04-26  12:11:19  UTC |
|---------------------------------------------------------------------------------------------------------------------------|
Summary
-------
Active Records    : 2 (Encrypted : 1, Plain : 1, Wrong Key : 0, Error : 0)
Datafile Location : /usr/sap/SM1/SYS/global/security/rsecssfs/data/SSFS_SM1.DAT (when existing)
Keyfile Location  : /usr/sap/SM1/SYS/global/security/rsecssfs/key/SSFS_SM1.KEY (when existing)
9. Перезагрузка SAP системы

stopsap;startsap;

10. После перезагрузки можно проверить что система запускается с SSFS. Команда выведет строку: B    ==> connect info for default DB will be read from ssfs

cat /usr/sap/$SAPSYSTEMNAME/DVEBMGS00/work/dev_w0 | grep ssfs

11. Проверить значение параметра remote_os_authent и сбросить его. Перезагрузить базу.
sqlplus / as sysdba
 show parameter remote_os_authent
 alter system reset remote_os_authent scope=spfile;
 shutdown immediate;
 startup;
exit;
 
Настройка BRTOOLS для работы с SSFS:
Для начала убедитесь что ваша версия brtools (dbatools) поддерживает ssfs. Поддержка начинается BR*Tools 7.20 (27).
1. Перейти в пользователя orasm1

su - orasm1

2. Рекурсивно создать каталоги  /oracle/SM1/security/rsecssfs/data
и /
oracle/SM1/security/rsecssfs/key

mkdir -p $SAPDATA_HOME/security/rsecssfs/data
mkdir -p $SAPDATA_HOME/security/rsecssfs/key
3. Создадим пользователя brt$adm с паролем Pass123456 (сменить на свой), дав ему необходимые полномочия. Применить профиль SAPUPROF  чтобы пароль не просрочился.
sqlplus / as sysdba
 create user brt$adm identified by Pass123456;
 grant sapdba to brt$adm;
 alter user BRT$ADM profile SAPUPROF;    
exit;
4. Сменить пароль в хранилище brtools

brconnect -u / -c -f chpass -o 'BRT$ADM' -p Pass123456 -s brtools

5. Проверка подключения
brconnect -u // -c -f check

R3trans -d

6. Для вызова BRTOOLS из командной строки теперь используем

brtools -u // 

7. Для работы джобов из DB13 необходимо поправить таблицу SDBAC (SDBAC_DATA для нового ядра). SE16 > SDBAC > в поле DBSYS вписать ORACLE > выполнить > выделить все записи > изменить. Заменить / на //.

Пример:

-u / -c force -t offline_force -m all @ []C @,[-v ]V -a -c force @ []P
заменить на
-u // -c force -t offline_force -m all @ []C @,[-v ]V -a -c force @ []P

По материалам нот:

Примечание: права доступа и владельцы файлов brtools:

-rwsr-xr--   1 ora<sid>   dbstaff   15852744 Feb  4 13:41 brarchive
-rwsr-xr--   1 ora<sid>   dbstaff   16235320 Feb  4 13:41 brbackup
-rwsr-xr--   1 ora<sid>   dbstaff   20176232 Feb  4 13:41 brconnect
-rwsr-xr--   1 ora<sid>   dbstaff   17120056 Feb  4 13:41 brrecover
-rwxr-xr-x   1 <sid>adm   dbstaff   6627408 Feb  4 13:41 brrestore
-rwsr-xr--   1 ora<sid>   dbstaff   21655416 Feb  4 13:41 brspace
-rwxr-xr-x   1 <sid>adm   dbstaff   7828152 Feb  4 13:41 brtools 

Windows: 
Для начала посмотрите в AL11 как выглядит ваш DIR_GLOBAL, если он сетевой, то вам необходимо подправить команды под ваш путь. В примере путь не сетевой и система установлена на диске D:\
1. Залогиниться под SM1ADM. Создать переменные окружения, если их нет:

setx RSEC_SSFS_DATAPATH D:\usr\sap\%SAPSYSTEMNAME%\SYS\global\security\rsecssfs\data
setx RSEC_SSFS_KEYPATH  D:\usr\sap\%SAPSYSTEMNAME%\SYS\global\security\rsecssfs\key
2. Рекурсивно создать каталоги и проверить переменные окружения:

echo %RSEC_SSFS_DATAPATH%

echo %RSEC_SSFS_KEYPATH%

mkdir -r %RSEC_SSFS_DATAPATH%

mkdir -r %RSEC_SSFS_KEYPATH%

3. Создать хранилище и положить в него логин (SAPSR3) и пароль (Pass12345 - заменить на свой ). Полномочия наследуются от пользователя, поэтому менять их не придется.
rsecssfx put DB_CONNECT/DEFAULT_DB_USER %dbs_ora_schema% -plain
rsecssfx put DB_CONNECT/DEFAULT_DB_PASSWORD Pass12345
4. Сменить ключ шифрования для хранилища (заменить на свой). Ключ этот фиксированной длинны 48 символов HEX, его проще сгенерировать, чем придумать. Отчет RSECKEYGEN поможет преобразовать придуманный вами 15-значный пароль в ключ шифрования.

rsecssfx changekey F633CEC2B5C58C64250AFBEBD991449D43EAFBF9A3DEF166

5. Добавить вручную в профиль DEFAULT.PFL параметр rsdb/ssfs_connect = 1, активизирующий SSFS после перезагрузки системы.
6. Определить перманентную переменную окружения rsdb_ssfs_connect=1

setx rsdb_ssfs_connect 1

Перезапустить SAP систему.

stopsap %SAPSYSTEMNAME% nr=01 SAPDIAHOST=%SAPLOCALHOST%

stopsap %SAPSYSTEMNAME% nr=00 SAPDIAHOST=%SAPLOCALHOST%

startsap %SAPSYSTEMNAME% nr=00 SAPDIAHOST=%SAPLOCALHOST%

startsap %SAPSYSTEMNAME% nr=01 SAPDIAHOST=%SAPLOCALHOST%

 Проверить в dev_w0 что система стартовала с SSFS - найти строчку:
B    ==> connect info for default DB will be read from ssfs

findstr /c:"connect info for default DB will be read from ssfs" d:\usr\sap\%SAPSYSTEMNAME%\DVEBMGS00\work\dev_w0
7. Проверить значение параметра remote_os_authent и сбросить его.
Перезагрузить базу.
sqlplus / as sysdba
 show parameter remote_os_authent
 alter system reset remote_os_authent scope=spfile;
 shutdown immediate;
 startup;
exit;
Настройка BRTOOLS для работы с SSFS:
Для начала убедитесь что ваша версия brtools (dbatools) поддерживает ssfs. Поддержка начинается BR*Tools 7.20 (27).
1. Рекурсивно создать каталоги
D:\oracle\SM1\security\rsecssfs\data и  D:\oracle\SM1\security\rsecssfs\key
mkdir -r %SAPDATA_HOME%\security\rsecssfs\data
mkdir -r %SAPDATA_HOME%\security\rsecssfs\key
2. Создадим пользователя brt$adm с паролем Pass123456 (сменить на свой), дав ему необходимые полномочия.
sqlplus / as sysdba
 create user brt$adm identified by Pass12345;
 grant sapdba to brt$adm;
exit;
3. Сменить пароль в хранилище brtools

brconnect -u / -c -f chpass -o BRT$ADM -p Pass12345 -s brtools

4. Проверка подключения
brconnect -u // -c -f check

R3trans -d

Проверка присвоения ролей

select grantee, granted_role, default_role from dba_role_privs where grantee = 'BRT$ADM';

5. Для вызова BRTOOLS из командной строки теперь используем

brtools -u // 

 6. Для работы джобов из DB13 необходимо поправить таблицу SDBAC (SDBAC_DATA для нового ядра). SE16 > SDBAC > в поле DBSYS вписать ORACLE > выполнить > выделить все записи > изменить. Заменить / на //.Пример:

-u / -c force -t offline_force -m all @ []C @,[-v ]V -a -c force @ []P
заменить на
-u // -c force -t offline_force -m all @ []C @,[-v ]V -a -c force @ []P

 Если возникает ошибка ORA-01031: insufficient privileges при работе brtools, выполните скрипт sapdba_role.sql:

sqlplus / as sysdba

@sapdba_role.sql SR3   (для юзер-схемы SAPSR3 - abap-части системы)

@sapdba_role.sql SR3DB (для юзер-схемы SAPSR3DB - java-части системы)

exit;