목차
 
1. PAM(Pluggable Authentication Module)

1.1 PAM 개요
1.2 PAM 동작 원리
1.3 PAM 사용 이점
1.4 PAM 파일과 위치
1.5 PAM 라이브러리
1.6 PAM 모듈
1.7 PAM 구성 파일
1.8 pam_aix 모듈
1.9 PAM 모듈 추가
1.10 /etc/pam.conf 파일 변경
1.11 PAM 디버그 사용
1.12 SSH(Secure Shell)
1.13 NTP(Network Time Protocol) 설정
1.14 PAM 프로그래밍
1.15 PAM 컴파일 방법
1.16 PAM 테스트 방법
 
2. BaroPAM 소개
2.1 BaroPAM 개요
2.2 BaroPAM 아키텍처
2.3 BaroPAM 인증 절차
2.4 BaroPAM 특장점
2.5 BaroPAM의 3단계 인증 정책
2.6 BaroPAM의 3단계 보안 전략
2.7 BaroPAM 구성
2.8 BaroPAM 처리 Flow
 
3. BaroPAM 설치
3.1 BaroPAM 설치 전 준비사항
3.2 BaroPAM 설치 모듈 다운로드
3.3 BaroPAM 환경 설정 파일 생성
3.4 BaroPAM 환경 설정
3.5 AIX 접속 방법
3.6 BaroPAM 환경 제거
 
4. BaroPAM 어플
4.1 BaroPAM 어플 설치
4.2 BaroPAM 어플 사용
4.3 BaroKEY 연동 API
 
5. BaroPAM 웹 사이트
5.1 BaroPAM 웹 사용
 
6. About BaroPAM



1. PAM(Pluggable Authentication Module)

1.1 PAM 개요


PAM(플러그 가능한 인증 모듈) Linux/Unix 시스템에서 서비스를 재컴파일하지 않고, 다양한 인증 기술을 시스템 항목 서비스에 접목할 수 있도록 해주는 프레임워크으로 중앙 집중적인 인증 매커니즘을 지원하는 것이다. 게다가 시스템의 기본적인 인증 기법을 제공하여 이것을 사용하면 응용 프로그램 개발자 뿐만 아니라 시스템 관리자들이 인증을 유연성 있게 관리할 수 있도록 도와 준다.


전통적으로 시스템 자원에 대한 접근을 관리하는 프로그램들은 내장된 메커니즘에 의해 사용자 인증 과정을 수행한다. 이러한 방식은 오랫동안 이루어졌지만 이러한 접근 방식은 확장성이 부족하고 매우 복잡하다. 그렇기 때문인지 이러한 인증 매커니즘을 끌어내기 위한 수많은 해킹 시도가 있었다.


Solaris의 방식을 따라서 Unix/Linux 사용자들은 그들만의 PAM을 구현하는 방식을 찾았다.


PAM의 아키텍처는 다음과 같다.



PAM의 기본 원리는 응용 프로그램이 password 파일을 읽어 오는 대신 PAM이 직접 인증을 수행 하도록 하는 것이다. PAM은 시스템 관리자가 원하는 인증 매커니즘이 무엇이든 상관하지 않는다.


여러 사이트에서 선택 받은 인증 매커니즘은 아직도 password 파일이다. 왜 그럴까? 우리가 원하는 것을 해주기 때문이다. 대부분의 사용자는 password 파일이 필요한 것이 무엇인지 이미 알고 있다. 그리고 원하는 작업을 수행하는데 있어 이미 그 기능이 검증되었기 때문일 것이다.


PAM의 인증 절차는 다음과 같다.


PAM 인증 절차


1.2 PAM 동작 원리


PAM Windows 환경의 DDL(Dynamic Link Library)과 같은 것이다. Library로 프로그램이 어떤 사용자에 대한 인증을 수행하려면 PAM Library가 있는 함수를 호출한다. PAM은 해당 함수의 Library를 제공하여 응용 프로그램이 특정 사용자를 인증하도록 요청할 수 있다.


PAM을 통해 /etc/passwd 파일이나 /etc/shadow 파일을 확인하거나 또는 보다 복잡한 확인 작업을 수행하기도 하는데, 예로는 LDAP 서버에 접속하는 것이다.


확인 작업을 마치고, 인증 여부를 결정하게 되면 "인증됨/인증되지 않음"의 메시지를 자신을 호출한 응용 프로그램에 전송한다.


간단한 확인 작업이라고 했는데, 그 과정이 많아 보일 수가 있다. 여기에 나오는 각 모듈은 크기가 작고 작업 수행 시간이 매우 빠르다. 이것은 매우 놀랍기도 하지만 PAM을 사용하게 된다.


PAM 의 동작은 프로그램의 실행 하자마자 실행되는 보안 설정 파일들의 프로그램들이다.



PAM의 동작 원리는 다음과 같다.


■ 인증이 필요한 프로그램 동작 시 PAM 라이브러리 호출

■ PAM설정 파일을 참조

■ 참조한 파일의 내용을 바탕으로 모듈 동작

■ 프로그램에 동작 결과를 반환하여 인증여부 결정.


1.3 PAM 사용 이점


PAM을 사용하면 사용자 인증을 위한 시스템 항목 서비스(: ftp, login, telnet, rsh) 사용을 구성할 수 있다. PAM이 제공하는 몇 가지 이점은 다음과 같다.


■ 유연한 구성 정책

■ 응용 프로그램별 인증 정책

■ 기본 인증 방식을 선택할 수 있는 기능

■ 높은 보안 시스템에서 여러 권한 부여를 요구할 수 있는 기능

■ 최종 사용자의 사용 편의성

■ 암호가 여러 인증 서비스에 대해 동일한 경우 암호 재입력 없음

■ 사용자가 여러 명령을 입력할 필요 없이 여러 인증 서비스에 대해 사용자에게 암호를 요구할 수 있는 기능

■ 사용자 인증 서비스에 선택적 옵션을 전달할 수 있는 기능

■ 시스템 항목 서비스를 변경할 필요 없이 사이트별 보안 정책을 구현할 수 있는 기능


1.4 PAM 파일과 위치


파일 위치

설명

비고

/usr/lib/security

제공 가능한 PAM 모듈 디렉토리로 실제 PAM Library를 동적으로 인증 모듈을 호출하여 실행한다.(*so)

 

/etc/security/unix

PAM 실행에 필요한 설정파일로 /usr/lib/security에 있는 모듈에 대한 설정 파일.(서비스명.conf)

 

/etc/pam.d

PAM 데몬 파일(어플리케이션별 PAM의 설정 파일 위치) PAM을 사용하는 응용 프로그램이 설정 파일이 없다면 기본값으로 설정된 설정 파일을 자동으로 사용한다.

 


1.5 PAM 라이브러리


PAM 라이브러리 /usr/lib/libpam.a에는 모든 PAM 응용 프로그램에 대한 공통 인터페이스 역할을 하며 모듈로드를 제어하는 PAM API가 포함되어 있다.


모듈은 /etc/pam.conf 파일에 정의 된 스태킹 동작을 기반으로 PAM 라이브러리에 의해 로드 된다.


다음 PAM API 함수는 PAM 모듈이 제공하는 해당 PAM SPI를 호출한다.


예를 들어, pam_authenticate API PAM 모듈에서 pam_sm_authenticate SPI를 호출한다.


라이브러리

설명

비고

pam_authenticate

PAM 프레임워크 내에서 인증 수행

 

pam_setcred

인증 서비스에 대한 사용자 자격 증명 수정 또는 삭제

 

pam_acct_mgmt

PAM 계정 유효성 검사 절차 수행

 

pam_open_session

PAM 세션 생성 작업 수행

 

pam_close_session

PAM 세션 종료 작업 수행

 

pam_chauthtok

PAM 프레임 워크 내에서 암호 관련 기능 수행

 


또한 PAM 라이브러리에는 응용 프로그램이 PAM 모듈을 호출하고 PAM 모듈에 정보를 전달할 수 있게 해주는 여러 프레임 워크 API가 포함되어 있다.


다음 표는 AIX 및 그 기능에서 구현된 PAM 프레임워크 API를 보여준다.


라이브러리

설명

비고

pam_start

PAM 세션 설정

 

pam_end

PAM 세션 종료

 

pam_get_data

모듈 특정 데이터 검색

 

pam_set_data

모듈별 데이터 설정

 

pam_getenv

정의 된 모든 PAM 환경 변수와 그 값 목록을 검색

 

pam_putenv

PAM 환경 변수를 설정

 

pam_get_item

일반적인 PAM 정보를 가져옴

 

pam_set_item

공통 PAM 정보 설정

 

pam_get_user

사용자 이름 검색

 

pam_strerror

PAM 표준 오류 메시지 가져 오기

 


1.6 PAM 모듈


AIX 메커니즘은 getty, login, rlogin, rsh, telnet tsm과 같은 명령을 통해 로그인을 처리한다.


AIX 메커니즘은 pam_aix 모듈을 사용하여 STD_AUTH 인증과 PAM_AUTH 인증을 지원한다.


usw 스탠자의 mkhomeatlogin 속성을 true로 설정하여 /etc/security/login.cfg 파일에서 AIX 메커니즘을 사용 가능하게 한다(파일에 대한 추가 정보는 /etc/security/login.cfg 파일을 참조하라).


chsec 명령을 사용하여 로그인시 자동 홈 디렉토리 생성 기능을 활성화 또는 비활성화 한다.


예를 들어 이 기능을 사용하려면 다음 명령을 실행한다.


> chsec -f /etc/security/login.cfg -s usw -a mkhomeatlogin=true


또는


usw:

shells = /bin/sh,/bin/bsh,/bin/csh,/bin/ksh,/bin/tsh,/bin/ksh93

maxlogins = 32767

logintimeout = 60

maxroles = 8

auth_type = PAM_AUTH

pwd_algorithm = sha256


활성화되면 로그인 프로세스는 인증이 성공한 후 사용자의 홈 디렉토리를 확인하고 사용자의 홈 디렉토리가 없으면 하나가 만들어진다.


Note : mkhomeatlogin 속성은 AIX 버전 6.1 (6100-02 Technology Level 이상)에서만 지원된다.


AIX는 또한 PAM 메커니즘을 위한 홈 디렉토리를 생성하기 위한 pam_mkuserhome 모듈을 제공한다.


pam_mkuserhome 모듈은 로그인 서비스를 위한 다른 세션 모듈과 쌓일 수 있다.


PAM 모듈을 서비스에 사용하려면 해당 항목에 항목을 추가 해야 한다.


예를 들어, PAM을 사용하여 telnet 명령을 통해 홈 디렉토리를 만들려면 /etc/pam.cfg 파일에 다음 항목을 추가한다.


telnet session optional pam_mkuserhome


PAM 모듈을 사용하면 여러 인증 메커니즘을 시스템에서 집합적으로 또는 독립적으로 사용할 수 있다.


주어진 PAM 모듈은 네 가지 모듈 유형 중 적어도 하나를 구현 해야 한다.


모듈 유형은 모듈 유형을 준수하는데 필요한 해당 PAM SPI와 함께 다음과 같이 설명된다.


1) 인증 모듈


사용자를 인증하고 자격 증명을 설정, 새로 고치거나 삭제한다. 이 모듈은 인증 및 자격 증명을 기반으로 사용자를 식별한다.


인증 모듈 기능 :

- pam_sm_authenticate

- pam_sm_setcred


2) 계정 관리 모듈


인증 모듈에서 식별한 후 사용자 계정의 유효성과 후속 액세스를 결정한다. 이러한 모듈에서 수행하는 검사에는 일반적으로 계정 만료 및 암호 제한이 포함된다.


계정 관리 모듈 기능 :

- pam_sm_acct_mgmt


3) 세션 관리 모듈


사용자 세션을 시작하고 종료한다. 또한 세션 감사 지원이 제공될 수도 있다.


세션 관리 모듈 기능 :

- pam_sm_open_session

- pam_sm_close_session


4) 암호 관리 모듈


암호 변경 및 관련 속성 관리를 수행한다.


암호 관리 모듈 기능 :

- pam_sm_chauthtok


1.7 PAM 구성 파일


/etc/pam.conf 구성 파일은 각 PAM 모듈 유형에 대한 서비스 항목으로 구성되며 정의된 모듈 경로를 통해 서비스를 라우팅한다.


파일의 항목은 공백으로 구분된 다음 필드로 구성된다.


[service_name] [module_type] [control_flag] [module_path] [module_options]


이 필드에 대한 설명은 다음과 같다.


1) service_name


서비스의 이름을 지정한다. 키워드 OTHER는 항목에 지정되지 않은 응용 프로그램에 사용할 기본 모듈을 정의하는데 사용된다.


2) module-type


서비스의 모듈 유형을 지정한다. 유효한 모듈 유형은 auth, account, session 또는 password이다. 주어진 모듈은 하나 이상의 모듈 유형을 지원한다.


모듈 타입

설명

비고

auth

사용자 인증에 사용하며, 올바른 비밀번호인지 확인하는 절차를 가진다.

응용 프로그램이 사용자에게 비밀번호를 입력하도록 안내하고, 사용자와 해당 사용자의 그룹에 대한 권한을 인증한다.

 

account

사용자의 접근 허가 여부를 확인하며 계정 만료, 특정 시간대에 접근이 허용되었는지 여부를 확인한다.

인증하는 기능이 아니며 현재 시간, 사용자의 위치와 같은 다른 요소들의 접근 권한을 결정하는데, 예로 root 사용자의 로그인은 콘솔로만 한다. 이런 식으로 결정하는 것이다.

 

password

비밀번호를 설정하고 확인한다.

비밀번호를 기준에 맞게 변경하도록 하는 모듈을 지정한다.

 

session

사용자가 인증 받기 전후에 필요한 홈 디렉토리 마운트, 메일박스 생성 등의 유저 섹션을 구분하기 위해 부가적인 작업을 수행한다.

혹시라도 사용자의 로그인 전후에 수행해야 할 작업이 있다는 내용을 지정한다.

 


3) contol-flag


모듈의 스태킹 동작을 지정한다. 지원되는 제어 플래그는 required, requisite, sufficient 또는 optional이다.


control_flag 필드에 유효한 값과 스택의 해당 동작은 다음과 같습니다.


flag

설명

비고

required

스택의 모든 필수 모듈이 성공해야 성공한다. 하나 이상의 필수 모듈이 실패하면 스택의 모든 필수 모듈이 시도되지만 첫 번째 실패한 필수 모듈의 오류가 반환된다.

 

requisite

필요한 모듈이 실패한 경우 스택의 다른 모듈이 처리되지 않고 필요한 모듈에서 첫 번째 오류 코드를 즉시 반환한다는 점을 제외하고는 요구 사항과 유사하다.

 

sufficient

충분하다고 플래그가 지정된 모듈이 성공하고 이전의 필수 또는 충분한 모듈이 실패하지 않은 경우 스택의 나머지 모든 모듈이 무시되고 성공이 반환된다.

 

optional

스택에 있는 모듈 충분하다고 플래그가 지정된 모듈이 성공하고 이전의 필수 또는 충분한 모듈이 실패하지 않은 경우 스택의 나머지 모든 모듈이 무시되고 성공이 반환된다. 하나도 없으며 충분한 모듈이 성공하지 못하면 서비스에 대한 하나 이상의 선택적 모듈이 성공 해야 한다. 스택의 다른 모듈이 성공하면 선택적 모듈의 오류가 무시된다.

 


required/requisite 차이는 required requisite 인터페이스 모두 반드시 "성공" 되어야만 PAM을 이용한 인증이 완료되나 보안 및 가용성 측면에서는 분명한 차이가 존재한다. required의 경우 실패를 해도 실패한 지점이나 결과값에 대한 리턴을 하지 않는데, requisite의 경우 실패한 지점과 원인을 리턴하기에 보안 관점에서는 공격자에게 인증이 거부된 원인을 제공하게 되며, 가용성 측면에서는 실패한 원인을 리턴하여 원인 분석을 용이하게 해준다.


4) module-path


서비스에로드 할 모듈을 지정한다. module_path의 유효한 값은 모듈의 전체 경로 또는 모듈 이름으로 지정할 수 있다.


모듈에 대한 전체 경로가 지정되면 PAM 라이브러리는 해당 module_path를 사용하여 32bit 서비스를 로드하거나 64bit 서비스 용으로 64 서브 디렉토리를 사용한다.


모듈에 대한 전체 경로가 지정되지 않은 경우 PAM 라이브러리는 /usr/lib/security 접두사(32bit 서비스 용) 또는 /usr/lib/security/64(64bit 서비스 용)를 모듈 이름에 추가한다 .


5) module-option


서비스 모듈에 전달할 수 있는 공백으로 구분된 옵션 목록을 지정한다. 이 필드의 값은 module_path 필드에 정의 된 모듈에서 지원하는 옵션에 따라 다르다. 이 필드는 선택 사항이다.


