2019년 5월 13일 월요일

[Network] DMZ의 정의

DMZ(De-Militarized Zone)

- 보안을 위하여 내부/외부 네트워크를 분리할 때, 외부로 서비스는 제공하면서 내부의 보안을 유지하기 위한 방법입니다.
- 내부망과 외부망 사이에 위치한 네트워크입니다.


내부망
- 인터넷이 아닌 내부 네트워크를 통해 자원을 공유하거나 그룹웨어 등을 사용할 수 있는 LAN 환경입니다.
- 물리적 망분리, 접근 통세 시스템 등에 의하여 인터넷 구간에서 직접적인 접근이 통제/차단 되는 구간입니다.

외부망
- 인터넷을 통한 네트워크로 인터넷과 직접 연결되어 있는 구간입니다.

DMZ(De-Militarized Zone)
- 외부에 서비스 제공 시 내부 자원 보호를 위하여 내부망과 외부망 사이에 접근 제한을 수행하는 영역입니다.
- 인터넷 구간과 내부망 사이에 위치하며, 침입 차단 시스템 등으로 접근제한 등을 수행하지만 외부에서 접근은 가능합니다.
- 내부 네트워크와는 분리시킨 공간으로 DMZ의 호스트들은 내부 네트워크로 연결할 수 없습니다.

- 외부에서 악의적 공격자가 기업 내부 네트워크에 직접 접속하지 못하도록 차단하고 보호합니다.
- 일반적으로 외부 공격으로부터 보호가 필요한 DB서버, 인증서 서버, 로그인 서버 등이 위치할 수 있습니다.



침입 차단 시스템
- 일반적으로 내부 방화벽이 내부망의 게이트웨이가 되고, NAT를 구성하여 내부망의 구성을 외부에서 알 수 없도록 숨깁니다.
- 외부 노출이 불가피한 장비만 보호된 망에 설치하고, 필수 연결 외에는 내부망과 완전히 격리하여 내부망을 보호합니다.
- 외부/내부 네트워크를 분리하고, 외부에서 DMZ는 들어올 수 있지만 내부로는 들어오지 못하도록 필터링을 합니다.
- 내부에서 외부나 DMZ로 가는 것을 방화벽으로 제한합니다.

- 각 네트워크는 서로 다른 포트를 사용하여 방화벽에 연결되며, 이를 삼각 방화벽 설정(Three-Legged Firewall Set-up)이라고 합니다.
- 강력한 구성을 위하여 두개의 방화벽을 사용할 수 있으며, DMZ는 두 방화벽 중간에 위치하게 됩니다.



참고자료

2019년 3월 19일 화요일

[윈도우] 원격 접속 시 클립보드 사용 제어

서버 원격 접속 시 보안을 위하여 클립보드 사용을 제어할 수 있습니다.


 > 로컬 그룹 정책 편집기 > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 터미널 서비스 > 원격 테스트톱 세션 호스트 > 로컬 장치 및 리소스 리디렉션 > 클립보드 리디렉션 허용 안 함
 > Local Group Policy Editor > Computer Configuration > Administrative Templates > Windows Components > Remote Desktop Services > Remote Desktop Session Host > Device and Resource Redirection > Do not allow Clipboard redirection


















- 설정 후 바로 적용되지 않을 경우 정책 강제 적용을 시도하여 해결할 수 있습니다.
 > gpupdate /force
- gpupdate 수행 후에도 적용되지 않을 경우 로그오프 후 다시 로그온하여 해결할 수 있습니다.



**정책 설정이 되지 않았지만 클립보드를 사용할 수 없는 경우 다음 사항을 확인할 수 있습니다.
- 원격 접속 시 "로컬 리소스"의 "클립보드" 항목 활성화
- 서버의 "rdpclip.exe" 프로세스 활성화
- "rdpclip.exe" 프로세스 종료 후 재시작



참고자료
http://hahaysh.blog.me/221258322450
https://annotations.tistory.com/45
https://forsenergy.com/ko-kr/tscc/html/13f07ba4-f29c-464f-ac90-9db2f27ddd03.htm

[윈도우] 원격 접속 세션 수 제어

서버에 원격으로 접속할 수 있는 세션의 수를 제어할 수 있습니다.


- 보안을 위하여 한 계정에 접속할 수 있는 원격 세션 수를 제한할 수 있습니다.
- 기본적으로 단일 세션으로 구성됩니다.
- 운영 편의를 위하여 세션 수를 늘리고, 같은 계정으로 동시에 작업을 수행할 수 있습니다. (별도 세션)


 > 로컬 그룹 정책 편집기 > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 터미널 서비스 > 원격 테스트톱 세션 호스트 > 연결 > 원격 데스크톱 서비스 사용자를 하나의 원격 테스크톱 서비스 세션으로 제한
 > 로컬 그룹 정책 편집기 > 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > 터미널 서비스 > 원격 테스트톱 세션 호스트 > 연결 > 연결 개수 제한



- 세션 제한을 비활성화 한 후, 연결 개수 제한 항목을 필요한 만큼 설정할 수 있습니다.



 > Local Group Policy Editor > Computer Configuration > Administrative Templates > Windows Components > Remote Desktop Services > Remote Desktop Session Host > Connections > Limit number of connections
 > Local Group Policy Editor > Computer Configuration > Administrative Templates > Windows Components > Remote Desktop Services > Remote Desktop Session Host > Connections > Restrict Remote Desktop Services users to a single Remote Desktop Services session

** Local Group Policy Editor: gpedit.msc


 - 세션이 다수일 경우 접속 시 세션 선택 화면이 표시될 수 있습니다.


참고자료
https://suinautant.tistory.com/57

[윈도우] administrator 계정명 변경

보안을 위하여 기본 관리자 계정인 Administrator 이름을 변경할 수 있습니다.


계정관리
- 보안을 위하여 계정을 안전하게 관리하는 것이 중요합니다.
- 계정의 수를 줄이는 것이 좋습니다.
- 관리자 계정 Administrator를 변경하는 것이 좋습니다.
- 잘 알려진 계정명을 사용할 경우 외부 공격자의 공격을 받을 수도 있습니다.


