English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
리스너도 보안이 있나요? Sure! 기본적으로, 어떤 사용자도 lsnrctl 도구를 통해 Oracle 리스너를操作하거나 종료하지 않고도 접근할 수 있으며, 이는 새로운 세션을 연결할 수 없게 만들 수 있습니다. Oracle 9i 중 Oracle 리스너는 누구나 lsnrctl을 통해 원격에서 리스너를 관리할 수 있도록 허용하며, 데이터베이스가 손상될 수 있는 이유가 될 수도 있습니다.
1. 未设定密码情形下停止监听
[oracle@test ~]$ lsnrctl stop listener_demo92 -->停止监听,可以看出不需要任何密码即可停止 LSNRCTL for Linux: 버전 9.2.0.8.0 - 생산 중 26-JUN-2011 08:22:26 Copyright (c) 1991, 2006, Oracle Corporation. 모든 권리 보호됨 연결 중 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=test)(PORT=1521))) 명령이 성공적으로 완료되었습니다
2. 重新启动监听并设置密码
[oracle@test ~]$ lsnrctl LSNRCTL for Linux: 버전 9.2.0.8.0 - 생산 중 26-JUN-2011 08:24:09 Copyright (c) 1991, 2006, Oracle Corporation. 모든 권리 보호됨 Welcome to LSNRCTL, type "help" for information. LSNRCTL> set current_listener listener_demo92 -->设置当前监听器 현재 리스너는 listener_demo입니다92 LSNRCTL> start -->启动过程也不需要任何密码,启动的详细信息省略 LSNRCTL> change_password -->使用change_password来设置密码 오래된 비밀번호: 새 비밀번호: 새 비밀번호를 다시 입력하세요: 연결 중 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=test)(PORT=1521))) Password changed for listener_demo92 명령이 성공적으로 완료되었습니다 LSNRCTL> save_config -->注意此处的save_config失败 연결 중 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=test)(PORT=1521))) TNS-01169: 리스너는 비밀번호를 인식하지 못했습니다 LSNRCTL> 비밀번호 설정 -->输入新设定的密码验证 Password: 명령이 성공적으로 완료되었습니다 LSNRCTL> save_config -->再次save_config成功 연결 중 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=test)(PORT=1521))) Saved listener_demo92 configuration parameters. Listener Parameter File /oracle/92/network/admin/listener.ora Old Parameter File /oracle/92/network/admin/listener.bak 명령이 성공적으로 완료되었습니다 -->增加密码之后可以看到listener.ora文件中有一条新增的记录,即密码选项(注:尽管使用了密码管理方式,仍然可以无需密码启动监听) [oracle@test admin]$ more listener.ora #----ADDED BY TNSLSNR 26-JUN-2011 05:12:48--- PASSWORDS_listener_demo92 = #--------------------------------------------
3. 비밀번호 사용 없이 리스너를 중지하려고 시도합니다
[oracle@test ~]$ lsnrctl stop listener_demo92 LSNRCTL for Linux: 버전 9.2.0.8.0 - 생산 중 26-JUN-2011 06:09:51 Copyright (c) 1991, 2006, Oracle Corporation. 모든 권리 보호됨 연결 중 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=test)(PORT=1521))) TNS-01169: 리스너는 비밀번호를 인식하지 못했습니다 --> 오류 메시지를 받았습니다. 비밀번호 인증이 필요합니다
4. 비밀번호를 사용하여 리스너를 중지합니다
[oracle@test ~]$ lsnrctl LSNRCTL> set current_listener listener_demo92 현재 리스너는 listener_demo입니다92 LSNRCTL> 중지 연결 중 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=test)(PORT=1521))) TNS-01169: 리스너는 비밀번호를 인식하지 못했습니다 LSNRCTL> 비밀번호 설정 Password: 명령이 성공적으로 완료되었습니다 LSNRCTL> 중지 연결 중 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=test)(PORT=1521))) 명령이 성공적으로 완료되었습니다 LSNRCTL> 상태 연결 중 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=test)(PORT=1521))) TNS-12541: TNS: 리스너가 없습니다 TNS-12560: TNS: 프로토콜 어댑터 오류 TNS-00511: 리스너가 없습니다 Linux 오류: 111: 연결 거부됨 연결 중 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC))) TNS-12541: TNS: 리스너가 없습니다 TNS-12560: TNS: 프로토콜 어댑터 오류 TNS-00511: 리스너가 없습니다 Linux 오류: 2: 파일이나 디렉토리가 없습니다
5. save_config 실패 문제
--> Oracle에서 9i에서 save_config 명령어는 실패합니다 LSNRCTL> save_config 연결 중 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<hostname>)(PORT=<port>))) TNS-01169: 리스너는 비밀번호를 인식하지 못했습니다 --> password 설정 후 save_config를 사용해야 저장이 성공합니다. LSNRCTL> 비밀번호 설정 Password: <선택한 비밀번호> 명령이 성공적으로 완료되었습니다 /*Oracle에서 10g에서는 그러한 문제가 발생하지 않습니다. 왜냐하면10g에서 운영체제 기반 인증 방식을 사용할 수 있습니다. 리스너는 사용자가 dba 그룹의 멤버인지 확인합니다. 변경할 수 있는 비밀번호, 설정 저장 및 리스너 중지 등의 권한이 부여됩니다. */
6. listener.ora 설정 파일에서 ADMIN_RESTRICTIONS 매개변수를 구성합니다.
파라미터 기능:
listener.ora 파일에 ADMIN_RESTRICTIONS 파라미터가 설정되면, 리스너가 실행 중일 때 관리 명령을 실행할 수 없으며, set 명령도 사용할 수 없습니다
서버 로컬에서나 원격에서 실행하더라도 모두 불가능합니다. 이 경우 리스너 설정은 listener.ora 파일을 수동으로 수정해야 하며, 수정이 적용되기 위해
lsnrctl reload 명령 또는 lsnrctl stop를 사용합니다/start 명령을 통해 리스너 설정 정보를 다시 로드합니다.
수정 방법:
listener.ora 파일에 다음과 같은 줄을 수동으로 추가하세요
ADMIN_RESTRICTIONS_<리스너 이름> = ON
다른 유저들의 추가 내용:
LSNRCTL> change_password
오래된 비밀번호:
새 비밀번호:
새 비밀번호를 다시 입력하세요:
연결 중 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ecp)-uc-db1)(PORT=1521)))
LISTENER의 비밀번호가 변경되었습니다
명령이 성공적으로 완료되었습니다
LSNRCTL> 비밀번호 설정
Password:
명령이 성공적으로 완료되었습니다
LSNRCTL> save_config
연결 중 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ecp)-uc-db1)(PORT=1521)))
LISTENER 설정 파라미터가 저장되었습니다.
Listener Parameter File /opt/oracle/product/10.2.0/db_1/network/admin/listener.ora
Old Parameter File /opt/oracle/product/10.2.0/db_1/network/admin/listener.bak
명령이 성공적으로 완료되었습니다
[oracle@ecp-uc-db1 admin]$ cat listener.ora
#—-ADDED BY TNSLSNR 10-JUN-2011 18:13:24—
PASSWORDS_LISTENER = 6D7AA003392C436A
#——————————————–
주의:10g 데이터베이스에 추가해야 합니다(리스너 재시작)
LOCAL_OS_AUTHENTICATION_LISTENER = OFF
1LOCAL_OS_AUTHENTICATION_LISTENER = OFF을 추가한 전
보안 ON: 비밀번호 또는 로컬 OS 인증
2LOCAL_OS_AUTHENTICATION_LISTENER = OFF을 추가한 후
Security ON: Password
LSNRCTL> 상태
연결 중 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ecp)-uc-db1)(PORT=1521)))
TNS-01169: 리스너는 비밀번호를 인식하지 못했습니다
LSNRCTL> 중지
연결 중 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ecp)-uc-db1)(PORT=1521)))
TNS-01169: 리스너는 비밀번호를 인식하지 못했습니다
LSNRCTL> 비밀번호 설정 123456
명령이 성공적으로 완료되었습니다
LSNRCTL> 상태
연결 중 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ecp)-uc-db1)(PORT=1521)))
LISTENER의 STATUS
————————
Alias LISTENER
Version TNSLSNR for Linux: Version 10.2.0.4.0 – Production
Start Date 10-JUN-2011 18:15:49
Uptime 0 days 0 hr. 1 min. 16 sec
Trace Level off
Security ON: Password
SNMP OFF
Listener Parameter File /opt/oracle/product/10.2.0/db_1/network/admin/listener.ora
Listener Log File /opt/oracle/product/10.2.0/db_1/network/log/listener.log
Listening Endpoints Summary…
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ECP-UC-DB1)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))
Services Summary…
Service “PLSExtProc” 가 1 instance(s).
Instance “PLSExtProc”, 상태 UNKNOWN, 가 1 이 서비스에 대한 핸들러...
Service “ecp” 가 1 instance(s).
Instance “ecp”, 상태 READY, 가 1 이 서비스에 대한 핸들러...
Service “ecpXDB” 가 1 instance(s).
Instance “ecp”, 상태 READY, 가 1 이 서비스에 대한 핸들러...
Service “ecp_XPT” 가 1 instance(s).
Instance “ecp”, 상태 READY, 가 1 이 서비스에 대한 핸들러...
명령이 성공적으로 완료되었습니다