module_type 또는 control_flag 필드에 대한 잘못된 값을 가진 잘못된 항목이나 항목은 PAM 라이브러리에서 무시된다. 줄의 시작 부분에 숫자 기호 (#)로 시작하는 항목도 주석을 나타 내기 때문에 무시된다.


PAM은 일반적으로 "스태킹"이라고 하는 개념을 지원하므로 각 서비스에 여러 메커니즘을 사용할 수 있다.


스태킹은 동일한 module_type 필드를 가진 서비스에 대한 여러 항목을 작성하여 구성 파일에 구현된다.


모듈은 지정된 서비스의 파일에 나열된 순서대로 호출되며 최종 결과는 각 항목에 지정된 control_flag 필드에 의해 결정된다.


arguments

설명

비고

debug

시스템 로그에 디버깅 정보를 남기다.

 

no_warn

응용 프로그램에 경고 메시지를 제공하지 않는다.

 

use_first_pass

비밀번호를 두 번 확인하지 않는다. 대신 auth 모듈에서 입력한 비밀번호를 사용자 인증 과정 시에도 재사용 해야 한다.(이 옵션은 auth password 모듈에 해당하는 옵션임)

 

try_first_pass

이 옵션은 use_first_pass 옵션과 비슷한데, 사용자는 두 번 비밀번호를 입력할 필요가 없기 때문이다. 하지만 기존의 비밀번호를 다시 입력하도록 되어 있다.

 

use_mapped_pass

이 인자는 이전 모듈에서 입력된 텍스트 인증 토큰을 입력 받도록 하는데, 이 값으로 암호화 또는 암호화가 해제된 키 값을 생성한다. 그 이유는 모듈에 대한 인증 토큰 값을 안전하게 저장하거나 불러오기 위함이다.

 

expose_account

이 값은 모듈로 하여금 계정 정보를 중요하다고 판단하지 않게 한다. 시스템 관리자에 의해 임의로 설정한 것이라 여겨진다.

 

nullok

이 인자는 호출된 PAM 모듈이 null 값의 비밀번호를 입력하는 것을 허용한다.

 


다음 /etc/pam.conf 하위 세트는 로그인 서비스의 인증 모듈 유형에서 스택하는 예제입니다.


##

PAM configuration file /etc/pam.conf

# Authentication Management

login auth required /usr/lib/security/pam_ckfile file=/etc/nologin

login auth required /usr/lib/security/pam_aix

login auth optional /usr/lib/security/pam_test use_first_pass

OTHER auth required /usr/lib/security/pam_prohibit


구성 파일의 예에는 로그인 서비스에 대한 세 가지 항목이 들어 있다. 필요에 따라 pam_ckfile pam_aix를 모두 지정하면 두 모듈이 모두 실행되고 전체 결과가 성공적으로 이루어져야 한다.


가상의 pam_test 모듈에 대한 세 번째 항목은 선택 사항이며 성공 또는 실패 여부는 사용자가 로그인 할 수 있는지 여부에 영향을 주지 않는다.


pam_test 모듈에 대한 use_first_pass 옵션은 새로운 암호를 요구하는 대신 이전에 입력한 암호를 사용해야 한다.


OTHER 키워드를 서비스 이름으로 사용하면 구성 파일에 명시적으로 선언되지 않은 다른 서비스에 대해 기본값을 설정할 수 있다.


기본값을 설정하면 주어진 모듈 유형에 대한 모든 케이스가 하나 이상의 모듈에 의해 보호된다.


이 예제의 경우 pam_prohibit 모듈이 모든 호출에 대해 PAM 실패를 리턴하기 때문에 login이 아닌 모든 서비스가 항상 실패한다.


1.8 pam_aix 모듈


pam_aix 모듈은 AIX 보안 서비스에 대한 PAM 사용 가능 응용 프로그램 액세스를 제공하는 PAM 모듈로서, 해당 AIX 서비스를 호출하는 인터페이스를 제공하여 AIX 보안 서비스에 액세스한다.


이러한 서비스는 로드 가능한 인증 모듈 또는 사용자 정의 및 methods.cfg 파일의 해당 설정에 따라 AIX 내장 함수에 의해 차례로 수행된다.


AIX 서비스 실행 중 생성된 모든 오류 코드는 해당 PAM 오류 코드에 맵핑된다.



이 그림은 pam_aix 모듈을 사용하도록 /etc/pam.conf 파일을 구성한 경우 PAM 응용 프로그램 API 호출이 따르는 경로를 보여준다.


다이어그램에 표시된 대로 통합을 통해 로드 가능한 인증 모듈(DCE, LDAP 또는 KRB5) 또는 AIX 파일 (compat) 중 하나를 통해 사용자를 인증할 수 있다.


pam_aix 모듈은 /usr/lib/security 디렉토리에 설치된다.


pam_aix 모듈을 통합하려면 모듈을 사용하도록 /etc/pam.conf 파일을 구성해야 한다.


스태킹은 계속 사용할 수 있지만 다음과 같은 /etc/pam.conf 파일에는 표시되지 않는다.


##

Authentication management

#

OTHER auth required /usr/lib/security/pam_aix

##

Account management

#

OTHER account required /usr/lib/security/pam_aix

##

Session management

#

OTHER session required /usr/lib/security/pam_aix

##

Password management

#

OTHER password required /usr/lib/security/pam_aix


pam_aix 모듈에는 pam_sm_authenticate, pam_sm_chauthok pam_sm_acct_mgmt SPI 함수에 대한 구현이 있다.


pam_sm_setcred, pam_sm_open_session pam_sm_close_session SPI pam_aix 모듈에도 구현되지만 이러한 SPI 함수는 PAM_SUCCESS 호출을 반환한다.


다음은 AIX 보안 서브 시스템에 대한 PAM SPI 호출의 대략적인 맵핑이다.


PAM SPI                  AIX

=========                =====

pam_sm_authenticate  --> authenticate

pam_sm_chauthtok     --> passwdexpired, chpass

                           Note: passwdexpired PAM_CHANGE_EXPIRED_AUTHTOK

                           플래그가 전달 된 경우에만 검사된다.

pam_sm_acct_mgmt     --> loginrestrictions, passwdexpired

pam_sm_setcred       --> 비교 가능한 매핑이 없으며, PAM_SUCCESS가 반환된다.

pam_sm_open_session  --> 비교 가능한 매핑이 없으며, PAM_SUCCESS가 반환된다.

pam_sm_close_session --> 비교 가능한 매핑이 없으며, PAM_SUCCESS가 반환된다.


AIX 보안 서브 시스템으로 전달되는 데이터는 모듈 사용 이전의 pam_set_item 기능 또는 데이터가 존재하지 않는 경우 pam_aix 모듈을 사용하여 설정할 수 있다.


1.9 PAM 모듈 추가


PAM 모듈을 추가하여 여러 인증 메커니즘을 사용할 수 있다.


step 1) 모듈의 32 비트 버전을 /usr/lib/security 디렉토리에 두고 모듈의 64 비트 버전을 /usr/lib /security/ 64 디렉토리에 위치시켜야 한다.


step 2) 파일 소유권을 루트 및 사용 권한으로 555로 설정해야 한다. PAM 라이브러리는 루트 사용자가 소유하지 않은 모듈을 로드하지 않는다.


step 3) /etc/pam.conf 구성 파일을 갱신하여 원하는 서비스 이름의 항목에 모듈을 포함 시켜야 한다.


step 4) 영향을 받은 서비스를 테스트하여 기능을 확인해야 한다. 로그인 테스트가 수행 될 때까지 시스템을 로그 오프 하지 말아야 한다.


1.10 /etc/pam.conf 파일 변경


/etc/pam.conf 파일을 변경하기 전에 고려해야 할 사항이 몇 가지 있는데, /etc/pam.conf 구성 파일을 변경할 때 다음 요구 사항을 고려해야 한다.


1) 파일은 항상 루트 사용자 및 그룹 보안이 소유해야 한다. 모든 사용자가 읽기 액세스를 허용하지만 루트 만 수정할  수 있게 하려면 파일에 대한 사용 권한이 644 여야 한다.


2) 보안을 강화하려면 각 PAM 사용 가능 서비스를 명시적으로 구성한 다음 OTHER 서비스 키워드에 대해 pam_prohibit 모듈을 사용하는 것이 좋다.


3) 선택한 모듈에 대해 제공되는 모든 설명서를 읽고 지원되는 제어 플래그 및 옵션과 그 영향에 대해 결정해야 한다.


4) 스택 모듈의 required, requisite, sufficient optional 제어 플래그의 동작을 염두에 두고 모듈 및 제어 플래그의 순서를 신중하게 선택해야 한다.


: PAM 구성 파일을 잘못 구성하면 루트를 포함하여 모든 사용자에게 구성이 적용되므로 로그인 할 수 없는 시스템이 발생할 수 있다.


파일을 변경 한 후에는 시스템에서 로그 아웃하기 전에 영향을 받는 응용 프로그램을 항상 테스트 해야 한다.


로그인 할 수 없는 시스템은 시스템을 유지 보수 모드로 부팅하고 /etc/pam.conf 구성 파일을 수정하여 복구 할 수 있다.


1.11 PAM 디버그 사용


PAM (Pluggable Authentication Modules) 라이브러리는 실행 중에 디버그 정보를 제공 할 수 있다.


시스템이 디버그 출력을 수집하도록 설정한 후에는 수집된 정보를 사용하여 PAM API 호출을 추적하고 현재 PAM 설정에서 오류 지점을 확인할 수 있다.


PAM 디버그 출력을 사용하려면 다음 단계를 완료 해야 한다.


step 1) touch 명령을 사용하여 파일이 없으면 /etc/pam_debug 디렉토리에 pam_debug라는 빈 파일을 작성한다. PAM 라이브러리는 /etc/pam_debug 파일을 검사하고 syslog를 활성화 하며, 결과가 발견되면 출력한다.


step 2) /etc/syslog.conf 파일을 편집하여 원하는 우선 순위 수준에서 syslog 메시지를 로깅 할 파일을 식별한다.


예를 들어 PAM 디버그 수준 메시지를 /var/log/auth.log 파일에 보내려면 다음 텍스트를 syslog.conf 파일의 새 행으로 추가해야 한다.


*.debug /var/log/auth.log


step 3) touch 명령을 사용하여 2 단계에서 참조한 출력 파일 (/var/log/auth.log)이 존재하지 않으면 작성해야 한다.


step 4) 구성 변경 사항이 인식되도록 syslogd 데몬을 다시 시작하려면 다음 단계를 완료 해야 한다.


> stopsrc -s syslogd

> startsrc -s syslogd


PAM 응용 프로그램이 다시 시작되면 /etc/syslog.conf 구성 파일에 정의된 출력 파일에 디버그 메시지가 수집된다.


1.12 SSH(Secure Shell)


Secure Shell은 개방형 소스 SSH 제품인 OpenSSH 제품을 기반으로 한다.(http://www.openssh.org)


Secure Shell은 비보안 네트워크에서 클라이언트와 원격 호스트 간의 보안 연결을 가능하게 한다. 


이 보안 연결의 주요 속성은 다음과 같다.


-클라이언트와 원격 호스트 둘 다에 대한 강력한 인증

-클라이언트와 원격 호스트 간의 통신에 대한 강력한 암호화 및 공개 키 암호화

-클라이언트와 원격 호스트에서 명령을 실행하는데 사용할 보안 연결


Secure Shell telnet, remsh, rlogin, ftp, rcp와 같은 자주 사용하는 함수와 명령의 보안 대체 항목을 제공한다.


1) Secure Shell의 주요 보안 기능


Secure Shell의 주요 보안 기능은 다음과 같다.


① 강력한 암호화


클라이언트와 원격 호스트 간의 모든 통신은 Blowfish, 3DES, AES arcfour와 같은 특허 없는 암호화 알고리즘을 사용하여 암호화된다. 암호 등의 인증 정보는 네트워크에서 일반 텍스트로 전송되지 않는다. 또한 암호화는 강력한 공개 키 기반 암호화와 더불어 잠재적 보안 공격을 차단한다.


② 강력한 인증


Secure shell은 클라이언트와 서버 간의 강력한 인증 방법 집합을 지원한다. 인증은 양방향일 수 있다. 서버는 클라이언트를 인증하고 클라이언트도 서버를 인증한다. 이렇게 하면 다양한 보안 문제로부터 세션을 보호할 수 있다.


③ 포트 전달


클라이언트와 원격 호스트 간의 TCP/IP 연결 리디렉션(및 그 반대)을 포트 전달 또는 SSH 터널링이라고 한다. Secure Shell은 포트 전달을 지원한다. 예를 들어, 포트 전달을 사용하여 클라이언트와 서버 간의 ftp 트래픽(또는 전자 메일 클라이언트와 POP/IMAP 서버 간의 전자 메일 트래픽)을 리디렉션할 수 있다. 클라이언트가 직접 서버와 통신하는 대신 보안 채널을 통해 트래픽을 sshd 서버로 리디렉션할 수 있으며, 그런 다음 sshd 서버에서 트래픽을 실제 서버 시스템의 지정된 포트로 전달할 수 있다.


2) Secure Shell의 소프트웨어 구성 요소


Secure Shell 소프트웨어는 클라이언트트 및 서버 구성 요소소 집합으로 이루어져 있다.


구성요소

설명

위치

대응하는 비보안 구성요소

ssh

Secure Shell를 클라이언트는 telnet remsh의 보안 대체 항목이며 보안 기능이 있는 remsh와 가장 유사함.

클라이언트

remsh, telnet, rlogin

slogin

ssh에 대한 심볼릭 링크임.

클라이언트

remsh, telnet, rlogin

scp

클라이언트 보안 복사 및 서버 보안 복사를 수행함,

클라이언트 및 서버

rcp

sftp

보안 ftp 클라이언트임

클라이언트

ftp

sshd

보안 Shell 데몬임.

서버

remshd,telnetd,rlogind

sftp-server

보안 ftp 데몬임.

서버

ftpd

ssh-rand-helper

sshd가 서버에서 /dev/random 또는 /dev/urandom을 찾을 수 없을 때는 사용되는 Random Number Generator. OS 커널에 상주하는 Random Number Generator rng가 포함되어 있다. rng가 구성 해제되어 있으면 sshd prngd를 사용함.

서버

해당 사항 없음

ssh-agent

클라이언트에서 서버로의 "자동" 키 기반 로그인 도구임.

클라이언트 및 서버

Rhosts 파일 메커니즘

ssh-add

클라이언트의 키 쌍을 ssh-agent에 알리는 도구임.

클라이언트

해당 사항 없음

ssh-keygen

공개 키 인증을 위해 키 쌍을 생성하는 도구임.

클라이언트

해당 사항 없음

ssh-keyscan

 

 

ssh-keysign

Secure Shell 데몬(sshd)을 실행하는 호스트 집합에 대한 공개 키를 수집하는 클라이언트 도구임.

 

호스트 기반 인증 중에 필요한 디지털 서명을 생성하는 도구임. ssh()에서 로컬 호스트 키 호스트 기반 인증에 액세스하는데 사용됨.

클라이언트

 

 

클라이언트

해당 사항 없음

 

 

해당 사항 없음


3) Secure Shell 실행


위 표에서 나열된 Secure Shell 클라이어트를 실행하기 전에 먼저 Secure Shelll 서버 데몬 sshd를 시작한다.


sshd 데몬은 서버 시스템의 /opt/ssh/etc 디렉토리에 있는 sshd_config 파일에서 초기 값을 가져온다.


sshd_config에 있는 가장 중요한 구성 지시어 중 하나는 sshd 데몬에서 지원하는 인증 방법 집합이다.


- ssh 클라이언트 실행


ssh 클라이언트 응용 프로그램은 sshd 서버와의 소켓 연결을 설정한다.


sshd 서버는 자식 sshd 프로세스를 시작한다.


이 자식은 연결 소켓을 상속 받고 선택된 인증 방법을 기반으로 클라이언트를 인증한다.


인증에 성공한 경우에만 성공적으로 보안 클라이어트 세션이 설정된다.


세션이 만들어진 후 모든 후속 통신은 클라이언트와 이 자식 sshd 프로세스 간에 직접 이루어진다.


이제 클라이언트는 서버에서 원격 명령을 실행할 수 있다.


ssh 클라이언트의 명령 요청이 있을 때마다 자식 sshd 프로세스에서 해당 명령을 실행할 Shell 프로세스를 시작한다.


간단히 말해서 실행 중인 ssh 클라이언트-서버 세션은 다음 프로세스로 구성된다.


sshd 서버에 연결된 모든 클라이언트 시스템에는 현재 이 클라이언트 시스템에서 설정된 각 ssh 연결에 대한 하나의 ssh 클라이언트 프로세스가 있다.


② 서버 시스템에는 하나의 부모 sshd 프로세스와 서버에 연결된 동시 ssh 클라이언트 개수 만큼의 자식 sshd 프로세스가 있다. 서버에 권한 분리가 활성화되어 있으면 서버에서 실행되는 자식 sshd 프로세스의 수가 두 배로 증가한다.


ssh 클라이언트에서 명령 실행 요청이 있을 때마다 서버 시스템의 해당 자식 sshd 프로세스는 Shell 프로세스를 시작하고 Unix 파이프를 사용하여 명령 요청을 이 Dhell 프로세스로 전달한다. Shell 프로세스는 Unix 파이프를 사용하여 명령 실행 결과를 자식 sshd 프로세스로 반환하고 명령 실행이 완료되면 종료된다.


- sftp 클라이언트 실행


sftp 클라이언트 응용 프로그램은 sftp 클라이언트 응용 프로그램이 ssh 클라이언트를 시작 하도록 하고 Unix 파이프를 사용하여 이 클리이언트와 통신한다. 그런 다음 ssh 클라이언트는 sshd 서버와의 소켓 연결을 설정한다.


서버 상호 작용의 나머지 부분은 ssh 클라이언트의 경우와 유사하다. 차이점은 원격 명령을 실행한 Shell을 시작하는 대신 자식 sshd 프로세스가 sftp-server 프로세스를 시작한다는 것이다. sftp 세션 중의 모든 후속 통신은 다음 프로세스 간에 발생한다.


Unix 파이프를 사용하여 클라이언트 시스템에서 sftp 클라이언트와 ssh 클라이언트 간에

② 설정된 연결 소켓을 통해 ssh 클라이언트와 자식 sshd 프로세스 간에

③ Unix 파이프를 사용하여 자식 sshd 프로세스와 sftp 서버 프로세스 간에


- scp 클라이언트 실행


scp 클라이언트의 경우는 sftp 클라이언트 실행과 거의 동일하다. 차이점은 sftp-server 프로세스를 시작하는 대신 자식 sshd 프로세스가 scp 프로세스를 시작한다는 것이다. scp 세션 중의 모든 후속 통신은 다음 프로세스간에 발생한다.


① 클라이언트 시스템에서 scp 클라이언트와 ssh 클라이언트 간에, Unix 파이프 사용

② 설정된 연결 소켓을 통해 ssh 클라이언트와 자식 sshd 프로세스 간에

③ Unix 파이프를 사용하여 자식 sshd 프로세스와 scp 서버 프로세스 간에


4) Secure Shell 권한 분리


Secure Shell은 권한 분리 기능을 통해 보다 향상된 수준의 보안을 제공한다. 부모 sshd 및 자식 sshd 프로세스는 권한이 부여된 사용자로 실행된다. 권한 분리를 활성화하면 사용자 연결당 하나의 추가 프로세스가 시작된다.


ssh 클라이언트가 권한 분리에 대해 구성된 sshd 서버에 연결하면 부모 sshd 프로세스가 권한이 부여된 자식 sshd 프로세스를 시작한다. 권한 분리를 활설화하면 자식 sshd 프로세스는 권한이 없는 자식 sshd 프로세스를 추가로 시작한다. 권한이 없는 자식 sshd 프로세스는 연결 소켓을 상속 받는다. 클라이언트와 서버 간의 모든 후속 통신은 권한이 없는 이 자식 sshd 프로세스를 사용하여 이루어진다.


클라이언트의 원격 명령 실행 요청은 대부분 비권한이며 권한이 없는 이 자식 sshd 프로세스에서 시작된 Shell에 의해 처리된다. 권한이 없는 자식 sshd 프로세스에서 권한이 부여된 기능을 실행해야 하는 경우 Unix 파이프를 사용하여 권한이 부여된 부모 sshd 프로세스와 통신한다.


권한 분리는 침입자에 의한 잠재적 손상을 제한하는데 도움이 된다. 예를 들어, Shell 명령을 실행하는 동안 버퍼 오버플로 공격이 발생할 경우 권한이 없는 프로세스 내에서 제어되므로 잠재적 보안 위험이 제한된다.


권한 분리는 Secure Shell의 기본 구성이다. sshd_config 파일에서 "UsePrivilegeSeparation NO"를 설정하여 권한 분리를 해제할 수 있다. 잠재적 권안 위험이 있으므로 권한 분리를 해제할 경우 신중하게 고려해야 한다.


5) Secure shell 인증


Secure Shell은 다음 인증 방법을 지원한다.


-GSS-API(Kerberos 기반 클라이언트 인증)

-공개 키 인증

-호스트 기반 인증

-암호 인증


클라이언트는 원격 sshd 데몬과 연결될 때 원하는 인증 방법(앞에 나열된 방법 중 하나)을 선택하고 연결 요청의 일부로 적절한 자격 증명을 제공하거나 서버에서 보낸 프롬프트에 응답한다. 모든 인증 방법이 이런 방식으로 작동한다.