설정방법
- 제어판 > 관리도구 > 로컬 보안 정책
- 로컬 정책 > 보안 옵션 > 계정: Administrator 계정 이름 바꾸기

















**로컬 보안 정책: secpol.msc


참고자료
https://blog.naver.com/minki0127/220693786722


2019년 3월 12일 화요일

[용어] Hadoop 개요 및 주요 구성 요소

Apache Hadoop, High-Availability Distributed Object-Oriented Platform 관련 내용


개요
- 빅데이터를 처리하는 컴퓨터(클러스터)에서 동작하는 자바 기반의 분산 응용프로그램 지원 프레임워크입니다.
- 오픈소스 프레임워크로, 분산 환경에서 빅데이터를 저장하고 처리할 수 있습니다.
- 방대한 규모의 빅데이터 외에도 규모를 축소하여 원하는 환경에 사용할 수 있습니다.

- 처리할 데이터가 늘어날 때 필요한 컴퓨팅 자원도 늘어나며, 컴퓨터의 능력에 따라 처리량이 영향을 받습니다.
- 분산처리를 통해 많은 데이터를 저장하고 처리합니다.
- 하둡이 적용된 시스템은 데이터처리 효율이 증가합니다.
- 분산처리를 제어하여 저렴한 비용으로 원하는 크기의 데이터 저장소를 확보할 수 있습니다.


주요 구성요소
HDFS(Hadoop Distributed FileSystem): 네트워크에 연결된 기기에 데이터를 저장하는 분산형 파일 시스템입니다.
MapReduce: 대용량 데이터 처리를 위한 분산 프로그래밍 모델로, 대규모 분산 컴퓨팅 환경에서 대량의 데이터를 병렬로 분석합니다.
- 기타 Ambari, Zookeeper, HBase, Pig, Hive, HCatalog가 있습니다.
- 쉽고 다양한 환경에서 활용성을 높이기 위하여 사용되는 소프트웨어들입니다.
하둡 에코시스템이라고도 합니다.


맵리듀스
- 구글에서 제작한 프레임워크입니다.
- 대용량 데이터 처리를 분산 병렬 컴퓨터 환경에서 처리하기 위하여 제작되었습니다.
- PB(1024TB) 이상의 대용량 데이터를 클러스터 환경에서 병렬 처리할 수 있습니다.
- 함수형 프로그램에서 Map과 Reduce라는 함수 기반으로 구성됩니다.


Zookeeper
- 대표적인 시스템 코디네이션 서비스 시스템입니다.
  분산된 시스템 간 정보 공유, 클러스터 내 서버들의 상태 체크, 동기화 및 lock처리 등을 수행합니다.
- 중복 서비스를 통해 고가용성을 제공합니다.
- 아파치 하둡의 하위 프로젝트로 시작하였지만 독립적인 상위 프로젝트입니다.
- 마스터가 응답하지 않을 때 클라이언트가 다른 마스터에게 요청합니다.
- 노드들은 네임스페이스 안에 데이터를 저장합니다.
- 클라이언트들은 노드에서 읽거나 쓰는 작업을 수행합니다.


HBase
비관계형 분산 데이터베이스입니다.
- 아파치에서 구글의 Big Table을 참고하여 Java로 제작되었습니다.
- 하둡의 HDFS 위에서 동작합니다.
- 분산된 데이터 저장을 위한 무정지 기능을 제공합니다.
- HBase의 테이블들은 하둡에서 동작하는 맵리듀스 작업을 위한 입출력을 제공합니다.
- 기존의 SQL DB를 직접적으로 대체하지는 않지만 데이터를 많이 사용하는 웹사이트 등에 사용됩니다.


Hive
- 하둡에 저장된 데이터를 쉽게 처리할 수 있는 데이터 웨어하우스 패키지입니다.
- 데이터 요약, 질의 및 분석기능을 제공합니다.
- HDFS이나 아파치 HBase와 같은 데이터 저장 시스템에 저장되어 있는 대용량 데이터 집합들을 분석합니다.
HiveQL이라는 언어를 제공하며, 맵리듀스의 모든 기능을 지원합니다.
- 빠른 쿼리를 위하여 인덱스 기능을 제공합니다.
- 내장된 아파치 Derby 데이터베이스 안에 메타데이터를 저장합니다.
- MySQL과 같은 다른 DB를 사용할 수도 있습니다.


참고자료

[리눅스] netstat 명령 상태 메시지의 의미

리눅스 netstat 명령 상태 메시지의 의미

LISTEN: 데몬 실행 중 접속 요청을 기다리는 상태입니다.
CLOSE_WAIT: 어플리케이션으로부터 연결 종료를 기다리는 상태입니다.
 > 소켓 프로그래밍에서 명시적으로 연결을 끊어주지 않으면 CLOSE_WAIT상태로 영원히 남아 시스템 자원의 손실을 초래할 수 있습니다.
ESTABLISHED: 서버와 클라이언트 간 연결이 성립되어 통신 중인 상태입니다.

CLOSED: 완전히 연결이 종료된 상태입니다.
TIME_WAIT: 연결은 종료되었지만 당분간 소켓을 열어놓은 상태입니다. 기본값(Default)은 120초.

SYS-SENT: 연결을 요청한 상태입니다.
SYN_RECEIVED: 연결 요청에 응답 후 확인을 기다리는 상태입니다.


참고자료



+ netstat 옵션
netstat -apn | grep 4118
-a 모든 연결을 출력
-p 해당 소켓과 관련된 프로세스 이름과 PID 출력
-n DNS질의를 비활성화. 빠른 응답과 IP출력.

2019년 3월 11일 월요일

[용어] SSL 통신 개요 및 통신 과정

SSL 통신에 대한 내용과 통신 과정

- 서버와 클라이언트가 주고 받는 패킷을 암호화 하여 전송하는 통신방식입니다.
- HTTPS는 SSL 프로토콜 위에서 작동하는 프로토콜입니다.
- 통신을 위하여 SSL 디지털 인증서를 사용하며, 이는 통신을 제 3자가 보증해주는 전자 문서입니다.

