WebLogic boot.properties 설정: 시작할 때 비밀번호 입력 없애기

WebLogic boot.properties 대표 이미지: 서버와 열쇠

운영(Production) 모드 WebLogic 도메인에서 startWebLogic.sh로 서버를 시작하면 매번 관리자 사용자명과 비밀번호를 물어봅니다. 저는 WebLogic 12.2.1.4 기반 OID 도메인에서 AdminServer와 Managed Server를 Node Manager 없이 시작 스크립트(startWebLogic.sh, startManagedWebLogic.sh)로 띄워 운영했는데, 서버를 백그라운드로 띄우거나 재부팅 후 다시 올릴 때마다 이 프롬프트가 걸림돌이었습니다. 이 입력을 대신하는 파일이 boot.properties(Oracle 문서의 명칭은 boot identity file)입니다.

이 글은 2024년 10월 Notion에 정리했던 두 글을 합친 것입니다. 2026년 10월에 Oracle 공식 문서 「Starting and Stopping Servers」의 12.2.1.4판과 14.1.2판을 하나씩 대조해 고쳤고, 이 글에 적은 동작은 두 버전 문서에서 같습니다. 원본의 Python 스크립트는 비밀번호를 코드에 평문으로 넣는 구조여서 실행할 때 입력받는 셸 스크립트로 바꿨습니다.

파일 위치와 형식

서버는 시작할 때 자기 루트 디렉터리 아래 security 디렉터리의 boot.properties를 기본으로 읽습니다. 파일은 서버마다 다르게 둘 수 있습니다.

<DOMAIN_HOME>/servers/<SERVER_NAME>/security/boot.properties

# 예: OID 도메인의 AdminServer와 OID용 Managed Server
/u01/oracle/config/domains/oid_domain/servers/AdminServer/security/boot.properties
/u01/oracle/config/domains/oid_domain/servers/wls_ods1/security/boot.properties

내용은 두 줄입니다.

username=weblogic
password=<관리자_비밀번호>
  • 기본 보안 영역(default security realm)의 인증 공급자에 실제로 있는 계정의 사용자명과 비밀번호를 입력합니다. 이 계정은 서버를 시작·중지할 권한이 있는 역할에 속해야 합니다.
  • 값은 실제 계정 그대로 입력합니다. 원본 글에 있던 “사용자명과 비밀번호를 소문자로 입력해야 한다”는 설명은 공식 문서에 근거가 없어 뺐습니다.
  • 서버가 이 파일로 처음 시작할 때 파일을 읽은 뒤, 사용자명과 비밀번호를 암호화한 내용으로 파일을 덮어씁니다.

만들기 전에 확인할 것

  • AdminServer를 한 번은 직접 시작해야 합니다. 첫 시작 때 boot identity file을 쓰는 데 필요한 보안 파일이 만들어지므로, 그 전에는 프롬프트에 사용자명과 비밀번호를 직접 입력해 한 번 시작합니다.
  • 개발 모드 도메인은 구성 마법사가 AdminServer용 파일을 암호화된 상태로 이미 만들어 둡니다. 운영 모드 도메인은 직접 만들어야 합니다.
  • 14.1.2부터는 도메인 모드로 운영 모드를 고르면 더 엄격한 보안 운영 모드(Secured Production Mode)의 기본값이 자동으로 켜집니다. Oracle 보안 문서(Securing a Production Environment 14.1.2)에 따르면 이 모드에서도 boot.properties 동작은 운영 모드와 같습니다. 자동으로 만들어지지 않으며, 필요하면 직접 만들면 됩니다.
  • Node Manager로 시작하는 Managed Server는 만들 필요가 없습니다. 아래 “Node Manager로 시작하는 경우”를 보세요.

만들기: 수동

DOMAIN_HOME=/u01/oracle/config/domains/oid_domain
SERVER_NAME=AdminServer
mkdir -p "$DOMAIN_HOME/servers/$SERVER_NAME/security"
vi "$DOMAIN_HOME/servers/$SERVER_NAME/security/boot.properties"
chmod 600 "$DOMAIN_HOME/servers/$SERVER_NAME/security/boot.properties"

WebLogic을 실행하는 OS 계정으로 작업합니다. 서버가 시작하면서 파일을 암호화된 내용으로 덮어쓰므로, 실행 계정이 이 파일을 쓸 수 있어야 합니다.

만들기: 스크립트

시작 스크립트로 띄우는 서버가 여러 대이면 아래 스크립트로 같은 절차를 반복할 수 있습니다. 비밀번호는 스크립트에 적지 않고 실행할 때 입력받으며, 이미 파일이 있으면 덮어쓰지 않습니다.

#!/bin/bash
# 사용법: ./create_boot_properties.sh <DOMAIN_HOME> <SERVER_NAME> [USERNAME]
set -euo pipefail
DOMAIN_HOME=${1:?DOMAIN_HOME 필요}
SERVER_NAME=${2:?SERVER_NAME 필요}
USERNAME=${3:-weblogic}
BOOT_DIR="$DOMAIN_HOME/servers/$SERVER_NAME/security"
BOOT_FILE="$BOOT_DIR/boot.properties"

[ -f "$DOMAIN_HOME/config/config.xml" ] || { echo "도메인 디렉터리가 아닙니다: $DOMAIN_HOME"; exit 1; }
[ -e "$BOOT_FILE" ] && { echo "이미 있음: $BOOT_FILE"; exit 0; }