서버가 성공적으로 연결을 설정하려면 클라이언트로부터 적절한 키. 암호구, 암호 또는 자격 증명을 받아야 한다.


sshd 인스턴스에서 보안 요구 사항을 기반으로 지원되는 인증 방법 중 일부만 지원하도록 선택할 수 있다.


Secure Shell은 앞에 나열된 인증 방법을 지원하지만 시스템 관리자가 환경의 특정 보안 요구 사항을 기반으로 sshd 인스턴스에서 제공되는 인증 방법을 제한할 수 있다. 예를 들어, Secure Shell 환경에서 모든 클라이언트가 공개 키 또는 Kerberos 방법을 사용하여 인증해야 한다고 지정할 수 있으며, 이로 인해 나머지 방법은 비활성화될 수 있다. 지원되는 인증 방법 활성화 및 비활성화는 sshd_config 파일에 지정된 구성 지시어를 통해 이루어진다.


ssh 클라이언트 연결 요청이 있으면 서버는 먼저 지원되는 인증 방법 목록으로 응답한다. 이 목록은 sshd 서버에서 지원하는 인증 방법과 이러한 방법이 시도되는 시퀀스를 나타낸다. 클라이언트는 이러한 인증 방법을 하나 이상 생략할 수 있다. 클라이언트에서 방법이 시도되는 시퀀스를 변경할 수도 있다. 이렇게 하려면 클라이언트 구성 파일 /etc/ssh/etc/ssh_config의 구성 지시어를 사용한다.


Secure Shell에서 지원하는 인증 방법은 다음과 같이 요약되어 있다.


GSS-API(Kerberos 기반 클라이언트 인증)


Kerberos 기반 클라이언트 인증인 GSS-API(Generic Security Sservice application Programming Interface)를 사용하는 경우 클라이언트가 미리 Kerberos 자격 증명을 받아야 하며, 해당 클라이언트 디렉토리에 Kerberos 구성 파일이 있어야 한다.


클라이언트는 sshd 데몬과 연결될 대 연결 시 자격 증명을 제공한다.


서버는 이러한 자격 증명을 이 특정 사용자의 자격 증명 복사본과 일치 시킨다.


또한 선택적으로 클라이언트 호스트 환경의 타당성을 설정할 수 있다.


② 공개 키 인증


공개 키 인증을 사용하려면 Secure Shell 환경에 다음 설정이 있어야 한다..


클라이언트와 서버 둘 다에 키 쌍이 있어야 한다. 모든 ssh 클라이언트와 모든 sshd 서버가 ssh-keygen 유틸리티를 사용하여 자체적으로 키 쌍을 생성해야 한다.


클라이언트는 통신해야 하는 모든 sshd 서버에 해당 공개 키를 알려야 한다. 이렇게 하려면 각 클라이언트의 공개 키를 모든 관련 서버의 미리 지정된 디렉토리에 복사한다.


클라이언트는 통신해야 하는 모든 서버의 공개 키를 구해야 한다. 클라이언트는 ssh-keyscan 유틸리티를 사용하여 공개 키를 받는다.


이 설정이 완료 되면 sshd 서버에 연결하는 ssh 클라이언트가 공개 키와 개인 키를 사용하여 인증된다.


Secure Shell은 공개 키 인증을 단순화하는 추가 기능을 제공한다. 일부 환경에서는 항상 암호 프롬프트에 응답할 필요가 없도록 설정할 수 있다. 둘 다 클라이언트 시스템에서 실행되는 ssh-agent ssh-add 프로세스를 조합해서 사용하면 암호에 응답하지 않아도 된다. 클라이언트는 ssh-add 유틸리티를 통해 ssh-agent 프로세스에 모든 키 정보를 등록한다. 그런 다음 클라이언트와 서버 간의 공개 키 인증은 sshd 데몬이 클라이언트와 상호 작용할 필요 없이 ssh-agent에 의해 수행된다.


③ 호스트 기반 및 공개 키 인증


호스트 기반 및 공개 키 인증은 보다 안전한 공개 키 인증 방법의 확장이다.


클라이언트와 서버 둘 다의 키 쌍이 있는 것 외에도 이 방법을 사용하면 클라이언트 환경에서 통신할 서버를 제한할 수 있다.


클라이언트의 홈 디렉토리에 .rhosts 파일을 만들어 이 제한을 구현한다.


④ 암호 인증


암호 인증 방법은 단일 사용자-ID 및 암호 기반 로그인을 사용한다. 이 로그인은 /etc/passwd에 지정된 사용자 로그인을 기반으로 하거나 PAM 기반일 수 있다.


Secure Shell은 서버 시스템에서 사용할 수 있는 PAM 모듈과 완전히 통합된다. 이목적을 위해 /opt/ssh/etc/sshd_config 파일에 UsePAM 구성 지시어가 있다. YES로 설정하면 클라이언트에서 암호 인증 요청이 있을 때마다 sshd PAM 구성 파일(/etc/pam.conf)을 확인한다. 그런 다음 구성된 PAM  모듈을 통해 암호 인증이 성공할 때까지 순서대로 수행한다.


PAM 인증을 무시하려면 UsePAM 지시어를 NO로 설정한다. 그러면 클라이언트에서 암호 인증 요청이 있을 때문다 sshd가 서버의 PAM 구성 설정을 무시한다. 대신 sshd gwtpwnam() 라이브러리 호출을 직접 호출하여 사용자 암호 정보를 가져온다.


Secure Shell PAM_UNIX, PAM_LDAP PAM_KERBEROS를 사용하여 테스트 되었다. 또한 PAM_DCE PAM_NTLM과 같은 다른 PAM 모듈에서 작동한다.


6) 통신 프로토콜


Secure Shell 사용자는 SSH-1 또는 SSH-2 프로토콜을 사용하여 원격 sshd 데몬과 연결할 수 있다. SSH-2가 더 안전하므로 SSH-1 대신 권장한다.


7) Secure Shell에서 사용하는 기능의 일부 목록


Secure Shell은 실제로 Shell이 아니라 호스트에서 인전하게 원격 shell 세션을 실행하기 위해 클라이언트와 원격 호스트 간에 보안 연결을 만드는 매커니즘이다. 보안 연결을 설정하기 위해 Secure Shell에서 인증과 세션 생성을 대부분 수행한다. Secure Shell에서 사용하는 기능의 일부 목록은 다음과 같다.


login 시도 기록


telnet 또는 remsh와 마찬가지로 Secure Shell은 성공한 세션과 실패한 세션을 각각 /var/adm/wtmp /var/adm/btmp 파일에 기록한다.


PAM 모듈


Secure Shell은 클라이언트 세션에 대해 PAM 인증을 사용할 수 있다. PAM 인증을 선택하면 Secure Shell /etc/pam.conf 파일을 사용하고 인증을 위해 해당 PAM 모듈을 호출한다.


/etc/default/security 파일 사용


로그인 동작 암호 및 기타 보안 구성을 정의하는 속성이 들어 있는 시스템 범위 구성 파일이다. 몇 가지 제한은 있지만 Secure Shell에서 이러한 속성을 사용할 수 있다.


Shadow passwd


Secure Shell Shadow passwd 기능과 통합된다.


⑤ 컨트롤 시스템 로그(syslog)


Secure Shell syslog를 사용하여 중요한 메시지를 남긴다.


⑥ 감사 로깅


Secure shell은 해당 코드로 감사 로깅(트러스트된 모드)을 구현했다.


8) 비밀번호 없이 SSH에 접속하는 방법


SSH 접속 시 비밀번호 없이 접속하는 방법은 다음과 같다.


ssh key 생성 (없는 경우만)


$ ssh-keygen -t rsa


서버로 로컬에서 만든 공개키 복사


$ scp ~/.ssh/id_rsa.pub [id]@[address]:id_rsa.pub


서버 접속 (일반접속)


$ ssh [id]@[address]


로그인 후 개인폴더에 .ssh 폴더 생성 (있으면 pass)


$ mkdir .ssh


.ssh폴더 권한 변경


$ chmod 700 .ssh


공개키 인증키 목록에 추가


$ cat id_rsa.pub >> .ssh/authorized_keys


필요없는 공개키 제거


$ rm -f id_rsa.pub


인증키 목록 권한 수정


$ chmod 644 .ssh/authorized_keys


서버 접속


$ ssh -i ~/.ssh/id_rsa [id]@[address]


1.13 NTP(Network Time Protocol) 설정


최근에는 서버/네트워크 장비에 대한 시간 동기화(타임서버 시간 동기화)하는 방법으로 NTP(Network Time Protocol)을 이용하여 루트 계정에서 시스템의 시각을 현재 시각으로 설정할 수 있다.


1) NTP 설명


NTP(Network Time Protocol) UDP 포트 123번을 사용

② 이 포트가 Open되어 잇지 않으면 NTP 서버와 동기화할 수 없음.

③ 8~10분 정도가 지난 후 서버와 클라이언트 간에 시간이 동기화 됨.


2) NTP 서버 구성


현재 Timezone / 시간 확인


현재 Timezone이 어떻게 설정 되었는지 확인한다. 하기 결과창에는 CDT , 북아메리카 Timezone으로 설정되어 있다.


$ date

Sat Mar 14 01:01:43 CDT 2015


한국에서 일반적으로 "KORST-9" Timezone을 사용하기 때문에 AIX 설치 시 기본적으로 설정되는 "CDT" Timezone "KORST-9"로 변경해준 후에 서버 재기동을 해야 한다.


Timezone을 변경하고, 다시 로그인을 하게 되면 Timezone KORST로 변경된 것을 확인할 수 있으나, 이는 실제 AIX에 적용된 값이 아닌 변경된 값을 보여 주는 것일 뿐이다. Timezone 변경 후, 반드시 재기동이 필요하다.


$ chtz "KORST-9"


NTP Server 설정


/etc/ntp.conf 파일을 하기와 같이 수정한다.


-첫번째로 참조한 Timeserver는 뒤에 prefer를 붙여줌.

-아래 ntp.conf 파일 상에서는 참조한 NTP_Server_IP 뒤에 prefer를 붙여 줬음.

-아래 설정파일을 해석해 보면, NTP_Server_IP를 첫번째로 참조하고, 두번째로 자기 자신의 Local clock을 참조하겠다고 설정한 것이다.


$ vi /etc/ntp.conf

#broadcast client

server NTP_server_IP prefer  #NTP Server IP as reference

server 127.127.1.0           #local clock as reference

fudge 127.127.1.0 stratum 0  #values for local clock

driftfile /etc/ntp.drift         #where to keep drift data

tracefile /etc/ntp.trace


xntpd daemon 확인


$ lssrc -a | grep -i xntpd

Xntpd    tcpip    inoperative


ntp 활성화 정보 확인


$ ntpq -nq

remote           refid      st t when poll reach   delay   offset  jitter

==============================================================================

 10.0.0.1         0.0.0.0      3 u    7   64    1    2.884  287.718   0.001

 127.127.1.0  127.127.0.1     16 u    -   64    0    0.000    0.000   0.000

 


NTP daemon 시작


동기화 과정에서 NTP Client 측에서 시간이 뒤로 돌아가는 것을 방지하기 위해서, Daemon 시작시, -X option을 준다. (Time backward 방지, 클라이언트 시간 흐름을 조절하여 동기화)


$ startsrc -s xntpd -a "-x"

0513-059 The xntpd Subsystem has been started. Subsystem PID is 6946978.


NTP daemon 확인


xntpd daemon 확인


$ lssrc -a | grep -i xntpd

Xntpd    tcpip    inoperative


ntp 활성화 정보 확인


$ ntpq -nq

remote           refid      st t when poll reach   delay   offset  jitter

==============================================================================

 10.0.0.1         0.0.0.0      3 u    7   64    1    2.884  287.718   0.001

 127.127.1.0  127.127.0.1     16 u    -   64    0    0.000    0.000   0.000

 



3) NTP 클라이언트 구성


현재 Timezone / 시간 확인


Timezone NTP Server와 동일하게 맞춰 줌.

xntpd Server / Client 1000(16) 이상 차이가 나면 더 이상 동기화 하지 않는다.

NTP Server / Client간 시간을 맞추기 위해, Client단에서 #smitty date 명령어를 통해 16분 이상 차이가 나지 않게 설정해 준다. (권장사항은 NTP Server와 가장 근소한 시간으로 맞추는 것)


NTP Client 설정


$ vi /etc/ntp.conf

#broadcast client

server NTP_server_IP prefer  #NTP Server IP as reference

 

driftfile /etc/ntp.drift         #where to keep drift data

tracefile /etc/ntp.trace


참조하고자 하는 NTP Server IP Server 항목에 입력


NTP daemon 시작


동기화 과정에서 NTP Client 측에서 시간이 뒤로 돌아가는 것을 방지하기 위해서, Daemon 시작시, -X option을 준다. (Time backward 방지, 클라이언트 시간 흐름을 조절하여 동기화)


$ startsrc -s xntpd -a "-x"

0513-059 The xntpd Subsystem has been started. Subsystem PID is 6946978.


NTP daemon 확인


대부분의 경우 Reach 값이 377에 다다르면 동기화가 완료된다.

보통 6~10분 사이에 동기화되며, 바로 시간을 맞추려면 NTP 서버가 active인 상태에서 클라이언트 단에서 "$ ntpdate <ip_of_NTP_Server>" 또는 "setclock <NTP_Server_Hostname>" 명령어를 수행해 주면 된다.

ntpupdate 명령어 수행 후 xntpd daemon을 재기동해 준다.


4) 재기동시에도 NTP 자동실행 설정


/etc/rc.tcpip 파일 수정


start /usr/sbin/xntpd "$src_running" "-x"


AIX default 설정 상에는 xntpd이 자동 실행으로 설정이 되어 있지 않음.

/etc/rc.tcpip 파일에서 xntpd와 관련된 라인의 주석을 해제하고 위의 명령어 형태로 수정.


5) 참고사항


xntpd를 이용하여 시간을 동기화 한 후 Time 서버의 시간을 바꾸면 전체 클라이언트의 시간이 바뀐다. Time 서버의 시간을 임시로 바꾸려면 Time 서버 단에서 xntpd를 정지 시킨 후($ stopsrc -s xntpd) 작업한다.


1.14 PAM 프로그래밍


아래 소스 코드는 PAM 모듈의 기본 형태로 "#if 0"으로 막혀 있는 부분에 통제를 할 수 있는 코드를 넣어 두면 원하는 동작(차단 또는 허용, 로그 기록)을 쉽게 처리할 수 있다.


/* pam_test.c */

 

#include <stdio.h>

#include <stdlib.h>

#include <security/pam_appl.h>

#include <security/pam_modules.h>

 

#ifdef PAM_MODULE_ENTRY

PAM_MODULE_ENTRY("pam_test");

#endif

 

#ifndef PAM_EXTERN

#define PAM_EXTERN extern

#endif

 

PAM_EXTERN int pam_sm_setcred(pam_handle_t *pamh, int flags, int argc, const char **argv) {

    return PAM_SUCCESS;

}

 

PAM_EXTERN int pam_sm_acct_mgmt(pam_handle_t *pamh, int flags, int argc, const char **argv) {

    return PAM_SUCCESS;

}

 

PAM_EXTERN int pam_sm_close_session(pam_handle_t *pamh, int flags, int argc, const char **argv) {

    return PAM_SUCCESS;

}

 

PAM_EXTERN int pam_sm_open_session(pam_handle_t *pamh, int flags, int argc, const char **argv) {

    return PAM_SUCCESS;

}

 

PAM_EXTERN int pam_sm_chauthtok(pam_handle_t *pamh, int flags, int argc, const char **argv) {

    return PAM_SUCCESS;

}

 

/* expected hook, this is where custom stuff happens */

PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh, int flags,int argc, const char **argv) {

#if 0

    // 아래 조건을 만족하지 못할 경우 로그인 실패로 처리함

    if (check_auth_pam(pamh) < 0)

        return PAM_PERM_DENIED;

#endif

    return PAM_SUCCESS;

}


위에 있는 pam_sm_...으로 된 함수들이 사용자가 임으로 추가한 함수가 아니라 PAM에서 기본 함수들로서 해당 함수 부분에 원하는 동작 코드를 넣도록 되어 있다.


PAM 모듈 자체가 기존에 동작하는 telnet이나, ssh, login 등의 바이너리에 동적 라이브러리 형태로 붙기 때문에 위 코드에 삽입한 코드들은 로그인과 동시에 해당 서버로의 접속자의 모든 상황들을 감시하고 제어할 수 있다.


1.15 PAM 컴파일 방법


PAM 인증 모듈은 Aix의 특성별 OS에서 제공하는 최적화 옵션에 따라 컴파일 하는 방법은 다음과 같다.


> sudo gcc -g -o baro-auth baro-auth.c -lc -ldl

> sudo gcc --std=gnu99 -Wall -O2 -g -fPIC -c -g -fno-strict-aliasing -I/usr/include -o base64.o base64.c

> sudo gcc --std=gnu99 -Wall -O2 -g -fPIC -c -g -fno-strict-aliasing -I/usr/include -o xxtea.o xxtea.c

> sudo gcc --std=gnu99 -Wall -O2 -g -fPIC -c -g -fno-strict-aliasing -I/usr/include -o pam_baro_auth.o pam_baro_auth.c

> sudo gcc -shared -g -o pam_baro_auth.so pam_baro_auth.o base64.o xxtea.o -lpam -L/user/lib64 -lssl -lcrypto -ldl -lz -lc -lcfg -lodm -lm

> chmod 555 pam_baro_auth.so

> chown root pam_baro_auth.so


PAM 프로그램 컴파일할 때 반드시 sudo 명령어를 사용하여 컴파일 해야 한다. 그렇지 않으면 다음과 같은 오류가 발생한다.



Oct 25 17:26:34 project sshd[11609]: open_module: module /usr/baropam/pam_baro_auth.so writable by group

Oct 25 17:26:34 project sshd[11609]: load_modules: can not open module /usr/baropam/pam_baro_auth.so


sudo 명령어는 유닉스 및 유닉스 계열 운영 체제에서 다른 사용자의 보안권한과 관련된 프로그램을 구동할 수 있게 해주는 프로그램이다.


이것은 substitute user do (다른 사용자의 권한으로 명령을 이행하라, 는 뜻이다.) 의 줄임말이다.


기본적으로 Sudo는 사용자 비밀번호를 요구하지만 루트 비밀번호(root password)가 필요할 수 도 있고, 한 터미널에 한번만 입력하고 그 다음부터는 비밀번호가 필요 없다.


Sudo는 각 명령줄에 사용할 수 있으며 일부 상황에서는 관리자 권한을 위한 슈퍼유저 로그인(superuser login)을 완벽히 대신하며, 주로 우분투, 리눅스와 애플의 OS X 에서 볼 수 있다.


참고로 PAM 프로그램 컴파일할 때 필요한 기본적인 환경변수인 PATH(명령어 입력시 경로를 입력하지 않고 실행가능), LIBPATH(외부 라이브러리를 링크할 때 참조할 경로)를 다음과 같이 설정한다.


export LIBPATH=$LIBPATH:/opt/freeware/lib:/usr/lib64:

export PATH=$PATH:/usr/bin:/etc/alternatives



PAM을 컴파일하기 위해서는 암복호화 모듈에 "openssl" 라이브러리를 사용하므로 반드시 "openssl"을 다음과 같은 명령어로 설치해야 한다.


> installp -ac -Y -d . openssh.base openssl.base openssl.man.en_US openssh.man.en_US


1.16 PAM 테스트 방법


PAM 프로그램 컴파일 또는 PAM 구성 환경 변경 후 sshd restart하지 않고 테스트 할 수 있는 방법은 다음과 같이 진행 할 수 있다.


1) sshd 데몬 기동하기


sshd 데몬(22000 포트)을 디버깅 모드로 띄우기 위하여 다음과 같은 명령어를 수행한다.


> /usr/sbin/sshd -D -p22000 -d


2) ssh로 접속하기


sshd 데몬(22000 포트) ssh로 접속하기 위하여 다음과 같은 명령어를 수행한다.


> ssh -vvv -p22000 root@1.234.83.169


2. BaroPAM 소개

 

2.1 BaroPAM 개요


웹 서버, AP서버, DB서버, 네트워크 장비, 보안장비, 저장장치, 기타장비 등 수 십에서 수 백 대의 정보자산을 관리하는 IT 기업의 운영자들은 어플리케이션의 계정 이외에도 정보자산에 대한 운영체제에 존재하는 여러 계정들에 대한 비밀번호도 관리해야 한다.


개인 사용자들의 계정과 비밀번호와는 달리 정보자산에 대한 운영체제의 계정은 유출될 경우 보안 관점에서 매우 치명적인 문제가 발생할 수 있기 때문에 특별하게 관리되어야 한다.


비밀번호의 관리 문제로 인해 여러 비밀번호 관리 솔루션 들이 출시 되었지만 비밀번호가 복호화 가능한 암호화 기법으로 DB에 저장된다는 점에서 컴플라이언스 측면의 문제가 있다. 단지 비밀번호 관리의 편의성만을 강조한 솔루션들이기 때문이다.


때문에 2차 인증(2 Factor/2 Channel 인증)이 추가적으로 적용되어야 한다. 그래서 2013 12월 개정된 금융감독 규정에 정보처리시스템의 계정으로 접속 시 2차 인증 의무화가 명시 되어 있다.


하지만 법의 모호함은 SAC(System Access Control) 서버에 접속할 때 2차 인증을 정보자산에 대한 계정의 접속 시 2차 인증으로 인정할 것인가라는 논란 거리를 만들고 있다.


하지만 분명히 "정보자산에 대한 계정의 접속" 2차 인증 적용이기 때문에 SAC 접속할 때 2차 인증은 인정받지 못할 가능성이 높다.



2 Factor 인증은 기존의 "지식기반 인증" ID/Password 인증에 다른 요소 즉 소유기반 인증 및 생체인증 요소를 추가한 인증 기법을 말한다.


2 Factor 인증기법은 인증 과정이 추가하면 ID/Password를 알고 접속하려는 사용자에게 2차 인증 키(일회용 인증키)나 지문 등의 추가 인증을 요구함으로써 스니핑과 같은 ID/Password 유출에 의한 공격을 방어할 수 있다. 하지만 최근에는 APT 공격 등에 의해 단순한 2 Factor 인증(2차 인증) 기법이 무력화 되는 경우가 발생하기도 한다.


특히 웹 서비스나 스마트폰 기반의 서비스는 이러한 단순한 2차 인증(2 Factor 인증)만으로는 해킹을 방어하지 못하는 사례가 발생하기도 한다. 그 이유는 바로 메모리 해킹 때문이다. PC나 스마트폰에 설치된 악성코드가 사용자가 입력한 2차 인증 정보 혹은 인증 후 실 거래 발생 시 거래 정보를 암호화하여 네트워크로 전송하기 직전에 거래 정보를 가로채 변조하는 고도의 프로그래밍 기술을 적용한 악성코드를 사용하기 때문이다.



2 Channel 인증은 2 Factor 인증을 포함한다고 보는 것이 일반적이며 인증과 서비스를 수행하는 통신선로를 서비스 채널과 인증채널로 물리적으로 분리하는 것이 특징이다.


즉 서비스를 사용하는 PC/스마트폰의 통신 채널과 서비스에 모두 사용하는 것이 아니라 PC가 서비스 채널인 경우 ARS(전화) 혹은 스마트폰 앱 등을 통해 서비스를 사용하는 PC 와는 물리적으로 다른 채널을 형성하여 2차 인증을 수행하는 것이다. 이렇게 서비스 채널과 인증 채널을 물리적으로 분리함으로써 해커에 의해 PC 혹은 스마트폰이 장악 되더라도 해커가 서비스에 접근할 수 없게 된다.


여기서 한걸음 더 나아간다면 금융거래나 구매 거래 시 관련 데이터를 2 채널 인증에 의해 확립된 2개의 채널로 분리하여 전송한 뒤 결제 시스템에서 조합하여 거래를 완성 시키는 2 채널 서비스 구성도 검토해 볼 수 있겠다.



정보자산에 접근하는 사용자(여기서 사용자는 운영체제의 계정을 이용하여 정보자산에 telnet, ftp, ssh, sftp, rlogin 등을 통해 접근하는 사용자를 말한다)에 대한 통제를 "정보자산 접근 제어"라고 한다. 하지만 실제로는 정보자산에 웹 브라우저를 통하든, DB 클라이언트 툴을 통하든 정보자산에 접근하는 모든 접근을 포함하는 것이 더 적절하다고 하겠다.


정보자산에 대한 접근 제어를 수행할 수 있는 솔루션으로는 "게이트웨어 방식의 정보자산에 대한 접근 제어 솔루션" "정보자산에 대한 보안 S/W" 두 가지가 있다. 두 가지의 가장 큰 차이는 접근 제어를 위해 어떠한 기술적 방식을 채용 했느냐다.


게이트웨어 방식의 정보자산에 대한 접근제어 솔루션은 사용자들이 telnet 등을 통해 정보자산에 접근하기 위해서 정보자산에 대한 접근 통제 서버를 경유하여 정보자산에 로그인 형태로 구현된다. 때문에 접근 대상이 되는 정보자산들이 존재하는 네트워크의 네트워크 장비의 설정을 변경해 주어야 한다. 그 이유는 ssh, sftp 등의 명령어나 클라이언트 툴(Putty, SecureCRT, SecureFX, ALFTP, 파일질라 등)을 사용자 PC에서 직접 실행하여 정보자산에 로그온하지 못하도록 해야 하기 때문이다.



그리고 아래의 그림처럼 동일한 네트워크(서브넷)에 있는 정보자산들간의 ssh 등을 차단할 수 있는 대책이 강구되어야 한다. 만약 사용자1이 정보자산1에는 들어갈 권한이 있지만 이러한 기능이 지원되지 않는 장비에 물려 있다면 통제할 방법이 없게 된다.


게다가 정보자산에 대한 운영체제 입장에서는 모든 사용자 계정이 하나의 IP에서 접속하는 것으로 인식되기 때문에 TCP래퍼나 IPTables과 같은 정보자산 자체의 보안 도구를 이용해 2차 접근제어(안전을 위해)를 할 수가 없다.


또한 게이트웨어 방식의 경우 사용자가 정보자산에 로그온 한 뒤 주요 파일에 대한 접근제어나 su, 특정 포트의 바인딩을 수행할 수가 없다. 간혹 "명령어 통제"가 된다고 이야기하지만 명령어 실행을 단순히 키보드에 입력된 문자열 기반으로 통제하는 왕~초보적인 수준이기 때문에 실상 "파일접근통제(실행, 수정, 삭제 등~)"라고 할 수는 없다.


사용자 행위 감사 측면에서도 콘솔에서 작업한 내용과 접근통제 정보자산을 통하지 않은 접근에 대해서는 원천적으로 감사로 그 기록이 불가능하며 또한 중요 파일에 대한 접근 감사도 불가능하다.


아무래도 게이트웨어 방식의 네트워크 수준의 접근제어 솔루션이기 때문에 기능적으로 부족한 면이 많은 것이 사실이다. 하지만 정보자산에 "무언가"를 설치하지 않아도 된다는 장점 때문에 기타 부족한 점들이 많고 취약점도 많지만 많은 업체에서 게이트방식을 선호하기도 한다.


많은 보안 솔루션들 특히 정보자산에 대한 접근제어 솔루션(SAC, System Access Control)들이 2 Factor/2 Channel 인증을 제공하고 있다. 하지만 네트워크 수준에서 2 Factor/2 Channel 인증을 수행할 경우 제대로 된 2 Factor/2 Channel 인증을 수행할 수 없다.



위의 개념도에서 알 수 있듯 네트워크 수준에서 수행하는 정보자산에 대한 접근제어의 2차 인증은 사용자와 정보자산에 대한 접근 제어 장비까지의 구간만 2차 인증이 수행되고 실제 정보자산에 접근하는 접속 세션에서는 여전히 ID Password에 기반한 단순한 인증만이 수행된다.


게다가 비밀번호의 관리 편의성을 높이고 사용자가 정보자산의 계정에 대한 Password를 알지 못하게 하기 위해 정보자산에 대한 접근제어 정보자산에 "복호화가 가능한" 형태로 모든 정보자산의 계정에 대한 Password를 저장한다. 이는 "Password는 복호화가 불가능한 형태로 암호화" 해야 한다는 가장 기본적인 보안 규정을 어기는 중대한 보안 취약성이다. 개인정보보호법에는 사용자의 비밀번호는 복호화가 불가능한 단방향 암호화를 하도록 명시되어 있음을 유의해야 한다.


정보자산에 대한 2 Factor 인증 및 2 Channel 인증은 정보자산에 대한 운영체제의 자체 인증 과정에 추가하여 적용되어야만 우회 접속 및 여러 인증 취약성 공격 기법에서 자유로울 수 있다. 관리의 편의성 만을 생각한다면 모를까 제대로 된 정보자산에 대한 접근 통제를 하기 위해서는 필수적으로 운영체제에 추가적인 인증 모듈을 적용하여야 한다.


Unix/Linux의 경우 운영체제에서 PAM(Pluggable Authentication Module)이라는 2 Factor/2 Channel 인증을 적용할 수 있는 모듈을 제공하며, Windows의 경우 GINA/CP라는 추가 인증을 적용할 수 있는 모듈을 제공하고 있다. 그럼에도 불구하고 개발의 편의성, 관리의 편의성은 증대될지 모르나 실질적인 보안 강화 효과는 그다지 기대하기 어렵다고 볼 수 있다.


또한 수 많은 정보자산을 운용하며 Password 관리에 골치를 앓고 있는 기관과 기업의 어려움을 파고들어 제대로 된 보안 강화 솔루션이 아닌 보안 강화 효과도 별로 없는 솔루션을 공급하는 것은 상도덕에도 어긋난다고 할 수 있다.


사실 특정 보안 솔루션만으로 모든 보안 취약성을 커버할 수는 없는 것이 사실이다. 해킹은 지속적이고 지능적으로 변화하고 있으며 네트워크 기반의 보안 만으로는 더 이상 서버에 저장된 정보를 보호할 수 없다.


개인정보를 비롯한 기관과 기업의 중요 데이터는 "정보자산"에 저장되어 있다. 정보자산의 보안을 강화하지 않고 길목인 네트워크에서 어떻게든 보안을 강화해보려는 구태의연한 보안은 이제 더 이상의 효과를 볼 수 없는 현실을 직시해야 한다. 아울러 외부로부터의 해킹이 아닌 내부 관리자/운영자들에 대한 통제를 빠르고 안정적인 "서비스 개발과 운영"을 핑계로 계속 미룰 경우 지금과 같은 해킹 대란은 계속 발생하고 보안 예산의 낭비는 계속될 수 밖에 없다.


정보자산에 대한 보안S/W는 정보자산의 박스(H/W)에 접근하는 IP/Port의 물리적 접근은 물론 정보자산에 TCP 세션을 맺고 로그인하는 행위, 로그인한 뒤 수행하는 모든 행위에 대한 접근통제가 가능한 유일한 보안솔루션이다.


당연히 이 포스트의 핵심인 정보자산에 대한 접근제어 기능도 정보자산에 대한 보안S/W가 갖고 있는 기본 기능의 하나며 게이트웨어 방식의 정보자산에 대한 접근제어 솔루션이 등장하기 10여년 전부터 보급되고 있다. 그리고 정보자산에 대한 보안S/W가 갖고 있는 정보자산에 대한 접근제어 기능은 계속 진화하여 공인인증 기능이 추가되었고 공인인증을 받고 접속한 사용자에게만 특정 파일에 대한 접근(읽기/수정/삭제 등)을 허용할 수 있는 "자연인 기반의 파일접근 통제"까지도 가능하도록 진화되어 있다.


정보자산에 대한 보안S/W의 정보자산에 대한 접근제어 구성을 살펴보면 다음 그림과 같다.



정보자산에 대한 S/W의 정보자산에 대한 접근제어는 망구성이나 네트워크 장비의 설정 변경 등의 작업이 필요 없다. 게다가 정보자산에 설치된 정보자산에 대한 S/W가 직접통제를 수행하기 때문에 동일 네트워크상의 정보자산을 통해 수행할 수 있는 우회접근이 원천적으로 차단되며 부수적으로 콘솔에서의 행위도 모두 감사로그 기록이 가능하고 화면에는 보이지 않는 (예를 들면 스크립트를 실행할 때 화면에 표시되지 않고 내부적으로 실행되는) 명령어나 파일접근도 모두 로깅이 가능한 장점이 있다.


또한 게이트웨어 방식의 경우 정보자산에 대한 운영체제의 로그인 히스토리에 모두 게이트웨어 정보자산의 IP가 기록된다. 이는 정보자산에 로그인한 실제 사용자 PC IP를 정보자산에서는 정작 확인할 수 없다는 것을 뜻한다. 이는 정보자산에 대한 운영체제의 감사로그를 무용지물로 만드는 것이다.


게다가 게이트웨어 장비에 등록된 사용자의 접속ID가 탈취당할 경우 해당ID가 갖고 있는 정보자산의 접근 권한을 한꺼번에 탈취당하는 상황이 발생할 수도 있다. 실제로 게이트웨어 방식의 정보자산에 대한 접근제어 솔루션은 게이트웨어 서버에 로그인할 때 한번 인증을 받으면 실제 정보자산에 접근할 때는 IP/Password를 자동으로 인증하는 기능을 제공하고 있다. 이는 게이트웨어 방식의 정보자산에 대한 접근제어 솔루션이 보안에 더욱 취약할 수 있다는 것을 의미하기도 한다.


하지만 분명한 것은 정보자산에 대한 접근제어 기능 측면에서 정보자산에 대한 S/W가 게이트웨어 방식에 비해 훨씬 기술적인 장점이 많다는 점이다. 물론 네트워크 관점에서 바라볼 때 정보자산에 대한 접근제어 시스템을 구축하는 것은 게이트웨어 방식이 훨씬 쉽다는 장점이 있다. 정보자산마다 무언가를 설치하지 않아도 되기 때문이다.


하지만 논리적인 망구성의 변경이나 우회경로가 쉽게 뚫릴 수 있다는 점 그리고 자칫 게이트웨어 서버의 접근 계정이 유출되면 더 큰 문제가 발생할 수 있다는 점 게다가 게이트웨어 서버의 장애 발생 시 전체 정보자산에 접근이 불가능해지고 사용자들이 정보자산에 접근하기가 많이 불편해지는 점 등 네트워크 기반에서 정보자산에 대한 접근제어를 바라볼 때문에 발생할 수 있는 문제점에 대해 신중하게 검토하여야 한다.


BaroPAM 솔루션은 Windows/Mac/Linux/Unix의 운영체제에서 2차 인증으로 2세대 인증키(소프트 인증키)를 접목시켜 중앙 집중적 인증 메커니즘을 지원하는 단순하면서도 강력한 정보자산(Windows, Mac, 서버, 데이터베이스, 네트워크장비, 보안장비, 저장장치 등)의 접근제어 솔루션입니다.



2.2 BaroPAM 아키텍처


BaroPAM 솔루션의 아키텍처는 다음과 같다.



2.3 BaroPAM 인증 절차


BaroPAM 솔루션의 인증 절차는 PAM인증 절차에 2차 인증으로 일회용 인증키(소프트 인증키, 2세대 인증키)를 추가 하였다.



2.4 BaroPAM 특장점


BaroPAM의 특장점은 다음과 같다.


512bit 표준해쉬함수(HMAC-SHA512) 사용(인터넷 보안 표준인 IETF RFC 6283)

■ 금융감독원에서 권장하는 Time-sync 방식

■ 동적 HMAC Key 방식

■ 인증서버가 별도로 필요하지 않는 소프트웨어 방식(2세대 인증키, 소프트 인증키)

■ 정보자산별, 계정별로 일회용 인증키 및 인증키 생성주기(3~60) 개별 부여

■ 스마트 폰을 인증매체로 사용하므로 휴대성 및 편의성 극대화

2차 인증의 일회용 인증키 지원

Hard 인증키와는 달리 Soft 인증키(2nd 인증키)로 영구적 사용가능

PAM + 2차 인증(BaroKEY) + 이상접속 탐지/차단(BaroIDS) 방식의 정보자산 접근 제어

■ 기존 네트워크 장비의 설정 변경이 필요 없음

2차 인증에서 허용 또는 제외할 수 있는 계정에 대한 ACL기능 제공

■ 인증 키를 대신 사용할 수 있는 응급 스크래치 코드 제공

■ 다양한 응용프로그램 및 연동 개발의 편의성 제공(Java, C 언어로 된 API 연동)


2.5 BaroPAM의 3단계 인증 정책


모든 정보자산에 대한 2차 인증 정책은 선택이 아닌 반드시 필수로 적용되어야 할 보안 대비책으로 이로 인하여 보다 안전하게 정보자산을 보호할 수 있다.



2.6 BaroPAM의 3단계 보안 전략


BaroPAM 솔루션의 보안 전략은 3단계로 구성되며, 1단계는 전형적인 기본 보안(ID/Password), 2단계는 일회용 인증키를 적용한 보안, 3단계는 이상접속 탐지 및 차단을 통한 불법적인 정보자산의 접속 제어로 구성되어 있다.



2.7 BaroPAM 구성


BaroPAM 솔루션은 다음과 같이 BaroKEY, BaroPAM, BaroIDS를 접목시킨 정보자산에 대한 접근제어 2차 인증 및 이상접속 탐지/차단 시스템으로 구성되어 있다.



2.8 BaroPAM 처리 Flow


BaroPAM 솔루션의 정보자산 접근제어 2차 인증에 대한 시스템 Flow는 다음과 같이 처리된다.



Mac/Linux/Unix 서버 로그인 시 로그인-ID를 입력한 후 BaroPAM 앱에서 일회용 인증키를 생성한다. 생성한 일회용 인증키와 비밀번호를 입력하여 Mac/Linux/Unix 서버에 로그인 한다.



 

3. BaroPAM 설치


3.1 BaroPAM 설치 전 준비사항



PAM 모듈을 사용하기 위해서는 기본적으로 PAM 패키지가 반드시 설치되어 있어야 한다. 설치 확인은 다음의 명령어를 실행하여 확인한다.