SSL 인증서
- 서버 접속 직후 클라이언트에게 정보를 전달하며, 접속하려는 서버가 신뢰할 수 있는 서버인지 판단할 수 있고, 통신 내용의 악의적 변경을 방지할 수 있습니다.
- 인증을 담당하는 기업들을 CA(Certificate authority) 혹은 Root Certificate라고 하며, 엄격하게 공인된 기업입니다.
- 테스트 등의 목적으로 사설 CA의 인증서를 사용할 수 있고, 개인이 직접 역할을 수행할 수 있습니다.
- 사설 인증서를 사용하는 경우 브라우저에서 경고를 출력합니다.

- 인증서에는 서비스의 정보(발급 CA, 서비스 도메인 등)와 서버 측 공개키(공개키 내용, 공개키 암호화 방법)가 포함됩니다.
- 웹브라우저는 CA리스트를 파악하고 있으며, 목록에 포함된 CA만 공인 CA로 인식합니다.

통신 과정
1. Client Hello: 클라이언트가 서버에 접속합니다. 이 단계에서 다음의 정보를 주고 받습니다.
 - 클라이언트 측에서 생성한 랜덤 데이터 : 아래 3번 과정에서 생성됩니다.
 - 클라이언트가 지원하는 암호화 방식들 : 클라이언트와 서버가 지원하는 암호화 방식이 서로 다를 수 있기 때문에 어떤 암호화 방식을 사용할 것인지 결정이 필요합니다. 이를 위해 클라이언트 측에서 사용할 수 있는 암호화 방식을 전송합니다.
 - 세션 아이디 : 이미 SSL 핸드쉐이킹을 했다면 비용과 시간을 절약하기 위해서 기존의 세션을 재활용하게 되는데 이 때 사용할 연결에 대한 식별자를 서버 측으로 전송합니다.

2. Server Hello: Client Hello에 대한 서버의 응답입니다. 이 단계에서 다음의 정보를 주고 받습니다.
 - 서버 측에서 생성한 랜덤 데이터 : 아래 3번 과정에서 생성됩니다.
 - 서버가 선택한 클라이언트의 암호화 방식 : 클라이언트가 전달한 암호화 방식 중에서 서버 쪽에서도 사용할 수 있는 암호화 방식을 선택해서 클라이언트로 전달합니다. 결정된 암호화 방식을 이용해서 정보를 교환하게 됩니다.
 - 인증서

3. CA리스트 확인 및 키 생성/전송
- 클라이언트는 서버의 인증서가 CA에 의해서 발급된 것인지를 확인합니다.
- CA 리스트에 인증서가 없다면 사용자에게 경고 메시지를 출력합니다.
- 인증서가 CA에 의해서 발급된 것인지 확인하기 위하여 클라이언트에 내장된 CA의 공개키를 사용해 인증서를 복호화합니다.
- 복호화에 성공했다면 인증서는 CA의 개인키로 암호화된 문서임이 보증되며, 인증서를 전송한 서버를 신뢰할 수 있습니다.

- 클라이언트는 위 2번 과정에서 받은 서버의 랜덤 데이터와 클라이언트가 생성한 랜덤 데이터를 조합하여 pre master secret이라는 키를 생성합니다.
- 이 키는 뒤의 세션 단계에서 데이터를 주고 받을 때 암호화하기 위해서 사용됩니다.
- 이 때 사용할 암호화 기법은 대칭키이며, pre master secret 값은 제 3자에게 절대로 노출되어서는 안 됩니다.

- pre master secret 값을 서버에게 전달하기 위하여 서버의 공개키로 pre master secret 값을 암호화합니다.
- 값을 전송하면 서버는 자신의 비공개키로 안전하게 복호화합니다.
- 서버의 공개키는 서버로부터 받은 인증서 안에 포함됩니다.

4. 세션키 생성/공유
- 서버는 클라이언트가 전송한 pre master secret 값을 자신의 비공개키로 복호화합니다.
- 서버와 클라이언트가 모두 pre master secret 값을 공유하게 되면 서버와 클라이언트는 모두 일련의 과정을 거쳐서 pre master secret 값을 master secret 값으로 변환합니다.
- master secret은 session key를 생성합니다.
- session key 값을 사용해 서버와 클라이언트는 데이터를 대칭키 방식으로 암호화 한 후에 주고 받습니다.
- 위 과정을 통해 세션키를 클라이언트와 서버가 모두 공유하게 됩니다.

5. 클라이언트와 서버는 핸드쉐이크 단계의 종료를 서로에게 알립니다.

SSL 통신의 보안
- SSL은 안전하다는 인식이 있지만 패킷이 암호화되어 IPS 등의 검사 없이 통과할 수 있기 때문에 오히려 위험할 수 있습니다.
- 암호화 통신을 통하여 위협 개체가 검사 없이 통과할 가능성이 존재합니다.
- 이를 검사하기 위해 복호화 기술을 함께 사용할 수 있지만 성능 저하와 과부하문제를 고려해야 하며, 이로인한 서비스 중단의 위험이 있습니다.
- SSL기반으로 C&C 통신을 하는 악성코드의 경우 트래픽을 식별하는데 한계가 있습니다.


참고자료

2019년 3월 6일 수요일

[용어] 환경변수 path

윈도우에서 사용할 수 있는 환경변수, path 관련 내용

- 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는 동적인 값들의 모임입니다.
- 시스템에서 사용할 수 있는 변수를 의미합니다.
- ".BAT" 확장자를 가지는 일괄 처리 파일이나 스크립트 안에서 활용될 수 있습니다.
- 일반적으로 변수 이름 주변이나 앞에 "%", "$" 등의 기호를 사용하여 참조합니다.

- 다음과 같은 명령으로 변수 내용을 확인할 수 있습니다.
 > echo %PATH%
 # echo $PATH


path변수
- 시스템 디렉터리 경로의 목록을 저장하는 변수입니다.
- CLI 환경에서 전체 경로를 지정하지 않고 명령/프로그램을 입력하면 이 목록을 확인합니다.