read -rsp "$USERNAME 비밀번호: " PASSWORD; echo
umask 077
mkdir -p "$BOOT_DIR"
printf 'username=%s\npassword=%s\n' "$USERNAME" "$PASSWORD" > "$BOOT_FILE"
unset PASSWORD
echo "생성: $BOOT_FILE (서버를 한 번 시작하면 암호화됩니다)"

umask 077로 파일이 처음부터 소유자만 읽고 쓸 수 있게(600) 만들어집니다. 원본 글처럼 Python이 셸 스크립트를 만들어 다시 실행하는 구조는 필요하지 않아 뺐습니다.

암호화됐는지 확인

서버를 한 번 시작한 뒤 파일을 열어 봅니다. 입력했던 평문 대신 암호화된 문자열로 바뀌어 있으면 정상입니다. 평문이 그대로 남아 있다면 서버가 이 파일을 읽지 않았거나(경로·파일명 확인) 실행 계정에 쓰기 권한이 없는 것입니다. 파일을 읽지 못한 서버는 시작할 때 사용자명과 비밀번호 프롬프트를 띄우고 로그에 메시지를 남깁니다.

서버 간 복사 금지

Oracle은 한 서버가 만든(암호화한) 파일을 다른 서버의 루트 디렉터리로 복사하는 것을 지원하지 않습니다. 서버가 여러 대이면 서버마다 평문으로 만들고 각자 한 번 시작해 암호화되게 합니다. 예외로, Managed Server가 AdminServer와 같은 루트 디렉터리를 쓰면 AdminServer의 파일을 같이 쓸 수 있습니다.

Node Manager로 시작하는 경우

Managed Server를 Node Manager로 시작하면 직접 만들 필요가 없습니다. Node Manager가 서버를 시작할 때 쓴 자격 증명을 암호화해 <DOMAIN_HOME>/servers/<SERVER_NAME>/data/nodemanager/boot.properties에 저장하고, 자동 재시작에 사용합니다. security/boot.properties는 시작 스크립트나 java weblogic.Server로 띄울 때 쓰는 파일입니다.

다른 위치의 파일 쓰기

기본 위치가 아닌 파일을 쓰려면 시작 명령에 경로를 지정합니다. 값은 파일의 전체 경로입니다.

-Dweblogic.system.BootIdentityFile=/secure/path/boot.AdminServer

Oracle 문서는 이 옵션을 JAVA_OPTIONS에 넣는 예를 듭니다. 다만 도메인의 setDomainEnv 같은 생성 스크립트는 도메인 업그레이드 때 덮어써지므로 직접 고치지 말고, <DOMAIN_HOME>/bin/setUserOverrides.sh(또는 제품 기본값보다 뒤에 적용되는 setUserOverridesLate.sh)에 넣는 것이 권장 방식입니다. Node Manager로 시작하는 서버는 setUserOverrides를 읽지 않으니, 그 경우에는 관리 콘솔의 서버 시작(Server Start) 인수로 지정해야 합니다.

# <DOMAIN_HOME>/bin/setUserOverrides.sh
JAVA_OPTIONS="${JAVA_OPTIONS} -Dweblogic.system.BootIdentityFile=/secure/path/boot.AdminServer"
export JAVA_OPTIONS

비밀번호를 바꾼 뒤 시작이 안 될 때

weblogic 계정의 비밀번호를 바꿔도 boot.properties는 자동으로 갱신되지 않습니다. 비밀번호 변경 후 서버 로그에 BEA-090402 “Authentication denied: Boot identity not valid” 오류가 나오면 파일에 예전 비밀번호가 남아 있는 것입니다.

  1. 해당 서버의 security/boot.properties를 새 비밀번호로 평문 작성합니다. 다음 시작 때 다시 암호화됩니다. 위 스크립트는 파일이 있으면 멈추므로, 스크립트를 쓰려면 기존 파일을 먼저 옮겨 둡니다.
  2. Node Manager로 시작하는 서버도 같은 오류가 날 수 있습니다. 이 경우 data/nodemanager/boot.properties에 예전 자격 증명이 남아 있는지 확인합니다.
  3. 서버를 시작하고 파일이 다시 암호화됐는지 확인합니다.

보안 점검

  • 파일 권한은 600, 소유자는 WebLogic 실행 계정으로 둡니다. 암호화돼 있더라도 도메인 디렉터리 전체의 접근 권한과 백업을 함께 관리합니다.
  • 시작 스크립트에 -Dweblogic.management.password로 비밀번호를 넣는 방식은 쓰지 않습니다. Oracle 문서도 스크립트에 평문 비밀번호가 남는다는 이유로 권장하지 않습니다.
  • 시작 후 파일을 남기고 싶지 않다면 -Dweblogic.system.RemoveBootIdentity=true로 서버가 시작에 쓴 파일을 지우게 할 수 있습니다. 대신 다음 시작 때는 다시 프롬프트가 뜹니다.

정리

AdminServer를 한 번 직접 시작한 뒤, 시작 스크립트로 띄우는 서버마다 security/boot.properties를 평문으로 만들고 다음 시작 때 암호화됐는지 확인하면 됩니다. Node Manager로 띄우는 서버는 Node Manager가 따로 관리합니다. 비밀번호를 바꿨다면 파일도 직접 고쳐야 합니다.

OID 도메인의 WebLogic·JVM 설정은 Oracle Internet Directory(OID) 확장 Part 3: 웹로직/JVM 최적화, weblogic 계정만 로그인이 느린 문제는 AD 로그인은 빠른데 weblogic만 느릴 때에서 다뤘습니다.

위로 스크롤