[root] /root > ls /usr/lib/security

32                      pam_authtok_check.so    pam_krb5_keytab.so.1    pam_tty_tickets.so

64                      pam_authtok_check.so.1  pam_krb5_migrate.so     pam_tty_tickets.so.1

amd64                   pam_authtok_common      pam_krb5_migrate.so.1   pam_unix_account.so

audit_binfile.so        pam_authtok_get.so      pam_krb5_only           pam_unix_account.so.1

audit_binfile.so.1      pam_authtok_get.so.1    pam_krb5_optional       pam_unix_auth.so

audit_remote.so         pam_authtok_store.so    pam_ldap.so             pam_unix_auth.so.1

audit_remote.so.1       pam_authtok_store.so.1  pam_ldap.so.1           pam_unix_cred.so

audit_syslog.so         pam_deny.so             pam_list.so             pam_unix_cred.so.1

audit_syslog.so.1       pam_deny.so.1           pam_list.so.1           pam_unix_session.so

crypt_bsdbf.so          pam_dhkeys.so           pam_passwd_auth.so      pam_unix_session.so.1

crypt_bsdbf.so.1        pam_dhkeys.so.1         pam_passwd_auth.so.1    pam_user_policy.so

crypt_bsdmd5.so         pam_dial_auth.so        pam_rhosts_auth.so      pam_user_policy.so.1

crypt_bsdmd5.so.1       pam_dial_auth.so.1      pam_rhosts_auth.so.1    pam_zfs_key.so

crypt_sha256.so         pam_gss_s4u             pam_roles.so            pam_zfs_key.so.1

crypt_sha256.so.1       pam_gss_s4u.so          pam_roles.so.1          pkcs11_kernel.so

crypt_sha512.so         pam_gss_s4u.so.1        pam_sample.so           pkcs11_kernel.so.1

crypt_sha512.so.1       pam_krb5.so             pam_sample.so.1         pkcs11_softtoken.so

crypt_sunmd5.so         pam_krb5.so.1           pam_smbfs_login.so      pkcs11_softtoken.so.1

crypt_sunmd5.so.1       pam_krb5_first          pam_smbfs_login.so.1    pkcs11_tpm.so

pam_allow.so            pam_krb5_keytab         pam_tsol_account.so     pkcs11_tpm.so.1

pam_allow.so.1          pam_krb5_keytab.so      pam_tsol_account.so.1


정보자산에 접속하여 PAM 모듈을 사용하기 위해서는 신뢰성 있고 안전한 telnet, ftp 서비스를 제공하기 위하여 OpenSSH(Open Secure Shell) 패키지가 반드시 설치되어 있어야 한다. 설치 확인은 다음의 명령어를 실행하여 확인한다. 만약, 설치되어 있지 않으면 " installp -ac -Y -d . openssh.base openssl.base openssl.man.en_US openssh.man.en_US " 명령어로 설치하면 된다.


[root] /root > ssh -V or lslpp -i openssh.base.server

Sun_SSH_2.2, SSH protocols 1.5/2.0, OpenSSL 0x1000110f


BaroPAM 인증 모듈을 다운로드 및 설치하기 위해서 root 계정으로 접속한 후 모듈을 다운로드 및 설치하기 위한 디렉토리(/usr/baropam)를 다음과 같이 생성한다.


[root]# mkdir /usr/baropam


BaroPAM 모듈을 다운로드 및 설치하기 위한 디렉토리의 권한(읽기, 쓰기, 실행)을 다음과 같이 부여한다.


[root]# chmod -R 777 /usr/baropam


3.2 BaroPAM 설치 모듈 다운로드


BaroPAM 인증 모듈은 root 계정으로 접속한 후 모듈을 다운로드 및 설치하기 위한 디렉토리(/usr/baropam)로 이동하여 모듈을 다운로드 하는 방법은 다음과 같다.


[root] /usr/baropam > wget http://nuriapp.com/download/libpam_baro_auth-x.x.tar


BaroPAM인증 모듈의 다운로드가 완료되면 tar 파일의 압축을 해제하는 방법은 다음과 같다.


[root] /usr/baropam > tar -xvf libpam_baro_auth-x.x.tar


BaroPAM 인증 모듈의 압축을 해제하면 baropam 디렉토리에 다음과 같은 BaroPAM 관련 모듈이 생성된다.


[root] /usr/baropam > ls -al

합계 180

drwxrwxrwx  7 root root   4096  8 23 09:59 .

drwxr-xr-x 17 root root   4096  2 10  2017 ..

-rw-r--r--  1 root root      8  6 22 14:51 .baro_acl

-r--r--r--  1 root root    279  8 23 09:59 .baro_auth

-rwxr-xr-x  1 root root  43996  8 21 07:06 baro_auth

-rwxr-xr-x  1 root root 115780  8 21 10:02 pam_baro_auth.so

-rw-r--r--  1 root root    192  8 21 07:08 setenv.sh


PAM에 사용되는 Library/usr/lib/security에 위치하는지, 아니면 Symbolic link(링크를 연결하여 원본 파일을 직접 사용하는 것과 같은 효과를 내는 링크)로 다음과 같이 지정해야 적용 할 수 있다.

 

[root] /usr/baropam > ln –s /usr/baropam/pam_baro_auth.so /usr/lib/security/pam_baro_auth.so


3.3 BaroPAM 환경 설정 파일 생성




BaroPAM 환경 설정 파일의 설정 항목에 대한 내용은 다음과 같다.


항목

설명

설정값

비고

AUTH_KEY

인증 구분자(고정)

 

 

RATE_LIMIT

제한 횟수(1~10), 제한시간(, 15~600) 설정.

3 30

 

KEY_METHOD

인증키 생성 방식(app1,app256,app512: 어플, card1,card256,card512: 인증카드)

app512

 

CORR_TIME

인증키 보증오차시간()

0

 

CYCLE_TIME

인증키 생성주기(, 3~60)

30

 

SECURE_KEY

Secure key(라이선스 키)

WSa1MUyG+aaiJ1JS/uqtXuBSoRBIIZOL

 

HOSTNAME

정보자산 호스트명(uname –n)

nurit.co.kr

 

ACL_TYPE

2차 인증에서 허용(allow) 또는 제외(deny) 구분

deny

 

ACL_NAME

2차 인증에서 허용 또는 제외할 계정에 대한 ACL Filename(파일 접근권한은 444)

/usr/baropam/.baro_acl

 

WINDOW_SIZE

현재 시간을 기준으로 일회용 인증키의 보정시간(-7~7)

17

 


주의) –s 옵션의 filename PAM 환경 설정 파일명(파일 접근권한은 444)이며, 설정한 정보자산 호스트명(hostname)이 맞지 않는 경우 BaroPAM이 정상적으로 작동되지 않을 수 있으니, 호스트명(hostname)가 변경되는 경우 반드시 환경 설정의 해당 항목에 반영해야 한다.



사용 예)

[root] /usr/baropam > /usr/baropam/baro_auth -r 3 -R 30 -t 30 –c 0 –k app512 -H qsh-0415.cafe24.com -A deny -a /usr/baropam/.baro_acl -S 33DC7131EFD4E2E957B1798AB7A5A33E454EB37A9048CA26 -s /usr/baropam/.baro_auth


만약, 계정마다 BaroPAM 환경 설정파일을 각각 설정하는 경우 해당 계정으로 접속하여 작업을 진행한다.(Not root)


[root] /usr/baropam > /usr/baropam/baro_auth -r 3 -R 30 -t 30 –c 0 –k app512 -H qsh-0415.cafe24.com -A deny -a ~/.baro_acl -S 33DC7131EFD4E2E957B1798AB7A5A33E454EB37A9048CA26 -s ~/.baro_auth


1) Your emergency scratch codes are :



 긴급 스크래치 코드는 일회용 인증키 생성기인 BaroPAM 어플을 사용할 수 없을 때 분실한 경우를 대비하여 SSH 서버에 다시 액세스하는데 사용할 수 있는 접속이 가능한 Super 인증키 이므로 어딘가에 적어 두는 것이 좋다.


2) 다음에 나오는 물음에 대해서는 모두 "y"를 입력한다.


   중간자(man-in-the-middle) 공격을 예방할 것인가? y

   같은 일회용 인증키는 하나의 계정 외에 다른 계정에도 로그인이 가능하게 할 것인가? y

   일회용 인증키의 제한 시간을 30초로 지정할 것인가? y


BaroPAM 환경 설정 파일인 .baro_auth의 설정한 내용은 다음과 같다.


[root] /usr/baropam > cat .baro_auth

" AUTH_KEY

" RATE_LIMIT 3 30

" KEY_METHOD app512

" CORR_TIME 0

" CYCLE_TIME 30

" SECURE_KEY 33DC7131EFD4E2E957B1798AB7A5A33E454EB37A9048CA26

" ACL_NAME /usr/baropam/.baro_acl

" ACL_TYPE deny

" HOSTNAME qsh-0415.cafe24.com

" WINDOW_SIZE 17

" DISALLOW_REUSE

33458936

19035576

15364353

54649370

84342192




3.4 BaroPAM 환경 설정


BaroPAM 모듈을 설정하기 위해서 sshd 파일에 설정하는 방법은 다음과 같이 최 상단에 입력해 준다.


[root] /usr/baropam > vi /etc/pam.conf

#

# Authentication

#

sshd auth required /usr/lib/security/pam_baro_auth.so nullok secret=/usr/baropam/.baro_auth

#

# Account Management

#

sshd account required /usr/lib/security/pam_aix

#

# Password Management

#

sshd password required /usr/lib/security/pam_aix

#

# Session Management

#

sshd session required /usr/lib/security/pam_aix


만약, 계정마다 BaroPAM 환경 설정파일을 각각 설정하는 경우 BaroPAM 모듈을 설정하기 위해서 sshd 파일에 설정하는 방법은 다음과 같이 최 상단에 입력해 준다.


[root] /usr/baropam > vi /etc/pam.conf

#

# Authentication

#

sshd auth required /usr/lib/security/pam_baro_auth.so nullok secret=${HOME}/.baro_auth

#

# Account Management

#

sshd account required /usr/lib/security/pam_aix

#

# Password Management

#

sshd password required /usr/lib/security/pam_aix

#

# Session Management

#

sshd session required /usr/lib/security/pam_aix

  

* "nullok"BaroPAM이 설정되어 있지 않은 계정의 경우에는 2차 인증(일회용 인증키)을 생략한다는 의미이다.

 

[root] /usr/baropam > vi /etc/pam.cond

#%PAM-1.0

su    auth       required     /usr/baropam/pam_baro_auth.so nullok secret=/usr/baropam/.baro_auth

 

/etc/pam.cond 파일에 BaroPAM 모듈을 최 상단에 추가하면 "su" 명령어로 일반계정이 "root"로 권한 상승을 시도하는 경우에도 2차 인증(일회용 인증키) 입력을 적용할 수 있어서 보안이 한층 더 향상된다.

 

$ su - root

Verification code:

 

인증 유형을 PAM으로 설정하기 위하여 다음과 같은 명령어를 수행한다.


[root] /usr/baropam > chsec -f /etc/security/login.cfg -s usw -a auth_type=PAM_AUTH


또는


[root] /usr/baropam > vi /etc/security/login.cfg

usw:

shells = /bin/sh,/bin/bsh,/bin/csh,/bin/ksh,/bin/tsh,/bin/ksh93

maxlogins = 32767

logintimeout = 60

maxroles = 8

auth_type = PAM_AUTH

pwd_algorithm = md5


sshd 데몬 설정을 위한 설정 파일인 /etc/ssh/sshd_config 파일의 내용 중 다음과 같은 인자는 변경이 필요하다.


인자

기존

변경

비고

PasswordAuthentication

yes

no

 

ChallengeResponseAuthentication

no

yes

 

UsePAM

no

yes

 


sshd 설정이 끝나면 반드시 PAM 모듈이 제대로 추가되었는지 확인한 후 SSH Server Restart 작업이 반드시 필요하다.


[root] /usr/baropam > startsrc -g ssh or startsrc -s sshd


sshd 설정이 끝나면 반드시 PAM 모듈이 제대로 추가되었는지 확인한 후 시스템을 재부팅해야 한다.


BaroPAM모듈 사용 시 2차 인증에서 제외할 계정에 대한 ACL에 제외 해야 하는 경우 BaroPAM 환경 설정 시 설정한 디렉토리에 ACL 파일을 생성한 후 제외할 계정을 다음과 같이 입력한다. (.baro_acl에 대한 파일 접근권한을 444로 설정해야 한다.)


[root] /usr/baropam > vi .baro_acl

barokey

baropam


정보자산 시간이 현재 시간과 다를 경우 인증키와 매칭이 되지 않아 일회용 인증키가 맞질 않으므로 시간을 같게 시간 동기화 해야 한다.


최근에는 서버/네트워크 장비에 대한 시간 동기화(타임서버 시간 동기화)하는 방법으로 NTP(Network Time Protocol)을 이용하여 루트 계정에서 시스템의 시각을 현재 시각으로 설정할 수 있다. ("1.13 NTP(Network Time Protocol) 설정" 참조)


1) /etc/environment 파일에서 TZ 설정을 변경한다.

   ) 대한민국 시간으로 설정

   TZ=KORST-9

 

2) chtz 명령어로 설정을 바꿀 수도 있다.

   $ chtz 'KORST-9'




#Time setting

11 4 * * * /usr/bin/rdate -s time.simplexi.com; /sbin/hwclock --systohc

or

11 4 * * * /usr/bin/rdate -s time.bora.net;


네트워크 장비에 대한 시간이 현재 시간과 다를 경우 인증키와 매칭이 되지 않아 일회용 인증키가 맞질 않으므로 리눅스를 설치할 때 시간대(타임존;Timezone)를 맞추지 않으면, 컴퓨터 시계가 미국 태평양 시간인 PST로 나온다. (서머타임 기간에는 PDT.) 즉 캘리포니아 시간으로 나온다. 이것을 한국 표준시인 KST로 다음과 같이 변경해야 한다.


> ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

> date 112212292017.00


PAM구성 파일이 잘못 구성되거나 파일이 손상될 경우 사용자가 로그인하지 못하게 될 수 있다. sulogin 명령은 PAM을 사용하지 않으므로 시스템을 단일 사용자 모드로 부트하고 문제를 수정하려면 root 암호가 필요할 수 있다.


단일 사용자 모드로 부팅을 하는 이유는 다음과 같이 여러 가지가 있다.


1) / /usr 을 제외한 파일시스템을 fsck 로 검사하거나 치료할 때

2) 관리자(root) 패스워드를 잊어 버렸을 때

3) /etc/fstab 파일을 잘못 수정하여 부팅이 제대로 안될 때

4) 기타 critical한 파일을 잘못 설정하여 이를 되돌릴 때 등.


3.5 AIX 접속 방법


Putty로 접속할 때 보통 접속 과정과 동일하게 해주시면 되는데, 하나 설정해 주어야 할 것이 있다. 환경 설정에서 "connection -> SSH -> auth"에서 attempt "Keyboard-Interactive" auth(SSH-2)를 선택한 후 SSH 접속을 하면 된다.



Putty download Documentation 관련 자료는 다음 URL에서 찾을 수 있다.


https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html


putty인 경우)


"Verification code"를 입력하라는 메시지가 표시되면 BaroPAM 어플에서 생성한 일회용 인증키를 입력한다.


인증에 성공하면 다음과 같이 SSH 로그인 비밀번호를 입력 할 수 있다.




Mobile SSH인 경우)


"Verification code"를 입력하라는 메시지가 표시되면 BaroPAM 어플에서 생성한 일회용 인증키를 입력한다.


인증에 성공하면 다음과 같이 SSH 로그인 비밀번호를 입력 할 수 있다.



FileZilla인 경우)


FileZilla로 접속할 때 보통 접속 과정과 다른데, 상단 왼쪽 메뉴에서 "파일(F) -> 사이트 관리자(S)"를 선택하여 일반 탭 화면에서 "프로토콜(t):" 항목에서 "SFTP – SSH File Transfer Protocol""로그온 유형(L):" 항목에서 "인터랙티브"를 선택한 후 다음과 같이 "연결(C)" 버튼을 클릭한다.







그러면 다음과 같이 비밀번호 입력 화면이 나타난다. 비밀번호 입력 화면에서 "시도:" 내용을 확인하고, 스마트 폰에서 생성한 일회용 인증키를 "비밀번호(P):" 입력 항목에 입력한 후 "확인(O)" 버튼을 클릭한다.




그러면 다음과 같이 비밀번호 입력 화면이 나타난다. 비밀번호 입력 화면에서 "시도:" 내용을 확인하고, 로그인 계정에 대한 비밀번호를 "비밀번호(P):" 입력 항목에 입력한 후 "확인(O)" 버튼을 클릭하여 서버에 접속한다.






SFTP인 경우)


"Verification code"를 입력하라는 메시지가 표시되면 BaroPAM 어플에서 생성한 일회용 인증키를 입력한다.


인증에 성공하면 다음과 같이 SFTP 로그인 비밀번호를 입력 할 수 있다.




SecureFX Download Documentation 관련 자료는 다음 URL에서 찾을 수 있다.


https://www.vandyke.com/


결론적으로, 2차 인증은 추가 보호 계층을 추가하여 암호 인증을 보호하는 효과적인 수단이 될 수 있으며, 사용 여부와 상관없이 사용자의 선택에 달려 있지만 2차 인증의 채택은 산업의 동향 있다.


만약, Apr 18 12:01:10 localhost sshd[2280]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root"와 같은 오류가 발생하는 경우 "/etc/pam.d/system-auth"에 설정 된 uid 1000 보다 크거나 같으면 인증을 수행하도록 되어 있는 것을 uid 500 보다 크거나 같으면 인증을 수행하도록 값을 변경한 후 sshd를 재시작하면 된다.



[root] /root > vi /etc/pam.d/system-auth

#%PAM-1.0

# This file is auto-generated.

# User changes will be destroyed the next time authconfig is run.

auth        required      pam_env.so

auth        sufficient    pam_unix.so nullok try_first_pass

auth        requisite     pam_succeed_if.so uid >= 500 quiet

auth        required      pam_deny.so

 

account     required      pam_unix.so

account     sufficient    pam_succeed_if.so uid < 500 quiet

account     required      pam_permit.so

 

password    requisite     pam_cracklib.so try_first_pass retry=3

password    sufficient    pam_unix.so md5 shadow nullok try_first_pass use_authtok

password    required      pam_deny.so

 

session     optional      pam_keyinit.so revoke

session     required      pam_limits.so

session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid

session     required      pam_unix.so


3.6 BaroPAM 환경 제거