- 현재 경로에 프로그램이 없을 때 시스템은 성능을 위하여 모든 경로를 검색하지 않습니다.
- 같은 이름을 갖는 다른 파일이 실행되어 발생할 수 있는 위험을 방지합니다.
- CLI 환경에서 자주 사용하는 명령/프로그램을 보다 쉽게 사용하기 위하여 추가 설정할 수 있습니다.


참고자료
https://ko.wikipedia.org/wiki/%ED%99%98%EA%B2%BD_%EB%B3%80%EC%88%98
http://mwultong.blogspot.com/2006/03/path.html
https://booolean.tistory.com/403
https://c-calliy.tistory.com/42

2019년 3월 5일 화요일

[리눅스] 사용자 식별자 uid(gid)와 id명령어

리눅스에서 사용자 식별을 위한 uid(gid)와 uid 조회를 위한 명령어 id에 대한 내용

- 사용자 식별을 위하여 유저 아이디(UID)로 구분합니다.
- 양의 정수로 0부터 32767까지(16bit) 사용합니다.
- 0은 무조건 슈퍼유저(root)입니다.

- 시스템에 따라서 시스템 용도로 예약되어 있는 경우도 있습니다.
- 보통은 1부터 100까지 이며, RedHat은 101부터 499까지, 데비안은 999까지 예약되어 있습니다.
- 사용자 정보가 담긴 파일 /etc/passwd 파일에서 uid로 사용자를 구분합니다.

- 그룹을 통해 사용자를 묶을 수 있으며 그룹에는 GID가 부여됩니다.
- 루트의 그룹은 항상 0입니다.
- /etc/passwd와 /etc/group 파일로 확인할 수 있습니다.

- id 명령어로 자신의 uid, gid, 그룹을 확인할 수 있습니다.


참고자료

[리눅스] 패스워드 관리 - shadow의 구조

리눅스 시스템의 패스워드 관리 방법

- 리눅스에서는 사용자의 정보를 /etc/passwd 파일에 보관합니다.
- passwd파일의 수정은 불가하지만 누구나 볼 수 있습니다.
- 과거에는 패스워드 정보도 함께 포함되었지만, 보안상의 이유로 /etc/shadow 파일에 별도 보관됩니다.
- shadow파일은 root만 읽을 수 있도록 설정되어 있습니다. (퍼미션 400)

- shadow에 저장되는 패스워드는 단방향 해시함수에 의하여 암호화됩니다.
  "A > B"는 가능하지만, "B > A"는 어렵습니다.
- 패스워드는 임의의 값(salt)과 추가 연산되어 보안을 강화하여 저장됩니다.


shadow의 구조 
- 9개 항목으로 구성되며, 각 항목은 콜론(:)으로 구분됩니다.
 1. Login Name: 사용자 계정
 2. Encrypted: 패스워드를 암호화시킨 값 (다시 3개의 항목으로 나뉘며, "$"로 구분됩니다.)
 3. Last Changed: 1970년부터 1월 1일부터 패스워드가 수정된 날짜의 일수를 계산
 4. Minimum: 패스워드가 변경되기 전 최소사용기간 (일)
 5. Maximum: 패스워드 변경 전 최대사용기간 (일)
 6. Warn: 패스워드 만기일 전 경고 메시지 제공 기간
 7. Inactive: 로그인 접속 차단(패스워드 파기/비활성화) 기간
 8. Expire: 로그인 사용을 금지하는 계정 만료 기간 (월/일/연도)
 9. Reserved: 사용되지 않음 (예약필드)



**암호화된 패스워드는 다음의 구조로 저장됩니다.
 [$Hashid $Salt $Hash vlaue]
Hashid 
- 어떤 "scheme"을 사용했는지 표시합니다.]
- 사용한 scheme에 따라 값이 달라지며, 주로 $1, $5, $6이 사용됩니다.

Salt 
- 해시함수의 특성상 해시 값으로 원래 값을 구할 수 없습니다.
- 공격자들은 모든 해시 쌍을 미리 구해놓은 "레인보우테이블"을 사용하여 크래킹을 시도합니다.
- 이를 통해 값을 대입하여 고속으로 패스워드를 크랙할 수 있습니다.
- 레인보우 테이블의 사용을 방해하기 위하여 "salt" 값을 넣습니다.
- salt는 해시 함수가 참고하는 임의의 값입니다.
- salt값을 모른다면 레인보우테이블을 가지고 있어도 의미가 없습니다.

Hash value 
hashid의 방법과 salt값을 가지고 해시함수를 수행한 결과입니다.



참고자료

[리눅스] 사용자 및 그룹 관리와 관련 파일

리눅스의 사용자 및 그룹 관리방식과 관련 파일 내용

개요
- 사용자 및 그룹, 패스워드 등의 정보는 주로 /etc 디렉토리 하위에 저장됩니다.
- 사용자를 생성할 때 passwd, group, shadow 파일이 업데이트됩니다.
- 계정이 하나 생성되면 그룹도 함께 생성됩니다.
- 각 파일의 백업 파일은 파일명 끝에 하이픈(-)이 붙습니다.


주요 파일
- /etc/shells: 사용할 수 있는 쉘의 종류(목록)를 확인할 수 있습니다.
- /etc/default/useradd: 사용자 생성 시 적용되는 기본 정보입니다.
- /etc/login.defs: 사용자 생성 시 적용되는 기본 값이 저장된 파일입니다.
- /etc/skel: 이 디렉토리의 모든 파일은 사용자 생성 시 사용자의 홈디렉토리로 복사됩니다.


passwd 파일
- 필드 내용
 1. 사용자 이름
 2. 암호화된 비밀번호. 현재는 사용되지 않고, x만 표시
 3. 사용자의 UID. OS가 사용자에게 부여한 번호
 4. 사용자의 GID. 사용자가 속한 그룹에 부여된 번호
 5. 설명문
 6. 사용자의 홈 디렉토리
 7. 실행할 프로그램. 일반적으로 사용자의 로그인 쉘

- 7번 필드 내용으로 해당 계정의 로그인 가능 여부를 확인할 수 있습니다.
  로그인 불가: /bin/false, /sbin/lologin
  로그인 가능: /bin/bash, /bin/sh, /bin/ksh, /bin/csh

- 사용자 종류와 UID 할당 범위
  슈퍼유저(관리자): 로그인 가능. 시스템을 관리하는 사용자. (UID 0)
  시스템유저: 로그인 불가. 데몬이나 특정 프로그램을 실행하는 사용자. (UID 1 ~ 100)
  일반유저: 로그인 가능. 자신의 디렉토리에 자료를 관리하는 일반 사용자. (UID 500 ~ 65534)

**passwd 파일의 예


group 파일
- 필드내용
 1. 그룹명
 2. 그룹 비밀번호. x문자가 표시되며, /etc/gshadow 파일에 정보 포함
 3. 그룹 번호 GID
 4. 그룹 멤버 리스트. 여러 멤버가 있을 경우 “,”로 구분

- 주요 그룹
  root: 슈퍼유저 root가 속한 그룹
  wheel: 관리자 권한을 가진 그룹
  users: 일반 유저 권한을 가진 그룹


shadow 파일
- 필드정보
 1. 사용자명
 2. 암호화된 비밀번호
 3. 최근 비밀번호 변경일. 1970/1/1 기준 날짜 수
 4. 비밀번호 변경 후 재설정을 위한 대기일
 5. 비밀번호 유효기간
 6. 비밀번호 변경 경고 시간
 7. 비밀번호 유효 기간
 8. 비밀번호 만료 기간 이후 계정 비활성화 되는 기간
 9. 사용되지 않는 예약영역

- 비밀번호를 보관하는 알고리즘은 authconfig 명령으로 변경할 수 있습니다.


참고자료

[리눅스] 사용자 정보 파일 passwd

파일의 경로는 다음과 같습니다.
 /etc/passwd

- 리눅스의 계정 정보를 담고 있는 텍스트 파일입니다.
- 패스워드 정보를 해시값으로 보관했으나, 최근 리눅스에는 포함하지 않습니다.
- 패스워드 정보는 "/etc/shadow"파일에 암호화되어 보관됩니다.

- 콜론(:)으로 필드를 구분하며 다음의 정보를 포함합니다.
 필드 1: 사용자명
 필드 2: 패스워드(/etc/shadow 파일에 암호화되어 있음)
 필드 3: 사용자 계정 uid
 필드 4: 사용자 계정 gid
 필드 5: 사용자 계정 이름(정보)
 필드 6: 사용자 계정 홈 디렉토리
 필드 7: 사용자 계정 로그인 쉘

보안관련 사항
- 리눅스 시스템은 UID, GID를 기준으로 권한을 부여합니다. root가 아니어도 값을 0으로 바꾸면 모든 권한을 갖게 됩니다.
- 쉘 필드를 변경하여 로그인 시 악성쉘이 실행되도록 할 수 있습니다.
- 위와 같은 사항을 염두하여 파일 내용의 변경 여부를 확인할 필요가 있습니다.


참고자료
http://webdir.tistory.com/129
https://zetawiki.com/wiki/리눅스_패스워드_파일_/etc/passwd
http://eunguru.tistory.com/88
http://webdir.tistory.com/133

2019년 2월 17일 일요일

[용어] RAID(Redundant Array of Independent(Inexpensive) Disks)의 개요와 종류

RAID(Redundant Array of Independent(Inexpensive) Disks)

개요
- 여러 개의 하드디스크, 다른 위치에 동일한 데이터를 중복 저장하는 방법입니다.
- 저장 방법에 따라 신뢰성을 높이거나 성능을 향상시킬 수 있습니다.
- 중요한 데이터를 서비스하는 서버에서 사용합니다.
- 하나의 RAID는 논리적으로 하나의 하드디스크로 인식됩니다.

- 고가용성(High Availability) 확보를 위하여 사용할 수 있습니다.
- RAID 0~6, 10, 50 등이 있습니다.
- 일부 방식은 단점을 보완하기 위하여 상위 레벨의 방식으로 대체할 수 있습니다.


주요 RAID의 종류/특징
RAID-0
- 개선된 성능추가적인 스토리지를 제공하기 위한 방식입니다.
- 데이터를 중복해서 기록하지 않기 때문에 자료의 안전은 보장되지 않습니다.


RAID-1
- 디스크 미러링이라고도 하며, 중복 저장된 데이터를 가진 두 개 이상의 드라이브로 구성됩니다.
- 각 드라이브를 동시에 읽을 수 있어 읽기 성능이 향상됩니다.
- 쓰기 성능은 단일 디스크 드라이브의 경우와 같습니다.
- 다중 사용자 시스템에서 최고의 성능과 최고의 고가용성을 발휘합니다.


RAID-3
- 패리티 정보를 저장하기 위해 별도의 드라이브 한 개를 사용합니다.
- 내장된 ECC 정보가 에러를 감지하는데 사용됩니다.
- 입출력 작업이 동시에 모든 드라이브에 대해 이루어지며, 입출력을 겹치게 할 수 없습니다.
- 대형 레코드가 많이 사용되는 업무에서 단일 사용자시스템에 적합한 방식입니다.


RAID-5
- 회전식 패리티 어레이를 포함합니다.
- 모든 읽기/쓰기 동작이 중첩될 수 있습니다.
- 패리티 정보를 저장하지만 데이터를 중복저장하지는 않습니다.
- 보통 3-5개의 디스크를 어레이로 요구합니다.
- 성능이 중요하지 않고 쓰기 작업이 많지 않은 다중 사용자시스템에 적합합니다.



참고자료
https://ko.wikipedia.org/wiki/RAID
http://www.terms.co.kr/RAID.htm
https://namu.wiki/w/RAID
https://www.acnc.com/raidedu/0
http://www.itworld.co.kr/news/90863

http://www.zdnet.co.kr/view/?no=00000039146265
https://kimhyun2017.tistory.com/17

2019년 2월 11일 월요일

[윈도우] 세션, 윈도우 스테이션, 데스크탑