BaroPAM이 설치된 상태에서 BaroPAM 모듈을 사용하지 않을 경우 sshd 파일에 설정한 내용을 제거하는 방법은 다음과 같이 주석(#) 처리나 삭제하면 된다.


[root] /usr/baropam > vi /etc/pam.conf

#

# Authentication

#

#sshd auth required /usr/lib/security/pam_baro_auth.so nullok secret=/usr/baropam/.baro_auth



sshd 데몬에 설정한 /etc/ssh/sshd_config 파일의 내용 중 다음과 같은 인자를 변경해야 한다.


인자

기존

변경

비고

PasswordAuthentication

no

yes

 

ChallengeResponseAuthentication

yes

no

 

UsePAM

yes

no

 


sshd 설정이 끝나면 반드시 PAM 모듈이 제대로 제거되었는지 확인한 후 SSH Server Restart 작업이 반드시 필요하다.


[root] /usr/baropam > startsrc -g ssh or startsrc -s sshd


sshd 설정이 끝나면 반드시 PAM 모듈이 제대로 제거되었는지 확인한 후 시스템을 재부팅해야 한다.


4. BaroPAM 어플

 

정보자산에 로그인 시 Verification code에 입력할 일회용 인증키 발생기인 BaroPAM 어플의 안드로이드 폰용 다운로드(https://play.google.com/store/apps/details?id=com.baro.pam)구글의 "Play 스토어"에서 아이폰 용은 애플의 "App store"에서 가능하며, 설치는 일반 어플의 설치와 동일하다.

 

4.1 BaroPAM 어플 설치

 

"BaroPAM"어플의 다운로드 및 설치는 다음과 같은 절차로 진행된다.

 

1. 스마트 폰에서 "Pay 스토어" 또는 "App Store" 아이콘을 클릭한다.

 

안드로이드 폰인 경우)

 

 


아이폰인 경우)

 


2. 구글 "Pay 스토어" 또는 애플 "App Store"가 다음과 같이 활성화 된다.

 

구글 "Pay 스토어"인 경우)

 


애플 "App Store"인 경우)

 

 


3. 상단의 검색어 란에 "baropam"을 다음과 같이 입력하면  "BaroPAM" 어플이 검색되어 나타난다.

 

구글 "Pay 스토어"인 경우)

 


애플 "App Store"인 경우)

 

 


4. "BaroPAM"어플의 정보를 확인한 후 "설치" 또는 "받기" 버튼을 클릭한다.

 

구글 "Pay 스토어"인 경우)

 


애플 "App Store"인 경우)

 

 

 


5. "BaroPAM"어플의 다운로드 후 설치가 다음과 같이 진행된다.

 

구글 "Pay 스토어"인 경우)

 


애플 "App Store"인 경우는 다음과 같이 본인을 완료한 후 설치가 진행된다.

 

 


6. "BaroPAM"어플의 설치가 정상적으로 완료 되면, 스마트 폰에 다음과 같은 "BaroPAM" 아이콘이 추가된다.

 

구글 "Pay 스토어"인 경우)

 


애플 "App Store"인 경우)

 


7. 안드로이드  폰인 경우 "BaroPAM"어플의 권한을 설정하기 위해서 다음과 같이 "설정" 아이콘을 클릭한다.(아이폰인 경우 8~11 단계는 진행할 필요가 없다.)

 

안드로이드 폰인 경우)

 

안드로이드 폰인 경우 권한을 설정하지 않으면 인증번호가 생성되지 않는다.

 


8. "설정" 화면의 아이콘 중에 다음과 같이 "애플리케이션 관리자" 아이콘을 클릭한다.

 

안드로이드 폰인 경우)

 


9. "애플리케이션 관리자" 화면에서 다음과 같이 "BaroPAM" 아이콘을 클릭한다.

 

안드로이드 폰인 경우)

 


10. "애플리케이션 정보" 화면에서 "권한"를 선택하면 "앱 권한"을 설정하는 화면이 나타난다.

 

안드로이드 폰인 경우)

 

 


11. "앱 권한" 화면에서 "저장공간" "전화" off 에서 on으로 다음과 같이 "앱 권한"을 변경한다.

 

안드로이드 폰인 경우)

 

 


 

4.2 BaroPAM 어플 사용

 

"BaroPAM"어플은 크게 Pin 정보, 서버 정보, 로그인 정보, 환경설정, 정보공유 등의 5가지로 구성되어 있다.

 

1. 스마트 폰에서 "BaroPAM" 어플의 아이콘을 클릭한다.

 

안드로이드 폰인 경우)

 


아이폰인 경우)

 

 

 


2. "BaroPAM"어플이 활성화 되면 "BaroPAM"의 인트로 화면이 2초간 활성화 되어 다음과 같이 지속된다.

 

2-01.jpg

 

"BaroPAM" 어플의 인트로 화면 지속시간(2)이 끝나면 스마트 폰 분실 및 어플에 등록된 정보를 보호하기 위해서 본인만 알 수 있는 임의의 8자리 숫자인 Pin 번호(Pin number)를 설정하는 화면이 나타된다.

 

Pin 번호(Pin number)가 존재한 경우는 Pin 번호(Pin number)를 확인하는 화면이 나타난다.

 


3. Pin 번호(Pin number)가 설정되어 있지 않은 경우("BaroPAM" 어플을 처음 사용하는 경우) 다음과 같이 Pin 번호(Pin number)를 등록하는 화면이 나타난다.

 

안드로이드 폰인 경우)

2-02.png

 


아이폰인 경우)

07.png

 

 


4. Pin 번호 8자리 숫자를 입력하고 "Save" 버튼을 클릭한다.

 

안드로이드 폰인 경우)

 

"Save" 버튼을 클릭하면 제일 먼저 입력 항목들의 유효성을 확인 한 후 Pin 번호(Pin number)를 저장하는 작업을 진행한다.

 

만약, Pin 번호(Pin number)8자리가 아닌 경우 "Pin 번호 8자리를 입력해주십시오."라는 메시지가 화면에 나타난다.

 

Pin 번호(Pin number) 저장이 정상적으로 완료되지 못하면 "Pin 번호 등록" 화면이 지속되며, 정상적으로 완료되면 위 2번의 인트로 화면이 나타난다.

 


아이폰인 경우)

 

"저장" 버튼을 클릭하면 제일 먼저 입력 항목들의 유효성을 확인 한 후 Pin 번호(Pin number)를 저장하는 작업을 진행한다.

 

만약, Pin 번호(Pin number)8자리가 아닌 경우 "Pin 번호 8자리를 입력해주십시오."라는 메시지가 화면에 나타난다.

 

Pin 번호(Pin number) 저장이 정상적으로 완료되지 못하면 "Pin 번호 등록" 화면이 지속되며, 정상적으로 완료되면 위 2번의 인트로 화면이 나타난다.

 

아이폰은 안드로이드 폰과 달리 아이폰의 폰번호를 반드시 입력해야 한다.

 

 


5. Pin 번호(Pin number) 저장이 정상적으로 완료되지 못하면 "Pin 번호" 등록 화면이 지속되며, 정상적으로 완료되면 다음과 같이 "로그인" 화면에 설정한 Pin 번호(Pin number)를 다음과 같이 입력한다.

 

 


6. 설정한 8자리 Pin 번호(Pin number)를 입력한 다음 "Login" 버튼을 클릭한다.

 

 

"Login" 버튼을 클릭하면 제일 먼저 입력 항목들의 유효성을 확인 한 후 Pin 번호(Pin number)가 맞는지 를 확인하는 작업을 진행한다.

 

만약, Pin 번호(Pin number)8자리가 아닌 경우 "Pin 번호 8자리를 입력해주십시오."라는 메시지가 화면에 나타난다.

 

설정된 Pin 번호(Pin number)와 틀린 경우 "Pin번호가 틀립니다. 다시 확인 후 입력해주십시오."라는 메시지가 화면에 나타난다.

 


7. 로그인이 확인 되면, 다음과 같이 "Verification code" "one Time Auth key"를 선택하는 화면이 나타난다.

 

 

"Verification code" Windows/서버/데이터베이스/네트워크 장비/저장장치 등을 접근할 때 사용하는 일회용 인증키를 생성하는 경우 사용되며, "One Time Auth key"은 어플리케이션의 로그인 화면에서 일회용 인증키를 생성하는 경우에 사용된다.

 

먼저, "Verification code" 버튼을 클릭한 경우 Windows/서버/데이터베이스/네트워크 장비/저장장치 정보가 존재한 경우는 "서버 정보 목록" 화면으로 Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 정보가 존재하지 않은 경우는 "서버 정보 등록" 화면이 나타난다.

 


8. Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 정보가 설정되어 있지 않은 경우("BaroPAM" 어플을 처음 사용하는 경우) 다음과 같이 Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 정보를  등록하는 화면이 나타난다.

 

 

Server name

 

BaroPAM이 운영될 Windows/서버/데이터베이스/네트워크 장비/저장장치 명(Server name)은 필수 입력 항목으로 최소 1자리 이상 최대 30자리까지 입력할 수 있다.

 

Hostname

 

BaroPAM이 운영될 컴퓨터명/데이터베이스명/호스트명(Hostname)은 필수 입력 항목으로 최소 1자리 이상 최대 30자리까지 입력할 수 있다.

 

호스트명(Hostname)은 다음과 같은 명령어(uname -n)을 실행하여 알 수 있다.


[root] /root > uname -n

nuriapp.com

 

Secure key

 

Windows/서버/데이터베이스/네트워크 장비/저장장치별 또는 계정별로 부여 되는 Secure key는 필수 입력 항목으로 벤더에 요청하여 부여 받은 것을 입력해야 한다.

 

벤더에서 부여 받지 않은 임의의 "Secure key"를 입력하는 경우 잘못된 일회용 인증키가 부여되어 Windows/서버/데이터베이스/네트워크 장비/저장장치에 로그인 할 수 없는 경우가 발생할 수 있다.

 

만약, Windows/서버/데이터베이스/네트워크 장비/저장장치에 설정한 Secure key와 어플에서 지정한 Secure key가 다른 경우 일회용 인증키가 서로 달라서 로그인 할 수 없는 경우가 발생할 수 있다.

 

Auth key cycle time(3~60 second)

 

인증키 생성주기(Auth key cycle time)는 필수 입력 항목으로 최소 3초 이상 최대 60초 까지 지정할 수 있다.

 

만약, Windows/서버/데이터베이스/네트워크 장비/저장장치에 설정한 인증키 생성주기(Auth key cycle time)와 어플에서 지정한 인증키 생성주기(Auth key cycle time)가 다른 경우 일회용 인증키가 서로 달라서 로그인 할 수 없는 경우가 발생할 수 있다.

 


9. Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 정보를 입력한 후 "Save" 버튼을 클릭한다.

 

 

"Save" 버튼을 클릭하면 제일 먼저 입력 항목들의 유효성을 확인 한 후 Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 정보를 저장하는 작업을 진행한다.

 

Windows/서버/데이터베이스/네트워크 장비/저장장치명(Server name)이 입력하지 않은 경우 "서버명을 입력해주십시오."라는 메시지가 화면에 나타난다.

 

컴퓨터명/데이터베이스명/호스트명(Host name)이 입력하지 않은 경우 "호스트명을 입력해주십시오."라는 메시지가 화면에 나타난다.

 

Secure key가 입력하지 않은 경우 "Secure key를 입력해주십시오."라는 메시지가 화면에 나타난다.

 

인증키 생성주기(Auth key cycle time)가 입력하지 않거나 범위를 벗어난 경우 "인증키 생성주기를 입력 또는 확인해주십시오."라는 메시지가 화면에 나타난다.

 


10. Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 정보 저장이 정상적으로 완료되지 못하면 "서버 정보 등록" 화면이 지속되며, 정상적으로 완료되면 다음과 같이 "서버 정보 목록" 화면이 나타난다.

 

 

Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 정보를 검색하고 싶은 경우 검색어를 입력한 다음 "Search" 버튼을 클릭하면 검색된 Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 정보가 화면에 나타난다.

 

Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 정보를 신규로 추가해야 할 경우 "New"버튼을 클릭하면 위 8번과 같은 Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 정보를 등록하는 화면이 나타난다.

 

 


11. 2차 인증 키(일회용 인증키)를 생성해야 하는 경우 서버 정보 목록에서 Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 정보 항목을 다음과 같이 클릭한다.

 

 


12. 그러면 다음과 같이 Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 정보를 바탕으로 2차 인증 키(일회용 인증키)를 생성하는 화면이 나타난다.

 

 

Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 정보의 수정/삭제를 진행 해야 하는 경우 "Update/Delete" 버튼을 클릭하면 된다.

 

"Reset" 버튼을 클릭하면 새로운 2차 인증 키(일회용 인증키)가 생성되는데, 인증키 생성주기(Auth key cycle time) 동안은 동일한 2차 인증 키(일회용 인증키)가 발생한다.

 


13. Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 정보를 수정(Update) 또는 삭제(Delete) 해야 할 경우 "Update/Delete" 버튼을 클릭하면 다음과 같은 화면이 나타난다.

 

 

Server name

 

BaroPAM이 운영될 Windows/서버/데이터베이스/네트워크 장비/저장장치명(Server name)은 필수 입력 항목으로 최소 1자리 이상 최대 30자리까지 입력할 수 있다.

 

Hostname

 

BaroPAM이 운영될 컴퓨터명/데이터베이스명/호스트명(Hostname)은 필수 입력 항목으로 최소 1자리 이상 최대 30자리까지 입력할 수 있다.

 

호스트명(Hostname)은 다음과 같은 명령어(uname -n)을 실행하여 알 수 있다.


[root] /root > uname -n

nuriapp.com

 

Secure key

 

Windows/서버/데이터베이스/네트워크 장비/저장장치별 또는 계정별로 부여 되는 Secure key는 필수 입력 항목으로 벤더에 요청하여 부여 받은 것을 입력해야 한다.

 

벤더에서 부여 받지 않은 임의의 "Secure key"를 입력하는 경우 잘못된 일회용 인증키가 부여되어 Windows/서버/데이터베이스/네트워크 장비/저장장치에 로그인 할 수 없는 경우가 발생할 수 있다.

 

만약, Windows/서버/데이터베이스/네트워크 장비/저장장치에 설정한 Secure key와 어플에서 지정한 Secure key가 다른 경우 일회용 인증키가 서로 달라서 로그인 할 수 없는 경우가 발생할 수 있다.

 

Auth key cycle time(3~60 second)

 

인증키 생성주기(Auth key cycle time)는 필수 입력 항목으로 최소 3초 이상 최대 60초 까지 지정할 수 있다.

 

만약, Windows/서버/데이터베이스/네트워크 장비/저장장치에 설정한 인증키 생성주기(Auth key cycle time)와 어플에서 지정한 인증키 생성주기(Auth key cycle time)가 다른 경우 일회용 인증키가 서로 달라서 로그인 할 수 없는 경우가 발생할 수 있다.

 

"Delete" 버튼을 클릭하면 해당 Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 정보를 삭제하는 작업을 진행한다.

 

"Update" 버튼을 클릭하면 제일 먼저 입력 항목들의 유효성을 확인 한 후 Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 정보를 수정하는 작업을 진행한다.

 

Windows/서버/데이터베이스/네트워크 장비/저장장치명(Server name)이 입력하지 않은 경우 "서버명을 입력해주십시오."라는 메시지가 화면에 나타난다.

 

컴퓨터명/데이터베이스명/호스트명(Hostname)이 입력하지 않은 경우 "호스트명을 입력해주십시오."라는 메시지가 화면에 나타난다.

 

Secure key가 입력하지 않은 경우 "Secure key를 입력해주십시오."라는 메시지가 화면에 나타난다.

 

인증키 생성주기(Auth key cycle time)가 입력하지 않거나 범위를 벗어난 경우 "인증키 생성주기를 입력 또는 확인해주십시오."라는 메시지가 화면에 나타난다.

 

Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 정보 수정(Update) 또는 삭제(Delete)가 정상적으로 완료되지 못하면 "서버 정보 수정/삭제" 화면이 지속되며, 정상적으로 완료되면 10번과 같은 "서버 정보 목록" 화면이 나타난다.

 

 

 

 


14. 7번의 "메뉴선택" 화면에 "one Time Auth key" 버튼을 클릭한 경우 로그인 정보가 존재한 경우는 "로그인 정보 목록" 화면으로 로그인 정보가 존재하지 않은 경우는 "로그인 정보 등록" 화면이 나타난다.

 

 

System name

 

로그인할 시스템명(System name)은 필수 입력 항목으로 최소 1자리 이상 최대 30자리까지 입력할 수 있다.

 

Login-ID

 

로그인-ID(Login-ID)는 필수 입력 항목으로 최소 1자리 이상 최대 50자리까지 입력할 수 있다.

 

Auth key cycle time(3~60 second)

 

인증키 생성주기(Auth key cycle time)는 필수 입력 항목으로 최소 3초 이상 최대 60초 까지 지정할 수 있다.

 

만약, BaroPAM 검증모듈의 인증키 생성주기(Auth key cycle time)와 어플에서 지정한 인증키 생성주기(Auth key cycle time)가 다른 경우 일회용 인증키가 서로 달라서 로그인 할 수 없는 경우가 발생할 수 있다.

 

15. 로그인 정보를 입력한 후 "Save" 버튼을 클릭한다.

 

 

"Save" 버튼을 클릭하면 제일 먼저 입력 항목들의 유효성을 확인 한 후 로그인 정보를 저장하는 작업을 진행한다.

 

시스템명(System name)이 입력하지 않은 경우 "시스템명을 입력해주십시오."라는 메시지가 화면에 나타난다.

 

로그인-ID(Login-ID)가 입력하지 않은 경우 "로그인-ID를 입력해주십시오."라는 메시지가 화면에 나타난다.

 

인증키 생성주기(Auth key cycle time)가 입력하지 않거나 범위를 벗어난 경우 "인증키 생성주기를 입력 또는 확인해주십시오."라는 메시지가 화면에 나타난다.

 


16. 로그인 정보 저장이 정상적으로 완료되지 못하면 "로그인 정보 등록" 화면이 지속되며, 정상적으로 완료되면 다음과 같이 "로그인 정보 목록" 화면이 나타난다.

 

 

로그인 정보를 검색하고 싶은 경우 검색어를 입력한 다음 "Search" 버튼을 클릭하면 검색된 로그인 정보가 화면에 나타난다.

 

로그인 정보를 신규로 추가해야 할 경우 "New" 버튼을 클릭하면 위 14번과 같은 로그인 정보를 등록하는 화면이 나타난다.

 

 


17. 2차 인증 키(일회용 인증키)를 생성해야 하는 경우 로그인 정보 목록에서 로그인 정보 항목을 다음과 같이 클릭한다.

 

 

 


18. 그러면 다음과 같이 로그인 정보를 바탕으로 2차 인증 키(일회용 인증키)를 생성하는 화면이 나타난다.

 

 

로그인 정보의 수정/삭제를 진행 해야 하는 경우 "Update/Delete" 버튼을 클릭하면 된다.

 

"Reset" 버튼을 클릭하면 새로운 2차 인증 키(일회용 인증키)가 생성되는데, 인증키 생성주기(Auth key cycle time) 동안은 동일한 2차 인증 키(일회용 인증키)가 발생한다.

 

 


19. 로그인 정보를 수정(Update) 또는 삭제(Delete) 해야 할 경우 "Update/Delete" 버튼을 클릭하면 다음과 같은 화면이 나타난다.

 

 

System name

 

로그인할 시스템명(System name)은 필수 입력 항목으로 최소 1자리 이상 최대 30자리까지 입력할 수 있다.

 

Login-ID

 