세션
- 프로세스는 프로세스를 시작시킨 사용자에게 속하며, 세션에 속합니다.
- 세션은 프로세스, 윈도우, 윈도우 스테이션, 데스크탑, 여러 리소스들을 포함합니다.
- 프로세스는 1개 세션에 속하고 각 세션은 세션 ID를 가지고 있습니다.
- 프로세스가 시작되면 세션을 바꿀 수 없습니다.

- XP이하에서 1개 이상의 세션이 동작하며, 비스타 이상은 최소 2개의 세션이 동작합니다.
- 세션의 수는 일정 숫자로 제한됩니다.

- 비스타 이상에서 윈도우의 서비스가 시작하는 곳은 Session 0입니다.
- 두번째 세션인 Session 1은 첫번째로 로그온한 사용자의 프로그램이 시작되는 곳입니다.
- 한 컴퓨터에서 여러 사용자를 로그온 시키면 많은 세션들이 생겨납니다.
- 터미널 서비스, 원격 데스크탑, 사용자 전환 등의 추가적인 로그온 동작으로 새로운 세션이 생겨납니다.

- 비스타 이전에는 첫번째로 로그인한 사용자가 Session 0를 공유하며, 상호작용이 허용되었습니다.
- 비스타부터는 사용자 세션과 서비스 세션이 완전히 분리되었고, 세션 0는 사용자와 상호작용도 할 수 없게 되었습니다.
- 이로써 서비스는 애플리케이션 코드로부터 안전함을 보장받을 수 있습니다.
- 서비스들은 상승된 권한에서 수행되기 때문에 세션을 공유하면 사용자 프로그램은 많은 것에 접근할 수 있게 됩니다.


윈도우 스테이션
- 세션은 윈도우 스테이션들과 한 개의 클립보드를 포함합니다.
- 윈도우 스테이션은 속한 세션에서 유일한 이름을 갖습니다.
- 다른 세션들 사이에서 2개의 윈도우 스테이션은 같은 이름을 가질수 있습니다.
- 스테이션이 생성되면 자신이 속해있는 세션을 변경할 수는 없습니다.

- 프로세스는 하나의 윈도우 스테이션에 속합니다.
- 프로세스는 시작된 이후에 자신의 윈도우 스테이션을 변경할 수 있습니다.

- 모든 세션에는 Winsta0이라고 불리는 특별한 윈도우 스테이션이 존재합니다.
- WinSta0은 사용자 인터페이스를 보여주고 사용자 입력을 받을 수도 있는 윈도우 스테이션입니다.
- 다른 윈도우 스테이션들은 GUI를 보여줄 수도 없고 사용자 입력을 받을 수도 없습니다.
- 프로세스는 윈도우 스테이션 안에 있는 데스크탑이나 클립보드에 접근할 수 있습니다.

- 모든 프로세스는 부모 프로세스를 가지고 있는데, 프로세스가 시작될 때 윈도우 스테이션을 설정하는 코드를 추가하지 않는다면 부모 프로세스의 윈도우 스테이션으로 설정됩니다.


데스크탑
- 윈도우 스테이션은 데스크탑을 여러개 가질 수 있습니다.
- 데스크탑은 커널 공간에 로드되는 논리적인 디스플레이 표면이며, 모든 GUI 객체들은 이 곳에 할당됩니다.
- 데스크탑은 세션에 속하며, 윈도우 스테이션에게도 속합니다.

- 각 세션에서는 오직 한번에 하나의 데스크탑만이 활성화 될 수 있습니다.
- 또한 반드시 WinSta0에 속해야 하고, 이런 액티브 데스크탑은 입력 데스크탑이라 부릅니다.

- WinSta0은 로그온 데스크탑, 기본 데스크탑, 스크린 세이버. 3개의 로드된 데스트탑을 가지고 있습니다.
- 비스타 이후부터 보안 데스크탑 이라는 4번째 데스크탑이 생겼는데, UAC(User Account Control)프롬프트에서 사용됩니다.
- 데스크탑을 잠글 때, 기본 데스크탑에서 로그온 데스크탑으로 스위치 되는 작업이 수행됩니다.


** 세션 > 윈도우 스테이션 > 데스크탑


참고자료
https://goo.gl/ecVZSx
https://goo.gl/g2mj7Q
https://goo.gl/UoHNZB

2019년 2월 10일 일요일

[R] 변수 & 데이터타입

개요
- 변수의 타입은 명시적으로 지정하지 않아도 사용 가능합니다.
- 변수명으로 알파벳, 숫자, "_"(언더바), "."(마침표)를 사용할 수 있습니다. "-"(하이픈) 사용 불가
- 변수명은 알파벳 또는 "."으로 시작해야 하며, "."뒤에는 숫자가 올 수 없습니다.

**1.9.0버전 이전에는 "_"를 사용할 수 없어 "."을 주로 사용하였습니다.
 > 객체 속성 접근과 같이 보이는 명명방식이 사용되기도 했습니다.


데이터타입
- 기본형은 "벡터"입니다.
- 다음 6가지 데이터타입이 있습니다.
  > 요인, 벡터, 리스트, 행렬, 배열, 테이터 프레임
- 벡터의 길이가 1인 것을 "스칼라"라고 합니다.
- class를 호출하여 문자열로 데이터타입을 반환할 수 있습니다.


참고자료
https://sjh836.tistory.com/112

2019년 1월 31일 목요일

[리눅스] passwd 옵션

개요
- 특정 사용자의 패스워드를 변경합니다.
- 사용자명을 입력하지 않을 경우 root의 패스워드가 변경됩니다.

 # passwd <userID>


옵션
-l
계정 사용을 차단 (lock)

-u
계정 차단 해제 (unlock)

-S
계정/패스워드 설정 정보 확인

-d
계정 패스워드를 사용하지 못하게 함 (Removing password)



참고자료
https://crazyit.tistory.com/entry/passwd-%EA%B8%B0%EB%B3%B8%EC%A0%81%EC%9D%B8-%EC%98%B5%EC%85%98
https://btyy.tistory.com/tag/passwd%20%EC%98%B5%EC%85%98

2019년 1월 30일 수요일

[리눅스] LVM - Logical Volume Manager