로그인-ID(Login-ID)는 필수 입력 항목으로 최소 1자리 이상 최대 50자리까지 입력할 수 있다.

 

Auth key cycle time(3~60 second)

 

인증키 생성주기(Auth key cycle time)는 필수 입력 항목으로 최소 3초 이상 최대 60초 까지 지정할 수 있다.

 

만약, BaroPAM 검증모듈의 인증키 생성주기(Auth key cycle time)와 어플에서 지정한 인증키 생성주기(Auth key cycle time)가 다른 경우 일회용 인증키가 서로 달라서 로그인 할 수 없는 경우가 발생할 수 있다.

 

"Delete" 버튼을 클릭하면 해당 로그인 정보를 삭제하는 작업을 진행한다.

 

"Update" 버튼을 클릭하면 제일 먼저 입력 항목들의 유효성을 확인 한 후 로그인 정보를 수정하는 작업을 진행한다.

 

시스템명(System name)이 입력하지 않은 경우 "시스템명을 입력해주십시오."라는 메시지가 화면에 나타난다.

 

로그인-ID(Login-ID)가 입력하지 않은 경우 "로그인-ID를 입력해주십시오."라는 메시지가 화면에 나타난다.

 

인증키 생성주기(Auth key cycle time)가 입력하지 않거나 범위를 벗어난 경우 "인증키 생성주기를 입력 또는 확인해주십시오."라는 메시지가 화면에 나타난다.

 

로그인 정보 수정(Update) 또는 삭제(Delete)가 정상적으로 완료되지 못하면 "로그인 정보 수정/삭제" 화면이 지속되며, 정상적으로 완료되면 17번과 같은 "로그인 정보 목록" 화면이 나타난다.

 

 


20. "BaroPAM" 어플의 환경설정은 다음과 같은 "환경설정" 아이콘을 클릭하면 된다.

 

 


21. 그러면 다음과 같이 "환경설정" 화면이 나타난다.

 

6-01.jpg

 


22. "BaroPAM 업데이트 하기" 항목을 클릭하면 다음과 같은 "Google Play Store" 화면이 나타난다.

 

 

"업데이트" 버튼을 클릭하면 "BaroPAM" 어플의 업데이트 작업 이 진행된다. "업데이트" 버튼이 없는 경우는 업데이트할 정보가 없는 경우을 의미한다.

 


23. "BaroPAM 별점주기" 항목을 클릭하면 다음과 같은 "Google Play Store"의 별점주기 화면이 나타난다.

 

 

"BaroPAM" 어플의 활성을 위해 별점 및 댓글을 작성하여 제출하면 어플 활성화에 도움이 된다.

 


24. "BaroPAM 소개서" 항목을 클릭하면 다음과 같은 "BaroPAM 솔루션 소개서" 화면이 나타난다.

 

 

"BaroPAM 솔루션 소개서"pdf 파일(baropam_intro_kr.pdf) 형태로 제공 된다.

 


25. "BaroPAM 가이드" 항목을 클릭하면 다음과 같은 "BaroPAM 어플 사용 설명서" 화면이 나타난다.

 

 

"BaroPAM 어플 사용 설명서" pdf 파일(baropam_guide_kr.pdf) 형태로 제공 된다.

 


26. "BaroPAM 영업문의" 항목을 클릭하면 다음과 같은 "전화걸기" 화면이 나타난다.

 

 

"전화걸기" 버튼을 클릭하여 "BaroPAM"에 대한 영업 및 전반적인 사항을 문의할 수 있다.

 


27. "Pin 번호 변경" 항목을 클릭하면 다음과 같은 "Pin 번호 변경" 화면이 나타난다.

 

6-10.jpg

 

▣현재 Pin번호 8자리를 입력해주십시오.

 

현재 설정된 Pin 번호(Pin number)를 입력한다.

 

▣새로운 Pin번호 8자리를 입력해주십시오.

 

새로운 설정할 Pin 번호(Pin number)를 입력한다.

 

"Save" 버튼을 클릭하면 제일 먼저 입력 항목들의 유효성을 확인 한 후 새로운 Pin 번호(Pin number)를 저장하는 작업을 진행한다.

 

만약, Pin 번호(Pin number)8자리가 아닌 경우 "Pin 번호 8자리를 입력해주십시오."라는 메시지가 화면에 나타난다.

 

 

 

현재 설정된 Pin 번호(Pin number)와 새로 입력한 Pin 번호(Pin number)가 다른 경우 "현재 Pin번호가 틀립니다. 다시 확인 후 입력해주십시오."라는 메시지가 화면에 나타난다.

 

현재 설정된 Pin 번호(Pin number)와 새로운 Pin 번호(Pin number)가 동일한 경우 "현재 Pin번호와 새로운 Pin번호가 동일합니다. 다시 확인 후 입력해주십시오."라는 메시지가 화면에 나타난다.

 

만약, 새로운 Pin 번호(Pin number)8자리가 아닌 경우 "새로운 Pin 번호 8자리를 입력해주십시오."라는 메시지가 화면에 나타난다.

 

새로운 Pin 번호(Pin number) 저장이 정상적으로 완료되지 못하면 "Pin 번호 변경" 화면이 지속되며, 정상적으로 완료되면 2번과 같은 인트로 화면이 나타난다.

 


30. "BaroPAM" 어플의 SNS를 이용한 공유는 다음과 같은 "BaroPAM 공유" 아이콘을 클릭하면 된다.

 

 

 

 

 

 


31. 그러면 다음과 같이 "BaroPAM 공유"할 수 있는 화면이 나타난다.

 

 


32. 트위터에 트윗을 하고자 할 경우 "트윗" 이아콘을 클릭하면 다음과 같은 화면이 나타난다.

 

 

"트윗" 아이콘을 클릭하면 기 설정된 트위터 계정으로 틔윗 작업이 진행된다.

 


 

4.3 BaroKEY 연동 API

 

BaroPAM 어플에서 서버 로그인 시 Verification code에 입력할 일회용 인증키를 생성하는 API "barokey.jar"로 제공되며, Eclipse을 사용하는 경우 libs 디렉토리에 "barokey.jar"를 위치 시켜야 한다.

 

 

 Verification code2차 인증키(일회용 인증키)를 생성하는 프로그램에 다음과 같은 코드를 삽입하면 된다.

 


...

import com.barokey.barokey;

...

String auth_key = barokey.generateKEYL(intent_login_id, PhoneNumber, intent_cycle_time);

...

 

secure_key는 벤더에 요청하여 제공 받은 키로 서버별, 계정별로 부여할 수 있으며, 반드시 BaroPAM 서버 환경 설정 시 지정한 키를 설정해야 한다.

 

cycle_time BaroPAM 서버 환경설정 시 지정한 인증키 생성 주기와 반드시 일치 해야 한다.

 

만약, BaroPAM 서버 환경설정 값과 다른 경우 Verification code인 인회용 인증키가 다르게 생성될 수 있다.

 

화면 예시)

 

 

프로그램 예시)

 


package com.baro.pam.info;

 

import com.baro.common.base.BaseActivity;

import com.baro.common.base.BaseInterface;

import com.baro.common.setting.SettingACT;

import com.baro.pam.info.PAMCreateACT;

import com.baro.pam.info.PAMUpdateACT;

import com.baro.pam.R;

 

import com.barokey.barokey;

import com.beardedhen.androidbootstrap.BootstrapProgressBar;

 

import android.content.Context;

import android.content.Intent;

import android.os.Bundle;

import android.os.Message;

import android.os.Vibrator;

import android.os.Handler;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.inputmethod.InputMethodManager;

import android.widget.Button;

import android.widget.EditText;

import android.widget.ProgressBar;

import android.widget.TextView;

 

import java.util.Date;

 

public class PAMCreateACT extends BaseActivity implements BaseInterface, onClickListener {

    private Button btn_setting, btn_share, btn_close, btn_update, btn_reset;

    private TextView tv_auth_key;

    private TextView tv_server_name;

    private TextView tv_remainTime;

    private BootstrapProgressBar progressBar;

    private String intent_reg_dt = "", intent_server_name = "", intent_hostname = "", intent_secure_key = "", intent_cycle_time = "";

    Intent intent;

 

    private long createdMillis;

 

    private static final int MESSAGE_REFRESH_REMAINING_SECOND = 101;

    private static final int SENDMESSAGE_INTERVAL = 250;

 

    @Override

    public void onCreate(Bundle savedInstanceState) {

 

        try {

            super.onCreate(savedInstanceState);

            setContentView(R.layout.act_pamcreate);

 

            drawView();

            getIntentData();

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

 

    @Override

    public void onPause() {

        super.onPause();

 

        if (null != m_handlerProc) {

            m_handlerProc.removeMessages(MESSAGE_REFRESH_REMAINING_SECOND);

        }

    }

 

    @Override

    public void onResume() {

        super.onResume();

 

        if (null != m_handlerProc) {

            m_handlerProc.sendEmptyMessageDelayed(MESSAGE_REFRESH_REMAINING_SECOND, SENDMESSAGE_INTERVAL);

        }

    }

 

    @Override

    public void drawView() {

        try {

            vibe = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

 

            findViewById(R.id.body_frame).setOnClickListener(new onClickListener() {

                public void onClick(View v) {

                    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);

                }

            });

 

            tv_server_name = (TextView) findViewById(R.id.tv_server_name);

            tv_server_name.setOnClickListener(this);

 

            tv_auth_key = (TextView) findViewById(R.id.tv_auth_key);

            tv_auth_key.setFocusable(true);

            tv_auth_key.setClickable(false);

 

            progressBar = (BootstrapProgressBar) findViewById(R.id.progressBar);

 

            tv_remainTime = (TextView) findViewById(R.id.tv_remainTime);

 

            btn_setting = (Button) findViewById(R.id.btn_setting);

            btn_setting.setOnClickListener(this);

 

            btn_share = (Button) findViewById(R.id.btn_share);

            btn_share.setOnClickListener(this);

 

            ((Button) findViewById(R.id.btn_go_back)).setOnClickListener(this);

 

            btn_close = (Button) findViewById(R.id.btn_close);

            btn_close.setOnClickListener(this);

 

            btn_update = (Button) findViewById(R.id.btn_update);

            btn_update.setOnClickListener(this);

 

            btn_reset = (Button) findViewById(R.id.btn_reset);

            btn_reset.setOnClickListener(this);

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

 

    public void getIntentData() {

        try {

            Intent intent = getIntent();

            getDefaultIntent(intent);

 

            if (intent.getStringExtra("reg_dt") != null) {

                intent_reg_dt = intent.getStringExtra("reg_dt").trim();

                //et_reg_dt.setText(intent_reg_dt);

            }

            if (intent.getStringExtra("server_name") != null) {

                intent_server_name = intent.getStringExtra("server_name").trim();

                //et_server_name.setText(intent_server_name);

            }

            if (intent.getStringExtra("hostname") != null) {

                intent_hostname = intent.getStringExtra("hostname").trim();

                //et_hostname.setText(intent_hostname);

            }

            if (intent.getStringExtra("secure_key") != null) {

                intent_secure_key = intent.getStringExtra("secure_key").trim();

                //et_secure_key.setText(intent_secure_key);

            }

            if (intent.getStringExtra("cycle_time") != null) {

                intent_cycle_time = intent.getStringExtra("cycle_time").trim();

                //et_cycle_time.setText(intent_cycle_time);

            }

            if (!"".equals(intent_server_name) && (!"".equals(intent_hostname))) {

                tv_server_name.setText("[ " + intent_server_name + " / " + intent_hostname + " ]");

            }

            if (!"".equals(intent_secure_key) && (!"".equals(intent_cycle_time))) {

                tv_auth_key.setText("");

 

                createdMillis = estimateCreatedMillis(intent_cycle_time);

 

                tv_auth_key.setText(barokey.generateKEYP(intent_secure_key, intent_cycle_time));

 

                m_handlerProc.sendEmptyMessageDelayed(MESSAGE_REFRESH_REMAINING_SECOND, SENDMESSAGE_INTERVAL);

            }

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

 

    @Override

    public void onClick(View v) {

        try {

            switch (v.getId()) {

                case R.id.btn_setting: // Setting

                    Intent intent = new Intent(this, SettingACT.class);

                    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);

                    startActivity(intent);

                    break;

 

                case R.id.btn_share:

                    intent = new Intent(Intent.ACTION_SEND);

                    intent.addCategory(Intent.CATEGORY_DEFAULT);

                    intent.putExtra(Intent.EXTRA_TEXT, getString(R.string.app_share_pam));

                    intent.putExtra(Intent.EXTRA_TITLE, getString(R.string.app_name));

                    intent.setType("text/plain");

                    startActivity(Intent.createChooser(intent, getString(R.string.share_text)));

                    break;

 

                case R.id.btn_go_back: // go back

                    finish();

                    break;

 

                case R.id.btn_close: // Close

                    moveTaskToBack(true);

                    finish();

                    android.os.Process.killProcess(android.os.Process.myPid());

                    break;

 

                case R.id.btn_update: // Update/Delete

                    intent = new Intent(PAMCreateACT.this, PAMUpdateACT.class);

                    intent.putExtra("reg_dt", intent_reg_dt);

                    intent.putExtra("server_name", intent_server_name);

                    intent.putExtra("hostname", intent_hostname);

                    intent.putExtra("secure_key", intent_secure_key);

                    intent.putExtra("cycle_time", intent_cycle_time);

                    startActivity(intent);

                    break;

 

                case R.id.btn_reset: // Reset

                    if (!"".equals(intent_secure_key) && (!"".equals(intent_cycle_time))) {

                        tv_auth_key.setText("");

 

                        createdMillis = estimateCreatedMillis(intent_cycle_time);

 

                        tv_auth_key.setText(barokey.generateKEYP(intent_secure_key, intent_cycle_time));

 

                        m_handlerProc.sendEmptyMessageDelayed(MESSAGE_REFRESH_REMAINING_SECOND, SENDMESSAGE_INTERVAL);

                    }

                    break;

            }

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

 

    private final Handler m_handlerProc = new Handler() {

        @Override

        public void handleMessage(Message message) {

            switch (message.what) {

                case MESSAGE_REFRESH_REMAINING_SECOND: {

                    try {

                        long cycleMillis = (Long.parseLong(intent_cycle_time) * 1000L);

                        long remainingMillis = estimateRemainingMillis(intent_cycle_time, createdMillis);

                        long remainingSecond = remainingMillis != 0 ? (remainingMillis / 1000L) : 0;

 

                        if (0 < remainingMillis) {

                            m_handlerProc.sendEmptyMessageDelayed(MESSAGE_REFRESH_REMAINING_SECOND, SENDMESSAGE_INTERVAL);

 

                            btn_reset.setEnabled(false);

                        } else {

                            m_handlerProc.removeMessages(MESSAGE_REFRESH_REMAINING_SECOND);

 

                            btn_reset.setEnabled(true);

                        }

 

                        tv_remainTime.setText(remainingSecond + " " + getString(R.string.remain_time_suffix));

 

//                        progressBar.setMax((int) (Long.parseLong(intent_cycle_time) * 1000L));

//                        progressBar.setProgress((int) remainingMillis);

 

                        if (0 != cycleMillis) {

//                        progressBar.setMaxProgress((int) (Long.parseLong(intent_cycle_time) * 1000L));

                            progressBar.setProgress((int) (((float) remainingMillis / (float) cycleMillis) * 100.0F));

                        }

 

                    } catch (Exception e) {

                        e.printStackTrace();

                    }

                }

                break;

            }

        }

    };

 

    public long estimateCreatedMillis(String cycleSecondString) {

        long remainingMillis = (barokey.getRemainingTime(cycleSecondString) * 1000L) - 200;

 

        long cycleMillis = (Long.parseLong(cycleSecondString) * 1000L);

        long currentMillis = (new Date()).getTime();

        long elapsedMillis = cycleMillis - remainingMillis;

 

        long createdMillis = currentMillis - elapsedMillis;

 

        return createdMillis;

    }

 

    public long estimateRemainingMillis(String cycleSecondString, long createdTime) {

        long cycleMillis = (Long.parseLong(cycleSecondString) * 1000L);

        long currentMillis = (new Date()).getTime();

        long elapsedMillis = currentMillis - createdTime;

 

        long remainingMillis = barokey.getRemainingTime(cycleSecondString) * 1000L;

        remainingMillis = cycleMillis > elapsedMillis ? remainingMillis : 0;

        remainingMillis = remainingMillis >= cycleMillis ? 0 : remainingMillis;

 

        return remainingMillis;

    }

}

 

 

 

5. BaroPAM 웹 사이트

 

정보자산에 로그인 시 Verification code에 입력할 일회용 인증키 발생기인 BaroPAM 어플(안드로이드 폰용과 아이폰 용)에 문제가 발생 시 서비스의 중단이 발생하지 않토록 BaroPAM 웹 사이트(www.baropam.com)를 통해서도 서비스를 제공한다.

 

5.1 BaroPAM 사용

 

"BaroPAM"어플은 크게 Pin 정보, 서버 정보, 로그인 정보 등의 3가지로 구성되어 있다.

 

1. 스마트 폰에서 "웹 브라우저" 어플의 아이콘을 클릭하여 어플을 활성화 한 후 어플 상단의 검색어 또는 URL 입력란에 BaroPAM의 웹 사이트인 www.baropam.com URL을 입력한다.

 

안드로이드 폰인 경우)

 


아이폰인 경우)

 

 

 


2. BaroPAM 웹 사이트가 활성화 되면 다음과 같은 "BaroPAM"의 로그인 화면이 나타난다.

 

 

"BaroPAM" 웹 사이트를 처음 사용하는 경우는 “Pin 번호 등록버튼을 이미 사용한 경우는 Pin 번호 8자리를 입력한고 로그인버튼을 클릭한다.

 

 


3. Pin 번호(Pin number)가 설정되어 있지 않은 경우("BaroPAM" 웹 사이트를 처음 사용하는 경우) “Pin번호 등록버튼을 클릭하면 다음과 같이 Pin 번호(Pin number)를 등록하는 화면이 나타난다.

 

1.2 Pin번호 등록.jpg

 

Pin번호는 스마트 폰 분실 시 타인이 인증키 정보 유출을 방지하기 위해서 사용한다.

 

 


4. 사용하는 휴대전화 11자리 숫자와 Pin 번호 8자리 숫자를 입력하고 "Save" 버튼을 클릭한다.

 

 

"Save" 버튼을 클릭하면 제일 먼저 입력 항목들의 유효성을 확인 한 후 Pin 번호(Pin number)를 저장하는 작업을 진행한다.

 

휴대 번호가 11자리가 아닌 경우 휴대번호 11자리를 입력해주십시요.”라는 메시지기 화면에 나타난다. 마찬가지로, Pin 번호(Pin number)8자리가 아닌 경우 "Pin 번호 8자리를 입력해주십시오."라는 메시지가 화면에 나타난다.

 

Pin 번호(Pin number) 저장이 정상적으로 완료되지 못하면 "Pin 번호 등록" 화면이 지속되며, 정상적으로 완료되면 위 2번의 로그인 화면이 나타난다.

 

"Cancel" 버튼을 클릭하면 현재 화면을 종료하고 위 2번의 로그인 화면이 나타난다.


5. 로그인 화면에서 설정한 8자리 Pin 번호(Pin number)를 입력한 다음 "로그인" 버튼을 클릭한다.

 

1.4 로그인 화면.jpg

 

"로그인" 버튼을 클릭하면 제일 먼저 입력 항목들의 유효성을 확인 한 후 Pin 번호(Pin number)가 맞는지 를 확인하는 작업을 진행한다.

 

만약, Pin 번호(Pin number)8자리가 아닌 경우 "Pin 번호 8자리를 입력해주십시오."라는 메시지가 화면에 나타난다.

 

설정된 Pin 번호(Pin number)와 틀린 경우 "Pin번호가 틀립니다. 다시 확인 후 입력해주십시오."라는 메시지가 화면에 나타난다.

 


6. 로그인이 확인 되면, 다음과 같이 "서버 정보 관리화면이 나타난다.

 

 

"서버 정보 관리" Windows/서버/데이터베이스/네트워크 장비/저장장치 등을 접근할 때 사용하는 일회용 인증키를 생성하는 경우 사용되며, "로그인 정보 관리"는 어플리케이션의 로그인 화면에서 일회용 인증키를 생성하는 경우에 사용된다.

  

서버 정보 관리 화면은 Windows/서버/데이터베이스/네트워크 장비/저장장치의 접근제어 2차 인증을 하기 위하여 일회용 인증키를 생성하기 위한 정보를 관리한다.

 

① 메뉴 버튼을 클릭하면 우측 화면처럼 선택할 수 있는 상세 메뉴가 나타나며, Logout 버튼을 클릭하면 “BaroPAM” 웹 사이트 화면을 종료하고 위 2번의 로그인 화면이 나타난다.


7. 서버 정보 관리 화면에서 New 버튼을 클릭하면 다음과 같이 Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 정보를 등록하는 화면이 나타난다.

 

2.3 서버등록.jpg

 

▣서버명(Server name)

 

BaroPAM이 운영될 Windows/서버/데이터베이스/네트워크 장비/저장장치 명(Server name)은 필수 입력 항목으로 최소 1자리 이상 최대 30자리까지 입력할 수 있다.

 

▣호스트명(Hostname)

 

BaroPAM이 운영될 컴퓨터명/데이터베이스명/호스트명(Hostname)은 필수 입력 항목으로 최소 1자리 이상 최대 30자리까지 입력할 수 있다.

 

호스트명(Hostname)은 다음과 같은 명령어(uname -n)을 실행하여 알 수 있다.


[root] /root > uname -n

nuriapp.com

 

Secure key

 

Windows/서버/데이터베이스/네트워크 장비/저장장치별 또는 계정별로 부여 되는 Secure key는 필수 입력 항목으로 벤더에 요청하여 부여 받은 것을 입력해야 한다.

 

벤더에서 부여 받지 않은 임의의 "Secure key"를 입력하는 경우 잘못된 일회용 인증키가 부여되어 Windows/서버/데이터베이스/네트워크 장비/저장장치에 로그인 할 수 없는 경우가 발생할 수 있다.

 

만약, Windows/서버/데이터베이스/네트워크 장비/저장장치에 설정한 Secure key와 어플에서 지정한 Secure key가 다른 경우 일회용 인증키가 서로 달라서 로그인 할 수 없는 경우가 발생할 수 있다.

 

▣생성주기(Auth key cycle time , 3~60 second)

 

인증키 생성주기(Auth key cycle time)는 필수 입력 항목으로 최소 3초 이상 최대 60초 까지 지정할 수 있다.

 

만약, Windows/서버/데이터베이스/네트워크 장비/저장장치에 설정한 인증키 생성주기(Auth key cycle time)와 웹에서 지정한 인증키 생성주기(Auth key cycle time)가 다른 경우 일회용 인증키가 서로 달라서 로그인 할 수 없는 경우가 발생할 수 있다.

 


8. Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 정보를 입력한 후 "Save" 버튼을 클릭한다.

 

2.4 서버저장.jpg

 

"Save" 버튼을 클릭하면 제일 먼저 입력 항목들의 유효성을 확인 한 후 Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 정보를 저장하는 작업을 진행한다.

 

Windows/서버/데이터베이스/네트워크 장비/저장장치명(Server name)이 입력하지 않은 경우 "서버명을 입력해주십시오."라는 메시지가 화면에 나타난다.

 

컴퓨터명/데이터베이스명/호스트명(Host name)이 입력하지 않은 경우 "호스트명을 입력해주십시오."라는 메시지가 화면에 나타난다.

 

Secure key가 입력하지 않은 경우 "Secure key를 입력해주십시오."라는 메시지가 화면에 나타난다.

 

인증키 생성주기(Auth key cycle time)가 입력하지 않거나 범위를 벗어난 경우 "인증키 생성주기를 입력 또는 확인해주십시오."라는 메시지가 화면에 나타난다.

 

"List" 버튼을 클릭하면 현재 화면을 종료하고 위 6번의 서버 정보 관리 목록 화면이 나타난다.


9. Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 정보 저장이 정상적으로 완료되지 못하면 "서버 정보 등록" 화면이 지속되며, 정상적으로 완료되면 다음과 같이 "서버 정보 목록" 화면이 나타난다.

 

2.5 서버목록.jpg

 

Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 정보를 검색하고 싶은 경우 검색어를 입력한 다음 "Search" 버튼을 클릭하면 검색된 Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 정보가 화면에 나타난다.

 

Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 정보를 신규로 추가해야 할 경우 "New"버튼을 클릭하면 위 7번과 같은 Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 정보를 등록하는 화면이 나타난다.

 

 


10. 2차 인증 키(일회용 인증키)를 생성 및 서버 정보 변경/삭제 해야 하는 경우 서버 정보 목록에서 Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 정보 항목을 다음과 같이 클릭한다.

 

2.5 서버목록.jpg

 


11. 서버 정보 목록에서 "생성" 버튼을 클릭하면 새로운 2차 인증 키(일회용 인증키)가 생성되는데, 인증키 생성주기(Auth key cycle time) 동안은 동일한 2차 인증 키(일회용 인증키)가 발생하며, 새로 생성한 일회용 인증키를 다음과 같이 Message box로 화면상에 나타난다.

 

 

 


12. 그러면 다음과 같이 Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 정보를 바탕으로 2차 인증 키(일회용 인증키)를 생성 및 변경/삭제하는 화면이 나타난다.

 

2.7 서버변경.jpg

 

▣서버명(Server name)

 

BaroPAM이 운영될 Windows/서버/데이터베이스/네트워크 장비/저장장치명(Server name)은 필수 입력 항목으로 최소 1자리 이상 최대 30자리까지 입력할 수 있다.

 

▣호스트명(Hostname)

 

BaroPAM이 운영될 컴퓨터명/데이터베이스명/호스트명(Hostname)은 필수 입력 항목으로 최소 1자리 이상 최대 30자리까지 입력할 수 있다.

 

호스트명(Hostname)은 다음과 같은 명령어(uname -n)을 실행하여 알 수 있다.


[root] /root > uname -n

nuriapp.com

 

Secure key

 

Windows/서버/데이터베이스/네트워크 장비/저장장치별 또는 계정별로 부여 되는 Secure key는 필수 입력 항목으로 벤더에 요청하여 부여 받은 것을 입력해야 한다.

 

벤더에서 부여 받지 않은 임의의 "Secure key"를 입력하는 경우 잘못된 일회용 인증키가 부여되어 Windows/서버/데이터베이스/네트워크 장비/저장장치에 로그인 할 수 없는 경우가 발생할 수 있다.

 

만약, Windows/서버/데이터베이스/네트워크 장비/저장장치에 설정한 Secure key와 어플에서 지정한 Secure key가 다른 경우 일회용 인증키가 서로 달라서 로그인 할 수 없는 경우가 발생할 수 있다.

 

▣ 생성주기(Auth key cycle time, 3~60 second)

 

인증키 생성주기(Auth key cycle time)는 필수 입력 항목으로 최소 3초 이상 최대 60초 까지 지정할 수 있다.

 

만약, Windows/서버/데이터베이스/네트워크 장비/저장장치에 설정한 인증키 생성주기(Auth key cycle time)와 웹에서 지정한 인증키 생성주기(Auth key cycle time)가 다른 경우 일회용 인증키가 서로 달라서 로그인 할 수 없는 경우가 발생할 수 있다.

 

"Verification key" 버튼을 클릭하면 새로운 2차 인증 키(일회용 인증키)가 생성되는데, 인증키 생성주기(Auth key cycle time) 동안은 동일한 2차 인증 키(일회용 인증키)가 발생하며, 새로 생성한 일회용 인증키를 다음과 같이 Message box로 화면상에 나타난다.

 

 

"Update" 버튼을 클릭하면 제일 먼저 입력 항목들의 유효성을 확인 한 후 Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 정보를 수정하는 작업을 진행한다.

 

"Delete" 버튼을 클릭하면 "서버 정보를 삭제 하시겠습니까?"라는 Message box가 나타나며, "확인" 버튼을 클릭하면 해당 Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 정보를 삭제하는 작업을 진행되며, "취소" 버튼을 클릭하면 삭제 작업이 취소된다.

 

 

"List" 버튼을 클릭하면 현재 화면을 종료하고 위 6번의 서버 정보 관리 목록 화면이 나타난다.

 

Windows/서버/데이터베이스/네트워크 장비/저장장치명(Server name)이 입력하지 않은 경우 "서버명을 입력해주십시오."라는 메시지가 화면에 나타난다.

 

컴퓨터명/데이터베이스명/호스트명(Hostname)이 입력하지 않은 경우 "호스트명을 입력해주십시오."라는 메시지가 화면에 나타난다.

 

Secure key가 입력하지 않은 경우 "Secure key를 입력해주십시오."라는 메시지가 화면에 나타난다.

 

인증키 생성주기(Auth key cycle time)가 입력하지 않거나 범위를 벗어난 경우 "인증키 생성주기를 입력 또는 확인해주십시오."라는 메시지가 화면에 나타난다.

 

Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 정보 수정(Update) 또는 삭제(Delete)가 정상적으로 완료되지 못하면 "서버 정보 수정/삭제" 화면이 지속되며, 정상적으로 완료되면 10번과 같은 "서버 정보 목록" 화면이 나타난다.

 

Windows/서버/데이터베이스/네트워크 장비/저장장치에 대한 정보의 수정/삭제를 진행 해야 하는 경우 "Update/Delete" 버튼을 클릭하면 된다.

 

 

 


13. 오른쪽 상단에 있는 "메뉴" 버튼을 클릭한 후 상세메뉴에서 "로그인 정보 관리" 메뉴를  클릭하면 다음과 같이 "로그인 정보 관리화면이 나타난다.

 

3.2 로그인 목록.jpg

 

 


14. 로그인 정보 관리 화면에서 New 버튼을 클릭하면 다음과 같이 Application 로그인에 대한 정보를 등록하는 화면이 나타난다.

 

3.3 로그인 등록.jpg

 

▣시스템명(System name)

 

로그인할 시스템명(System name)은 필수 입력 항목으로 최소 1자리 이상 최대 60자리까지 입력할 수 있다.

 

▣로그인-ID(Login-ID)

 

로그인-ID(Login-ID)는 필수 입력 항목으로 최소 1자리 이상 최대 50자리까지 입력할 수 있다.

 

▣생성주기(Auth key cycle time, 3~60 second)

 

인증키 생성주기(Auth key cycle time)는 필수 입력 항목으로 최소 3초 이상 최대 60초 까지 지정할 수 있다.

 

만약, BaroPAM 검증모듈의 인증키 생성주기(Auth key cycle time)와 웹에서 지정한 인증키 생성주기(Auth key cycle time)가 다른 경우 일회용 인증키가 서로 달라서 로그인 할 수 없는 경우가 발생할 수 있다.

 

 


15. Application 로그인 정보를 입력한 후 "Save" 버튼을 클릭한다.

 

3.4 로그인저장.jpg

 

"Save" 버튼을 클릭하면 제일 먼저 입력 항목들의 유효성을 확인 한 후 로그인 정보를 저장하는 작업을 진행한다.

 

시스템명(System name)이 입력하지 않은 경우 "시스템명을 입력해주십시오."라는 메시지가 화면에 나타난다.

 

로그인-ID(Login-ID)가 입력하지 않은 경우 "로그인-ID를 입력해주십시오."라는 메시지가 화면에 나타난다.

 

인증키 생성주기(Auth key cycle time)가 입력하지 않거나 범위를 벗어난 경우 "인증키 생성주기를 입력 또는 확인해주십시오."라는 메시지가 화면에 나타난다.

 

 

"List" 버튼을 클릭하면 현재 화면을 종료하고 위 12번의 로그인 정보 관리 목록 화면이 나타난다.


16. Application 로그인에 대한 정보 저장이 정상적으로 완료되지 못하면 "로그인 정보 등록" 화면이 지속되며, 정상적으로 완료되면 다음과 같이 "로그인 정보 목록" 화면이 나타난다.

 

3.5 로그인목록.jpg

 

로그인 정보를 검색하고 싶은 경우 검색어를 입력한 다음 "Search" 버튼을 클릭하면 검색된 로그인 정보가 화면에 나타난다.

 

로그인 정보를 신규로 추가해야 할 경우 "New" 버튼을 클릭하면 위 14번과 같은 로그인 정보를 등록하는 화면이 나타난다.

 

 


17. 로그인 정보 목록에서 "생성" 버튼을 클릭하면 새로운 2차 인증 키(일회용 인증키)가 생성되는데, 인증키 생성주기(Auth key cycle time) 동안은 동일한 2차 인증 키(일회용 인증키)가 발생하며, 새로 생성한 일회용 인증키를 다음과 같이 Message box로 화면상에 나타난다.

 

 


18. 2차 인증 키(일회용 인증키)를 생성 및 로그인 정보 변경/삭제 해야 하는 경우 로그인 정보 목록에서 Applicat 로그인에 대한 정보 항목을 다음과 같이 클릭한다.

 

 

 


19. 그러면 다음과 같이 Applicat 로그인에 대한 정보를 바탕으로 2차 인증 키(일회용 인증키)를 생성 및변경/삭제하는 화면이 나타난다.

 

3.6 로그인변경.jpg

 

▣시스템명(System name)

 

로그인할 시스템명(System name)은 필수 입력 항목으로 최소 1자리 이상 최대 60자리까지 입력할 수 있다.

 

▣로그인-id(Login-ID)

 

로그인-ID(Login-ID)는 필수 입력 항목으로 최소 1자리 이상 최대 50자리까지 입력할 수 있다.

 

▣생성주기(Auth key cycle time, 3~60 second)

 

인증키 생성주기(Auth key cycle time)는 필수 입력 항목으로 최소 3초 이상 최대 60초 까지 지정할 수 있다.

 

만약, BaroPAM 검증모듈의 인증키 생성주기(Auth key cycle time)와 웹에서 지정한 인증키 생성주기(Auth key cycle time)가 다른 경우 일회용 인증키가 서로 달라서 로그인 할 수 없는 경우가 발생할 수 있다.

 

"One Time Auth key" 버튼을 클릭하면 새로운 2차 인증 키(일회용 인증키)가 생성되는데, 인증키 생성주기(Auth key cycle time) 동안은 동일한 2차 인증 키(일회용 인증키)가 발생하며, 새로 생성한 일회용 인증키를 다음과 같이 Message box로 화면상에 나타난다.

 

 

"Update" 버튼을 클릭하면 제일 먼저 입력 항목들의 유효성을 확인 한 후 Application 로그인에 대한 정보를 수정하는 작업을 진행한다.

 

"Delete" 버튼을 클릭하면 "로그인 정보를 삭제 하시겠습니까?"라는 Message box가 나타나며, "확인" 버튼을 클릭하면 해당 Application 로그인에 대한 정보를 삭제하는 작업을 진행되며, "취소" 버튼을 클릭하면 삭제 작업이 취소된다.

 

 

"List" 버튼을 클릭하면 현재 화면을 종료하고 위 12번의 로그인 정보 관리 목록 화면이 나타난다.

 

시스템명(System name)이 입력하지 않은 경우 "시스템명을 입력해주십시오."라는 메시지가 화면에 나타난다.

 

로그인-ID(Login-ID)가 입력하지 않은 경우 "로그인-ID를 입력해주십시오."라는 메시지가 화면에 나타난다.

 

인증키 생성주기(Auth key cycle time)가 입력하지 않거나 범위를 벗어난 경우 "인증키 생성주기를 입력 또는 확인해주십시오."라는 메시지가 화면에 나타난다.

 

로그인 정보 수정(Update) 또는 삭제(Delete)가 정상적으로 완료되지 못하면 "로그인 정보 수정/삭제" 화면이 지속되며, 정상적으로 완료되면 16번과 같은 "로그인 정보 목록" 화면이 나타난다.

 


20. 오른쪽 상단에 있는 "메뉴" 버튼을 클릭한 후 상세메뉴에서 "Pin 번호 관리" 메뉴를  클릭하면 다음과 같이 "Pin 번호 변경" 화면이 나타난다.

 

4.2 Pin번호 변경.jpg

 

▣현재 Pin 번호

 

현재 설정된 Pin 번호(Pin number) 8자리를 입력한다.

 

▣새로운 Pin 번호

 

새로운 설정할 Pin 번호(Pin number) 8자리를 입력한다.

▣휴대전화

 

사용하는 휴대폰 번호를 숫자 11자리를 입력한다.

 

"Update" 버튼을 클릭하면 제일 먼저 입력 항목들의 유효성을 확인 한 후 새로운 Pin 번호(Pin number)를 저장하는 작업을 진행한다.

 

만약, Pin 번호(Pin number)6자리가 아닌 경우 "Pin 번호 8자리를 입력해주십시오."라는 메시지가 화면에 나타난다.

 

 

 

현재 설정된 Pin 번호(Pin number)와 새로 입력한 Pin 번호(Pin number)가 다른 경우 "현재 Pin번호가 틀립니다. 다시 확인 후 입력해주십시오."라는 메시지가 화면에 나타난다.

 

현재 설정된 Pin 번호(Pin number)와 새로운 Pin 번호(Pin number)가 동일한 경우 "현재 Pin번호와 새로운 Pin번호가 동일합니다. 다시 확인 후 입력해주십시오."라는 메시지가 화면에 나타난다.

 

만약, 새로운 Pin 번호(Pin number)8자리가 아닌 경우 "새로운 Pin 번호 8자리를 입력해주십시오."라는 메시지가 화면에 나타난다.

 

새로운 Pin 번호(Pin number) 저장이 정상적으로 완료되지 못하면 "Pin 번호 변경" 화면이 지속되며, 정상적으로 완료되면 2번과 같은 로그인 화면이 나타난다.

 

 

 

6. About BaroPAM

 

Version 1.0 - Official Release - 2016.12.1

Copyright ⓒ Nurit corp. All rights reserved.

http://www.nurit.co.kr

 

상호 : 주식회사 누리아이티

등록번호 : 258-87-00901

대표이사 : 이종일

대표전화 : 010-2771-4076(기술지원, 영업문의)

이메일 : mc529@nurit.co.kr

주소 : 서울시 강서구 공항대로 186, 617(마곡동, 로뎀타워)