개요
- 리눅스 커널에 논리 볼륨 관리 기능을 제공합니다.
- 물리적 디스크를 논리적으로 할당하여 유연하게 관리할 수 있습니다.
- Software RAID와 유사한 기능을 수행합니다.

- 일반적인 파티션은 크기가 고정적으로, 추가 용량이 필요할 경우 복잡한 절차가 필요합니다.
- LVM 없이 디스크를 추가할 경우 기존 파티션의 내용을 새로운 파티션에 복사하게 됩니다.
- 추가된 용량은 기존 데이터를 복사한 후 남은 용량만 추가됩니다.

- LVM을 통해 필요한 용량의 디스크를 추가할 수 있고, 용량이 필요한 파티션에 추가할 수 있습니다.
- 불필요하게 많이 할당된 파티션의 용량을 줄일 수도 있습니다.


LVM 개념도



주요 관련 용어
물리볼륨 (PV, Physical Volume)
- 각각의 파티션을 LVM으로 사용하기 위해 형식을 변환시킨 것을 의미합니다.(/dev/ hda1, /dev/hda2 등)

논리볼륨 (LV, Logical Volume)
- 사용자가 다루게 되는 부분이며, 마운터 포인터로 사용할 실제 파티션. 크기를 확장/축소할 수 있습니다.

볼륨그룹 (VG, Volume Group)
- PV로 되어 있는 파티션을 그룹으로 설정합니다.
- /dev/sda1 을 하나의 그룹으로 만들 수도 있고, 두 개 파티션을 하나의 그룹으로 만들 수도 있습니다.
  (예: /dev/sda1 + /dev/sda2)

물리적 범위 (PE, Physical Extent)
- LVM이 물리적 저장공간(PV)을 가리키는 단위입니다. (기본 단위는 4MB)

논리적 범위 (LE, Logical Extent)
- LVM이 논리적 저장공간(LV)을 가리키는 단위입니다. (기본 단위는 물리적 범위와 동일)

VGDA (Volume Group Descriptor Area)
- 볼륨그룹의 모든 정보가 기록되는 부분입니다.
- VG의 이름, 상태, 속해있는 PV, LV, PE, LE들의 할당 상태 등 을 저장합니다.
- VGDA는 각 물리볼륨의 처음부분에 저장됩니다.


참고자료
https://ko.wikipedia.org/wiki/%EB%85%BC%EB%A6%AC_%EB%B3%BC%EB%A5%A8_%EA%B4%80%EB%A6%AC%EC%9E%90
http://sgbit.tistory.com/12
https://wiki.kldp.org/HOWTO/html/LVM-HOWTO/x57.html
https://idchowto.com/?p=12279

2019년 1월 29일 화요일

[oracle] RAC 란

개요
- Real Application Cluster
- 9i버전부터 사용 가능합니다.

- 하나의 DB에 여러 개의 instance를 구성하는 방식입니다.
- 일부 instance 서버에 문제가 생겨도 storage에 저장된 데이터를 사용할 수 있습니다.

- 서로 다른 instance에서 변경된 데이터를 디스크 경유 없이 바로 instance로 가져올 수 있는 Cache Fusion 기능이 사용됩니다.


**Oracle 구성 방식
Single Server
 - 하나의 storage에 하나의 instance를 연결한 구조입니다.
 - instance 장애 발생 시 storage 데이터에 접근할 수 없습니다.
 - OPS(8i버전까지) 또는 RAC(9i버전부터)를 통해 문제를 해결할 수 있습니다.

HA(High Availability) 구성
 - 같은 장비를 두개 구축하여 이중화 하는 방식입니다.
 - Active-Standby로 구성하여 Active서버에 문제발생 시 Standby서버가 Active로 전환됩니다.
 - 동일한 장비를 구축하기 위하여 비용이 많이 발생합니다.
 - Standby서버의 자원이 낭비됩니다.
 - Standby서버가 동작할 때, 데이터 유실이 발생할 수 있습니다.
   (Active서버 다운 직전의 데이터가 Standby서버에 동기화 되지 않은 경우)
   > 데이터 미러링 방식에 따라 성능이 결정됩니다.

OPS(Oracle Parallel Server)
 - 하나의 storage에 두개의 instance로 구성됩니다.
 - storage를 공유하기 때문에 다른 instance에서 같은 데이터를 조회/변경할 수 있습니다.
 - 부하 분산 및 서비스 중단 없이 장애 복구가 가능하며, 동기화 문제도 해결됩니다.
 - 두 instance가 직접 연결되지 않기 때문에 반드시 Disk를 통해서 데이터를 교환합니다.
   > RAC Ping현상, 특정 instance에서 변경한 데이터가 다른 instance에 적용될 때 지연. (성능저하)

RAC
 - OPS의 RAC Ping문제를 개선하여 성능이 크게 향상되었습니다.
 - 서로 다른 instance에서 변경된 데이터를 디스크 경유 없이 바로 instance로 가져옵니다. (Cache Fusion)

RAC 관련 용어
 - Interconnet(Private Network)기능을 통해 instance간 데이터를 직접 주고 받을 수 있습니다.
   > 각 instance를 연결하는 망
 - Public Network: RAC 유지보수를 위하여 관리자가 사용하는 망
 - VIP Network: 외부 사용자들이 접속하는 망. 서비스 제공 망


참고자료
https://seandb.tistory.com/entry/RAC-%EA%B5%AC%EC%A1%B0
https://rosebud90.tistory.com/entry/Oracle-RAC%EB%9E%80

2019년 1월 24일 목요일

[용어] HP서버 iLO

개요
- HP에서 만든 임베디드 서버관리 기술입니다.
- 기본 NIC 외 물리적 이더넷 포트를 사용하여 원격지에서 HP 서버 활동을 수행합니다.
- ProLiant 서버 사용자에게 제공되며, 원격 접속 포트로 시스템에 접속합니다.
- 시스템 앞에서 사용하는 것과 같은 환경을 제공하여 서버를 효율적으로 관리할 수 있습니다.
- 별도의 라이선스가 필요합니다.


주요기능
- 서버 Reset 및 부팅
- 웹을 이용한 서버 원격 콘솔 화면 보기
- 원격지에서 물리적인 CD/DVD 드라이브 및 이미지 마운트
- 서버 Integrated Management Log 접근


특징
- H/W 수준의 장애 발생 시 서버를 직접 조작하지 않고, 대부분의 작업 수행이 가능합니다.
- 웹 브라우저를 통해 접속하며, java를 통한 remote console을 표시합니다.
- 일반적인 원격 접속과 달리 시스템의 모든 부팅 과정을 확인할 수 있습니다.
- 시스템 전원을 원격에서 제어할 수 있습니다. (on/off)
- Local의 CD-ROM을 원격 시스템의 CD-ROM처럼 사용할 수 있습니다.


참고자료
https://codebox-j.tistory.com/10
http://blog.naver.com/itu_itu/220085593905
http://blog.baekpro.com/220572024948

[DB] Apache Sqoop 이란

개요
- Sqoop은 SQL to Hadoop의 약어입니다.

- 관계형 데이터베이스와 Hadoop 간 데이터 이관을 지원하는 툴입니다.
- RDB와 Hadoop 간 대량 데이터 전송이 가능합니다.
- Sqoop을 사용하면 RDB 데이터를 "HDFS, 하이브, Hbase"에 Import/Export할 수 있습니다.
- 클라우데라에서 개발하였고, 아파치 오픈소스 프로젝트로 공개되었습니다.

아키텍처
- RDB를 읽고 쓸 수 있는 "커넥터"라는 개념을 사용합니다.
- 커넥터는 각 DB별로 구현되어 있습니다.
- JDBC 드라이버를 사용해 DB접속 및 쿼리 실행을 요청합니다.



참고자료
https://excelsior-cjh.tistory.com/56
https://tomining.tistory.com/54
https://docs.ncloud.com/ko/hadoop/chadoop-4-1.html

[Network] VLAN - Virtual Local Area Network

기본 개념
- 물리적 단일 LAN 환경에서 논리적으로 LAN을 분리하여 사용합니다.
- 각 VLAN은 별개의 Broadcast Domain으로 구성됩니다.
- LAN규모가 커질 때, broadcast traffic의 증가로 인한 성능 저하를 개선할 수 있습니다.
  (ARP Request, NetBIOS Name Query & Election, Unknown unicast, Unknown Multicast)
- VLAN 간 라우팅을 위한 설정이 없으면 VLAN 간 통신이 불가능합니다. (보안기능)


VLAN의 종류
- Port-based VLAN: tagged/Untagged port로 구분됩니다.
- Protocol-based VLAN: Ethernet payload 내용에 따라 별개의 forwarding 정책을 적용합니다.
- IP-based VLAN: source IP에 의해 VLAN을 구분합니다.
- MAC-based VLAN
**IEEE Standard로 표준화된 것은 Port-based, Protocaol-based입니다.


Port-based VLAN
- 물리적 Port번호에 의하여 구분합니다.
- Member port를 설정하는 방식의 VLAN입니다.
- L2 forwarding이 가능한 논리적 LAN segment를 가리키는 포트들의 집합을 member port라고 합니다.

- 일반적으로 수신 포트와 출력 포트가 모두 같은 멤버일 경우만 L2 forwarding이 이루어집니다.
- 멤버 포트는 고정으로 설정될 수 있고, GVRP에 의하여 동적으로도 설정 가능합니다.
- 수신된 Ethernet frame이 어떤 VLAN 소속인지 구분하는 것을 VLAN classification이라고 합니다.

- Ethernet frame 내에 포함된 VLAN ID값을 VLAN tag라고 하며, tag에 의한 VLAN classification도 가능합니다.
  (포트 구분 없이 사용 가능)


Protocol-based VLAN
- Payload 내용에 따라 구분합니다.
- IPX, IPv4 등 내용에 따라 각 VLAN으로 구분합니다.


Access VLAN
- Switch port에 단순히 1개의 VLAN번호를 지정하는 것을 Access VLAN이라고 합니다.
- 해당 포트를 Access port라고 합니다.



참고자료
https://www.netmanias.com/ko/post/techdocs/4814/ethernet-network-protocol-vlan/basic-concept-of-vlan-virtual-lan
https://blog.naver.com/goduck2/220218907545
https://blog.naver.com/goduck2/221098695515
https://ko.wikipedia.org/wiki/%EA%B0%80%EC%83%81_%EB%9E%9C

[Network] STP - Spanning Tree Protocol

개요
- 스위치나 브릿지에서 발생하는 Looping을 막기 위한 프로토콜입니다.
- 다수의 Bridge로 구성된 네트워크에서 패킷은 목적지까지 여러 경로를 거칠 수 있습니다.
- 이로인한 Looping이 발생하지 않도록 막아주는 알고리즘이 포함된 프로토콜입니다.

- STP는 스위치나 브릿지에서 출발한 패킷이 목적지까지 하나의 경로만 갖도록 합니다.
- 경로가 하나기 때문에 Looping이 발생하지 않습니다.
- 경로가 하나일 경우 스위치에 문제가 생길 경우 서비스 중단이 발생할 수 있습니다.
- 이를 막기 위하여 새로운 경로를 만드는 기능도 포함합니다.

- 이중화 링크 구간에서 스위치 간 발생할 수 있는 Bridge Loop를 방지합니다.
- 이를 위하여 스위치의 특정 포트를 논리적으로 차단하여 프레임 전송을 막습니다.


참고자료
https://lureout.tistory.com/433
https://www.joinc.co.kr/w/man/12/stp
https://gsk121.tistory.com/102
https://www.netmanias.com/ko/post/techdocs/4620/ethernet-network-protocol/stp-spanning-tree-protocol-detailed-principles-of-operation

[Network] DMZ의 정의

DMZ (De-Militarized Zone) - 보안을 위하여 내부/외부 네트워크를 분리할 때,  외부로 서비스는 제공 하면서  내부의 보안을 유지 하기 위한 방법입니다. - 내부망과 외부망 사이에 위치한 네트워크입니다. ...