728x90

[1,2,3교시 - 데이터베이스 보안]

/ 데이터베이스 보안 설계
- 데이터베스 보안 : 내부 및 외부자가 데이터베이스 내에 저장된 조직의 주요 기밀 정보에 불법적으로 접근하는 것을 막는 것
- 보안 설계 : 데이터베이스에 저장된 데이터 보호를 위한 설계에 초점을 맞춘 것
- 보안 위협들은 사용자의 실수나 오용, 내부 사용자의 권한 남용, 비정상적인 접근, 취약점들로부터 시작

/ 주요 위협 요소
- 일반적인 데이터베이스 위협
    > SQL Injection
    > 악성 프로그램 삽입
- 사용자에 대한 식별 및 인증 위협
    > 사전 공격, 무작위 대입공격, 사회 공학적 기법
- 데이터 유출 위협
    > 암호화 되지 않은 데이터
    > 안전성이 확인되지 않은 암호 모듈을 사용하는 경우
- 권한 오남용 위협
    > 허용된 권한보다 더 많이 부여된 접근 권한
    > 악의적인 목적으로 허용된 권한 범위를 벗어나는 경우
- 암호 모듈 오용 위협
    > 안전성이 검증되지 않은 암호 모듈 사용
    > 적합하지 않은 암호 모드 사용
- 암복호화 키 및 마스터 키 노출 위협
    > 데이터 암호화 시 키 노출
- 프로젝트 수행과정에서의 데이터베이스 접근 허용 위협
    > 외부 작업자가 자사의 데이터에 접근할 수 있는 권한을 부여
- 운영과정에서 권한에 대한 관리 소흘로 인한 침해 발생 위협
    > 개발자에게  DBA 권한을 설정함
- 접근통제 우회
    > 디폴트계정 또는 단순 계정 등 계정번호와 비밀번호가 동일할 경우
    > 계정 및 패스워드의 정책 설정이 미흡한 경우
- 데이터베이스 정보의 불법 열람 및 변조/삭제 위협
    > 데이터베이스에 저장된 주요 정보에 대해 암ㅎ화가 미흡한 경우

 

/ 데이터베이스 보안 설계하기
1. 접근제어 설계
    1) 정보 식별(right information)
        - 데이터베이스, 계정, 테이블/뷰, 컬럼
    2) 사용자 식별(right people)
    3) 접근 방법(right form)
    4) 접근 시간(right time)
2. 암호화를 설계
- 데이터베이스에 접속할 수 있는 사용자에 대한 정의
- 데이터베이스에 접속하는 사용자 식별에 대한 방법
- 암호화 대상 컬럼의 범위 정의
- 암호화 컬럼에 대한 복호화 권한 통제 수행
- 암호화 키를 위한 알고리즘과 대상 정의
- 암호화 키 사용에 대한 로깅 수행
    1) 복호화 권한 통제
        - 사용자 식별, 암호화 대상 컬럼, 암호화 컬럼에 대한 복호화 권한 통제, 비인가 사용자에 대한 통제
    2) 암호화 키 및 알고리즘을 이용하여 구현
        - 암호화 키 : 암호화 알고리즘 + 파라미터 키
        - 암호화 방식 : 대칭형(암호화 키와 복호와 키 동일), 비대칭형(암호화 키와 복호화 키 다름)
        - 대칭형 알고리즘 : DES, 3-DES, AES, SEED, ARIA, MASK
        - 비대칭형 알고리즘 : RSA, DSA
3. 작업 결재를 설계
    1) 결재 대상을 정의
        - 사용자 중심, 정보 중심, SQL 중심
    2) 결재자를 정의
    3) 결재 사용자 관리
    4) 결재자 관리
4. 취약점을 분석/설계
    1) 데이터베이스 환경을 적정하게 구축
    2) 계정 관리를 한다.
    3) 패스워드 관리
    4) 권한 관리
    5) 인증 관리
    6) 원격접속 관리
        - 방화벽 구축
        - 기본 서비스 포트 사용 자제
        - 네트워크 트래픽 암호화
        - 데이터베이스 서버가 있는 시스템의 운영체제 강화
        - 보안 패치의 적용

/ 딕셔너리 조회 쿼리
SELECT * FROM DICTIONARY WHERE table_name LIKE 'USER_T%' AND ROWNUM < 10; 

 


 

[4,5교시 - 시스템 보안]

/ 어제 퀴즈 답

예) 분 시 일 월 요일
* * * * * test.sh

-> 1분마다 test.sh를 실행(한 시간에 60번 실행)
# * * * * * test.sh

-> 10분마다 test.sh를 실행(한 시간에 6번 실행)
# */10 * * * * test.sh

-> 매시 15분과 45분에 test.sh를 실행(한 시간에 2번 실행)
# 15,45 * * * * test.sh

-> 매시 30분에 test.sh를 실행(한 시간에 1번, 하루에 24번 실행)
# 30 * * * * test.sh

-> 6시간 간격으로 test.sh를 실행(하루에 4번 실행, 00:30, 06:30, 12:30, 18:30)
# 30 */6 * * * test.sh

-> 매일 새벽 1시 20분에 test.sh를 실행(하루에 한번 실행)
# 20 1 * * * test.sh

-> 매주 월요일 새벽 3시 10분에 test.sh를 실행(일주일에 한번 실행)
# 10 3 * * 1 test.sh

-> 매월 1일 새벽 3시 30분에 test.sh를 실행(1달에 한번 실행)
# 30 3 1 * * test.sh


/ 시험 준비
1. selinux 비활성화
# vi /etc/sysconfig/selinux
# sestatus
#
getenforce

2. httpd설치
yum list httpd
yum -y install httpd
# systemctl start httpd
# systemctl enable httpd
# systemctl status httpd
# netstat -ant | grep 80
# netstat -ant | egrep '22|80' -- 22,80포트 둘 다 표시

3. 방화벽 열기
# firewall-config
- 영구적 > http 체크 > 옵션에서 firewalld 다시 불러오기
# firewall-cmd --list-all

4. 호스트pc에서 서버의 index페이지 띄우기
# rpm -ql httpd
# vi /var/www/html/index.html
# systemctl restart httpd
- 호스트pc에서 putty_kn.exe 실행
- root / password 접속
# who
# w
# users
# netstat -ant | grep 22
# netstat -antp | grep httpd
# netstat -antp | grep 22
# netstat -ant | grep 22
- 호스트pc에서 웹페이지 새로고침을 여러번하고, 서버에서 netstat을 확인해서 연결상태 확인

728x90
728x90

[1,2교시 - 시스템 보안]

/ squid는 openssql이 설치되어 있어야 한다.
- openssl의 버전이 2k이상이어야 한다고 한다.
- opensslq-주버전.부버전.릴리즈.패치 : 버전 정보

 

/ squid.conf의 cache_dir
- cache_dir ufs [위치] [캐시되는 데이터의 크기] [디렉토리의 갯수] [그 밑에 생기는 디렉토리의 갯수]

 

/ 현재 위치에서 디렉토리 갯수 세기
# ls -l | grep ^d | wc -l

/ squid 방화벽 추가하기
# firewall-config
- 런타임을 영구적 - 포트 탭에서 추가, 3128, tcp , 확인
or 
# firewall-cmd --permanent --add-port=3128/tcp
# firewall-cmd --reload
- 확인
# firewall-cmd --list-all

 

/ 클라이언트 centos에서 ping보내보기
# ping -c 3 192.168.111.101 -- ping을 세번 보낸다.

 

/ 서버의 엑세스 로그 확인
# cat /var/log/squid/access.log
- 아직은 아무것도 한것이 없으니 로그가 쌓인것이 없다.
# tail -f access.log

/ 클라이언트에서 프록시 걸기
- 파이어폭스 실행 > 편집 > 환경설정 > 고급 > 네트워크 > 연결쪽의 설정 클릭
  > 프록시 수동 설정 선택 > 서버의 아이피 및 squid 포트 입력, 모든 프로토콜에 위의 프록시 설정 사용 체크 > 확인

 

/ 이제 서버에서 로그 확인 가능

 

/ 프록시 서버를 중지시켜 보기
# systemctl stop squid


- 클라이언트에서 확인(새로고침)

 

/ 근데 로그를 보니 시간이 사람눈에 익는 형식이 아니다.
- 확인은 따로 여기서 변환을 해본다.
- 로그 맨 앞의 '1652771594' 이런 형식 복사 후 아래 사이트에서 'convert to a date' (gmt +9 설정)
- http://www.4webhelp.net/us/timestamp.php?action=stamp&stamp=1652771467&timezone=9

 

4WebHelp - Online Tools: Unix Timestamp Converter

 

www.4webhelp.net

- 변환하는 또다른 사이트 : https://www.epochconverter.com/

/ 서버의 squid 포트 변경해보기
- 1. 서버의 /etc/squid/squid.conf의 3128포트를 8080으로 변경
- 2. 클라이언트의 파이어폭스의 프록시 설정을 8080포트로 변경
- 3. 서버의 방화벽 포트 열기 'firewall-cmd --permanent --add-port=8080/tcp'

/ 서버에서 세션 확인
# netstat -ant | grep 8080

- 맨끝에 'wc -l'을 붙이면 갯수를 확인할 수 있다.
# netstat -ant | grep 8080 | wc -l

 


/ 크론탭(crontab)
- 예약작업
- cron -> /etc/crontab : 정기적인 예약작업
- at : 1회성 예약작업

/ 크론탭 설치 되어있는지 확인
# rpm -qa cron
# rpm -qa | grep cron
# rpm -qa | grep time

 

/ crontab 설정파일 찾기

 

/ 시험에 잘 나오는것
# crontab -e root : 루트 권한으로 크론탭을 편집하기
# crontab -l : 크론탭 목록
# crontab -r : 삭제
# crontab -i : 삭제전에 프롬프트 

/ 크론탭 구조
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

/ 크론탭 예시
- 15 16 14 * * root rdate -s time.bora.net : 매월 14일 16시 15분 마다 실행
- * * * * * * test.sh : 매분 test.sh
- 15 * * * * test.sh : 매시 15분마다 실행
- 45 5 * * 5 test.sh : 매주 금요일 05시 45분에 test.sh를 실행
- 0,20,40 * * * * test.sh : 매일 매시간 0분, 20분, 40분에 test.sh를 실행
- 0-30 1 * * * test.sh : 매일 1시부터 1시30분까지 매분 test.sh를 실행
- 0,10,20,30,40,50 * * * * test.sh : 매10분마다 test.sh를 실행
- */10 * * * * test.sh : 매10분마다 test.sh를 실행
- 0 */2 * * * test.sh : 매 2시간 마다 test.sh를 실행
- */10 2,3,4 5,6 * * test.sh : 매월 5일~6일마다 2시,3시,4시에 10분마다 test.sh를 실행
- 0 9-18 * * 1-5 test.sh : 주말제외 근무시간에만 매시간 실행

/ 퀴즈
-> 1분마다 test.sh를 실행(한 시간에 60번 실행)


-> 10분마다 test.sh를 실행(한 시간에 6번 실행)


-> 매시 15분과 45분에 test.sh를 실행(한 시간에 2번 실행)


-> 매시 30분에 test.sh를 실행(한 시간에 1번, 하루에 24번 실행)


-> 6시간 간격으로 test.sh를 실행(하루에 4번 실행, 00:30, 06:30, 12:30, 18:30)


-> 매일 새벽 1시 20분에 test.sh를 실행(하루에 한번 실행)


-> 매주 월요일 새벽 3시 10분에 test.sh를 실행(일주일에 한번 실행)


-> 매월 1일 새벽 3시 30분에 test.sh를 실행(1달에 한번 실행)

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
728x90

[1,2교시 - 데이터베이스 보안]

데이터베이스 보안 요구사항 정의

[학습내용]
• 데이터베이스 사용 용도 분석
• 사용자 요구사항 분석
• 사용자 요구사항 명세서 작성

1. 데이터베이스 사용 용도 분석은
- 데이터베이스 보안 설계 이전에 가장 먼저 파악하여야 하는 작업이 사용하는 데이터베이스의 사용 용도를 분석하는 일임

2. 사용자 요구사항 분석
- 데이터베이스 사용자 요구사항을 분석하는 과정을 숙지하고 단계별 역할과 산출물을 숙지해야 함
- 사용자 요구사항 도출 → 사용자 요구사항 분석 → 사용자요구사항 기록

3. 사용자 요구사항 명세서 작성
- 데이터베이스 구축을 위하여 요구된 사용자 요구사항을 분석하여 최종적으로 사용자 요구사항 명세서를 작성해야 함
- 사용자 요구사항 분석 → 메타데이터 수집 → 사용자 뷰 자료 수집 → 자료 사전 작성 → 자료량과 패턴 조사 → 사용자 요구사항 명세서 작성

 

데이터베이스 보안 위협 분석

1. 데이터베이스 보안 위협
2. 데이터베이스 보안 목적
3. 데이터베이스 보안 필요성

1. 데이터베이스 보안 위협
- 데이터베이스 보안은 내부 및 외부자가 데이터베이스내에 저장된 조직의 주요 기밀 정보에 불법적으로 접근하는 것을 막는 것임

2. 데이터베이스 보안 목적
- 데이터베이스 보안의 목적은 위협 요소 식별·분석 및 적절한 통제를 통해 불확실한 이벤트의 발생 위험을 감소시키고 수용 가능한 수준(Acceptable Level)으로 최소화하는 것

3. 데이터베이스 보안 필요성
- 권한이 없는 사용자의 부적절한 접근을 막는 동시에 정당한 권한을 갖고 있는 사용자는 정보시스템이 서비스 요구를 거부하지 않도록 보호할 필요가 있음


[데이터베이스 보안 위협]

1. DB 보안 위협 개요

1) 데이터베이스 보안
- 데이터베이스 내에 저장된 조직의 주요 기밀 정보에 내부 및 외부자가 불법적으로 접근하는 것을 막는 것. 
- 데이터베이스에 저장된 데이터를 인가하지 않은 변경·파괴·노출·비일관성 등을 발생시키는 외부 위협들로부터 보호하는 것

2) 데이터베이스 보안 설계
정보보안의 범주에서도 데이터베이스에 저장된 데이터 보호를 위한 설계에 초점을 맞춘 것

3) 데이터베이스의 보안 위협 발생 요인
- 사용자의 실수 및 오용
- 내부 사용자의 권한 남용 및 비정상적인 접근
- 데이터베이스에 대한 알려진 취약점들

2. 일반적인 데이터베이스 위협

1) 악의적 목적을 가진 외부의 비인가 사용자, 
악성 프로그램 삽입
데이터베이스의 중요 정보 유출

2) SQL injection 공격
- 입력 값에 대한 검증 미비로 인한 위협
- 로그인 인증 우회를 통해 데이터베이스 데이터 열람·유출 및 데이터베이스
- 서버에 시스템 명령 실행
- 파일 업로드에 대한 취약점이 존재할 경우 웹 쉘(web shell) 등을 실행하여
- 데이터베이스의 데이터에 접근

3. 케이스별 데이터베이스 위협

1) 사용자에 대한 식별 및 인증 위협
(1) 사용자 식별 및 인증
  - 데이터베이스에 접근하기 위한 가장 기본적인 단계
(2) 보안 위협 요인
  - 취약한 인증 수준
  - 추측하기 쉬운 비밀번호의 사용
(3) 보안 위협 형태
  - 사전 공격(dictionary attack)
  - 무작위 대입 공격(brute force attack)
  - 사회 공학적 기법(social engineering)

2) 데이터 유출 위협
(1) 암호화되지 않은 데이터
  - 네트워크 도청, 파일 백업, 정당한 사용자 및 미인가 사용자에 의한 데이터베이스 검색 등을 통하여 데이터 유출 가능

(2) 암호화된 데이터
  - 안전성이 확인되지 않은 암호 모듈을 사용하는 경우 악의적인 사용자에 의하여 암호문 해독 가능

3) 권한 오남용 위협
(1) 권한 오·남용
  - 데이터베이스의 데이터 접근 권한이 업무 사용을 위해 허용된 권한보다 더  많이 부여
  - 정당한 사용자가 악의적인 목적으로 허용된 범위를 넘어서 인가되지 않은 작업 수행
(2) 시스템의 취약성
  - 시스템의 취약점을 이용하여 불법 권한 상승 및 계정 정보 획득

4) 암호 모듈 오용 위협

  - 데이터베이스의 데이터를 암호화하기 위해 안전성이 검증되지 않은 암호 모듈을 사용하거나, 적합하지 않은 암호 모드를 사용하는 경우
암호문 해독 가능
  - 데이터가 한 블록 이상의 크기를 가지는 경우 블록 암호 알고리즘을 적용하면 사전 공격에 의해 해독 가능
  - 동일 평문에 대하여 동일 암호문이 생성되면 암호문을 통해 암호 키 추측 가능

5) 암·복호화 키 및 마스터 키 노출 위협
(1) 암·복호화 키 안전 관리
  - 데이터 암호화 시 사용되는 키가 노출되면 암호화된 데이터를 복호화 할 수 있기 때문에 키의 안전 관리는 매우 중요
  - 데이터를 암호화하는 경우 키가 인가되지 않은 제3자에게 노출되지 않도록 안전하게 보관 필요

(2) 암·복호화 키 사용법
  - 마스터 키를 통하여 암호화
  - 실제 사용 시점에만 임시로 복호화 하여 사용

(3) 암·복호화 키 노출 시 대처 방안
  - 키 변경
      : 신규 데이터는 변경된 키를 사용하여 암호화
      : 기존 암호문은 마이그레이션 작업을 통하여 신규 암호문으로 변경

6) 프로젝트 수행과정에서의 데이터베이스 접근 허용 위협
  - 프로젝트에 참여한 외부 작업자가 자사의 데이터에 접근할 수 있는 권한을 부여함으로써 데이터 유출이 발생함
  - 프로젝트 목적상 데이터베이스를 사용해야 하는 경우, 보안서약서를 작성하게 하고 추가적인 물리적인 보안 통제를 적용함으로써 정보 유출을 방지하는 절차가 있어야 함

7) 운영과정에서 권한에 대한 관리 소홀로 인한 침해 발생 위협
  - 개발자에게 DBA 권한을 설정함으로써 개발자가 직접 데이터베이스에 접근하여 정보 유출 가능
  - 잘못된 사용자 권한 설정으로 비정상적인 데이터 노출 및 외부 유출 발생

8) 접근 통제 우회 위협
(1) 디폴트 계정 및 패스워드 동일
  - 공급자에 의해 출하 시 설정되는 디폴트(default) 계정 또는 단순 계정 등 계정번호(ID)와 비밀번호 동일
    : 암호 추측 공격, 사전 공격 등을 통해 계정 확인 가능
    : 데이터베이스의 자료 유출 및 변조 등 발생
(2) 계정 및 패스워드 정책 미흡
  - 계정 및 패스워드의 정책 설정이 미흡한 경우 무차별 공격에 의해 패스워드 크래킹 가능

9) 데이터베이스 정보의 불법 열람 및 변조·삭제 위협
(1) 보안 위협 요인
  - 데이터베이스에 저장된 주요 정보에 대해 암호화가 미흡한 경우 비인가자에 의해 정보 노출 또는 변조 가능
(2) 보안 니즈 현황
  - 데이터베이스에 저장된 개인정보, 금융 관련 정보, 게임 관련 정보 탈취 시도 증가
   : 데이터베이스 보안에 대한 요구사항 증가

(3) 보안 방법
- 공개키(PKI: Public Key Infrastructure)
  기반의 강력한 암호화 기능 및 검증 기능 제공
     : 기존 데이터베이스에 대한 불법적 접근 방지
  - 사용자가 데이터베이스의 내용을 추출하여도 암호화된 상태의 데이터베이스 기밀성이 유지되는 시스템 구축


[데이터베이스 보안 목적]

1. 개요

1) 명심해야 될 사항 
(1) “보안에 100%는 없다!”
(2) “관리 범위 100% 충족하는 기술적 대안은 없다!”
(3) “방화벽 구축으로 완벽히 보호되지 않는다!”
(4) “보안은 기술만으로 해결되지 않는다!”

2) 데이터베이스 보안
(1) 정보보안의 3요소
정보보안의 목적은 기밀성, 무결성, 가용성 등을 유지하는 것
(2) DB보안의 목적
DB에 저장된 데이터를 공개·노출, 변조·파괴·훼손, 재해·재난 등의 위협으로부터 보호하여 기밀성, 무결성, 가용성 등을 확보하는 것

 


[3,4,5교시 - 시스템 보안]

/ 리눅스 bind, bind-chroot란
- bind서비스의 최상위경로가 바뀌지 않게 해주는 패키지

/ bind 설치 정보

 

/ bind, bind-chroot 설치
# yum -y install bind bind-chroot
# systemctl restart named
# systemctl enable named
# systemctl status named (옵션 -l : 상태확인 메시지 확인가능)

/ vi /etc/named.conf

- listen-on port 53 { any; }; 모든 포트 외부 접근 허용
- listen-on-v6 port 53 { none }; 모든 포트 외부 접근 비허용
- allow-query { any; }; 외부에서 오는 query를 허용할 IP 혹은 IP대역 설정
- 저장 후 'named-checkconf'로 확인 : 똑 떨어지면 이상X
- 저장 후 'systemctl restart named'
- 계속 대기중인 'standalone'방식이다.(systemctl로 하는 애들은 대부분 standalone이다.)

/ dig
- dig www.naver.com  

 

네이버

네이버 메인에서 다양한 정보와 유용한 컨텐츠를 만나 보세요

www.naver.com

- 특정 도메인 서버에서 하려면
# dig @164.124.101.2 www.naver.com  

 

네이버

네이버 메인에서 다양한 정보와 유용한 컨텐츠를 만나 보세요

www.naver.com

 

/ 리눅스의 호스트파일
- /etc/host.conf or /etc/hosts


/ DNS 질의 순서
- 리눅스에서는 $ -> /etc/host.conf -> /etc/hosts -> DNS 순으로 찾는다.
- 윈도우에서는 $ -> hosts.ics -> hosts -> DNS

/ [여담] CEO, CFO, CCO, CIO, 각 풀네임 알아두기
- CEO : 
- CFO : 
- CCO : 
- CIO : 
- CISO : 정보보호 최고 책임자
    > 1) 정보보호 관리체계의 수립 및 관리, 운영
    > 2) 정보보호 취약점 분석, 평가 및 개선
    > 3) 침해사고의 예방 및 대응
    > 4) 정보보호 사전 보안성 검토

/ bind의 설정파일 확인
# rpm -qc bind
# ps -ef | grep named

* rndc 원격제어 : 953/tcp 포트

/ dns 방화벽 설정
# firewall-config
-
영구적 > 체크 DNS > 옵션에서 firewalld 다시 불러오기
or
# firewall-cmd --permanent --add-port=53/tcp
#
firewall-cmd --permanent --add-port=53/udp
firewall-cmd --permanent --add-service=dns
firewall-cmd --reload
firewall-cmd --list-all
- 확인 'firewall-cmd --list-all'

 

/ nslookup으로 확인
- 빨간색으로 표시한 부분은 처음 다녀오는 것이라 조금 느리게 응답이 되었던 부분이다.
- 두번째로 질의를 하면 바로 응답이 온다.

 


proxy

/ 나중에 실습할 것
-
취약점분석도구 OWASP_ZAP, BurpSuite
-
CentOS7 , squid  (서버, client)

/ squid
- 설치되어있는지 확인 및 설치 가능한지 확인
# rpm -qa squid
# rpm -qa | grep squid
# yum list squid

* 설치할때는 install, 삭제할때는 remove또는 erase 

- 설치
# yum -y install squid


- config파일 찾기

* 리눅스 마스터 시험에서 아래 빨간 부분에 들어갈 문자열이 무엇인지 찾는 문제가 종종나온다.

 

- 편집

앞의 #제거

- 포트 확인

 

- 확인

 

 

728x90
728x90

[1,2교시 - 데이터베이스 보안]

/ 사용자 요구사항 명세서 작성

1. 사용자 요구사항 분석

2. 메타 데이터 수집

3. 사용자 뷰 자료 수집

4. 자료 사전 작성

5. 자료량과 패턴 조사

6. 사용자 요구사항 명세서 작성


[3,4,5교시 - 시스템보안]

/ TCP 3-way Handshake
- 알아보기

/ TCP 4-way Handshake
- 알아보기

 

#w

#who

 

- w, who, finger(유닉스)의 정보를 가져오는 곳
# ls -ld /var/run/utmp

 

 

/ /var/log 하위

- /var/log/btmp
# lastb

- /var/log/wtmp
# last

- /var/log/lastlog
# lastlog

- dmesg : 부팅시 기록. device

- boot.log : 부팅시 기록, 서비스 데몬

- messages : 서버에서 돌아가는 웬만한 app들의 로그

- secure : 로그인, 인증에 대한 로그기록

/ httpd의 접속 기록
- 위치 : /var/log/httpd/access_log
# cat access_log | grep 192.168.111.1 | wc -1 을 하면 '192.168.111.1'명령어가 들어간것이 몇개인지 알려준다.

/ SSH 로그인 정보
- 위치 : /var/log/secure

/ httpd.conf에서 Listen부분만 조회해서 보고 싶을때
# cat /etc/httpd/conf/httpd.conf | grep Listen

/ ssh의 설정파일을 찾는 법
- 1. yum으로 설치된 이름을 먼저 찾는다.
# yum list installed | grep ssh

- 2. rpm으로 찾는다.
# rpm -qc oepnssh-server

- 3. 설정파일 보기
# vi /etc/ssh/sshd_config
- Port는 주석처리 되어있는데 기본적으로 22번 포트가 열려있다.
- PermitRootLogin : 밖에서 root의 로그인 허용 여부, 주석이면 기본적으로 허용

 

 

 

 

 

 

 

 

 

728x90
728x90

[1,2교시 - 데이터베이스 보안]

/ 데이터 무결성 제약조건의 종류

1. 개체 무결성(Entity integrity)
- 하나의 테이블에 중복된 행이 존재하지 않도록 규정
- 기본키 제약이라고도 한다.
- Primary Key(PK) : 열에 유일한 값만 입력이 되어야 하고, NULL값을 허용하지 않는 것
- UNIQUE : 값의 중복을 허용하지 않는 제약, NULL도 중복되면 안된다.

2. 참조 무결성(Referential integrity)
- 행을 입력, 수정, 삭제할 때 연관되는 다른 테이블과의 데이터가 정확하게 유지되도록 규정
- FOREIGN KEY(외래키) : 다른 테이블의 데이터를 참조할 때 없는 값을 참조할 수 없도록 제약

3. 도메인 무결성(Domain integrity)
- 속성이 정의되어 있는 영역을 벗어나지 않도록 규정
- NOT NULL : 데이터를 입력받을때 NULL을 허용하지 않는것
- DEFAULT : 입력 값을 지정하지 않았을때 기본값으로 입력되도록 하는 것
- CHECK : 값의 범위를 정해 놓는 제약

4. Null 무결성(Null integrity)
- NOT NULL : 데이터를 입력받을때 NULL을 허용하지 않는것

5. 고유 무결성(Unique integrity)
- UNIQUE : 값의 중복을 허용하지 않는 제약

6. 키 무결성(Key integrity)

7. 관계 무결성(Relationship integrity)

 

/ 무결성 제약조건 실습

- pk, check 실습

create table lan (
    ano int primary key,
    addr varchar(20) check(addr in('Seoul', 'Jeju','Busan','Suwon'))
);

insert into lan(ano, addr) VALUES (1, 'Seoul'); -- 삽입됨
insert into lan(ano, addr) VALUES (2, 'bla bla'); --삽입안됨
insert into lan(ano, addr) VALUES (1, 'Busan'); --삽입안됨

 

- 외래키(Foreign key)

CREATE TABLE par(
    id number not null PRIMARY key,
    par_name varchar(20)
);

CREATE TABLE child(
    id number not null PRIMARY key,
    par_id number,
    child_name varchar(20),
    CONSTRAINT fk_pid foreign key(par_id) REFERENCES par(id)
);

insert into child (id, par_id, child_name) values (1,1,'자식1');  -- 생성안됨 : 부모 데이터가 없음
insert into par(id, par_name) values (1, '부모1');                -- 부모 데이터 생성
insert into child (id, par_id, child_name) values (1,1,'자식1');  -- 생성됨
insert into child (id, par_id, child_name) values (2,1,'자식2');  -- 생성됨
insert into child (id, par_id, child_name) values (3,2,'자식3');  -- 생성안됨 : 부모 데이터가 없음

 

/ 데이터베이스 보안 요구사항 정의 - 분석 프로세스 숙지

- 분석 과정 및 단계별 역활/산출물 숙지가 필요함
- 단계별로 진행함
- 이전 단계로 피드백 하는 과정을 가짐
- 사용자 요구 사항 분석의 정확성/명확성을 확보함
1. 요구사항 도출
- 데이터베이스의 대상 파악, 프로젝트 목표 숙지, 프로젝트의 범위를 기준으로 조사 범위를 결정
- 도출을 위해 업무관계자 인터뷰 및 외부자료 수집 및 분석등을 한다.
2. 요구사항 분석
- 도출된 요구사항의 명확성을 파악, 완전성 및 모호성 검증
- 불완전한 부분이 존재하면 요구사항 도출단계를 재수행
- 요구사항을 분류하여 통합 또는 분리하는 작업수행
3. 요구사항 기록
- 요구사항 목록 정리 및 관리자의 승인을 받아 확정
- 정리된 요구사항을 형식에 맞춰 문서화
- 프로젝트 종료 때까지 반영여부를 지속적으로 관리

 


[3,4,5교시 - 시스템 보안]

 

/ raid5 구성해보기

- 하드디스크를 1GB, 싱글로 3개 만든다.
- 부팅 시 새로 sdh, sdi, sdj가 확인된다.

- 부팅 후 'll /dev/sd*', 'fdisk -l | grep /dev/sd' 등으로 확인해본다.

ll /dev/sd*
fdisk -l | grep /dev/sd

- 각각의 'sdh, sdi, sdj'를 fdisk작업을 해준다.

[root@kyj ~]# fdisk /dev/sdh
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xd78be71d.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): 
Using default response p
Partition number (1-4, default 1): 
First sector (2048-2097151, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151): 
Using default value 2097151
Partition 1 of type Linux and of size 1023 MiB is set

Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@kyj ~]# fdisk /dev/sdi
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x3f42118a.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): 
Using default response p
Partition number (1-4, default 1): 
First sector (2048-2097151, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151): 
Using default value 2097151
Partition 1 of type Linux and of size 1023 MiB is set

Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'

Command (m for help): p

Disk /dev/sdi: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x3f42118a

   Device Boot      Start         End      Blocks   Id  System
/dev/sdi1            2048     2097151     1047552   fd  Linux raid autodetect

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@kyj ~]# fdisk /dev/sdj
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xa18e714f.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): 
Using default response p
Partition number (1-4, default 1): 
First sector (2048-2097151, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151): 
Using default value 2097151
Partition 1 of type Linux and of size 1023 MiB is set

Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'

Command (m for help): p

Disk /dev/sdj: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xa18e714f

   Device Boot      Start         End      Blocks   Id  System
/dev/sdj1            2048     2097151     1047552   fd  Linux raid autodetect

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

- mdadm을 한다.
# mdadm -C /dev/md5 -l 5 -n 3 /dev/{sdh1,sdi1,sdj1}

- 확인1 

- 확인2 

- /dev/md5를 ext4로 포맷한다.
# mkfs -t ext4 /dev/md5

- 루트에 'raid5'폴더를 만들고 그 폴더에 마운트 시킨다.
# mkdir /raid5
# mount /dev/md5 /raid5

- 마운트되었는지 확인한다.
# df -h

- 리부팅 시 자동으로 마운트되도록 /etc/fstab에 데이터를 등록해준다.
# vi /etc/fstab
- /dev/md5    /raid5    ext4    defaults,nofail 0 0 ->내용 추가

- 리부팅
# reboot


/ raid 구성 전체적인 과정 정리
1. 하드디스크 추가
    1-1. 'll /dev/sd*'로 추가된 디스크 확인
2. 'fdisk /dev/sd블라블라'로 각각 파티셔닝(타입 코드는 fd로 입력)
3. mdadm -C /생성할/폴더 -l 레이드단계 -n 하드갯수 /dev/{하드, 목록, 들} : 레이드 구성
    3-1. mdadm -D /생성한/폴더 : 레이드 구성 확인
4. mkfs.ext4 /생성한/폴더 : ext4로 포멧
5. mkdir /마운트/폴더 : 마운트할 폴더 생성
6. mount /생성한/폴더 /마운트/폴더 : 레이드 구성한것을 새로만든 폴더에 마운트
7. vi /etc/fstab : 리부팅 시 자동 마운트 설정


/ 실습과제

1. RAID 구성

- 수행1 : LinearRaid, Raid0,를 구성하여라
    > 제출1 : 디스크 추가 및 fdisk 작업완료 후 ls -l /dev/sd* 
    > 제출2 : 마운트 작업 완료 후 df -h
    > 제출3 : 마운트 작업 완료 후 vi /etc/fstab

- 수행2 : Raid1, Raid5를 구성하여라
    > 제출1 : 디스크 추가하고 리부팅 후, ls -l /dev/sd* 
    > 제출2 : mdadm으로 md1, md5 구성 후, ls -l /dev/md* 
    > 제출3 : md1, md5에 대해 마운트 작업 후, df -h
    > 제출4 : mdadm --detail /md1
    > 제출5 : mdadm --detail /md5
    > 제출6 : cat /proc/mdstat
    > 제출7 : vi /etc/fstab


2. CentOS에 http 및 ssh 설치

- 수행1 : VMware를 사용하여 CentOS서버를 준비하고 root로 로그인한후에, Linux Server에 웹서버(httpd)를 설치하고, 서버상에서 적절한 명령어를 사용하여 Linux Server의 웹서비스 TCP 80포트, sshd서비스 tcp 22포트가 리스닝 가능상태임을 확인/캡쳐하여 제출하시오.

- 수행2 : Linux Server에 웹서버 인덱스페이지(index.html)을 구성하고, 호스트PC에서 Linux Server로 웹서버 페이지접근/오픈하시오.
필요한 경우 해당 서비스를 방화벽에서 오픈하고 접근/오픈된 웹서버페이지를 확인/캡쳐하여 제출하시오.(index.html 내용은 ‘This is Linux Server' 로 한다)

- 수행3 : 호스트PC에서 해당 Linux Server 에 ssh로 접속하되, putty등의 클라이언트 프로그램을 사용하고, 접속시 root계정 또는 centos계정을 사용하도록 한다.
호스트PC에서 ssh접속 완료후, 서버에서 # w, # who 명령어 구문 결과를 각각 확인/캡쳐하여 제출하시오.

- 수행4 : 클라이언트(호스트PC)에서 서버를 향해 putty 등의 프로그램을 사용하여 ssh로 클라이언트가 접속성공한 내역(ESTABLISHED)을 확인하기 위해서 
     # netstat -ant | grep LIST* 또는 
     # netstat -ant | grep ESTA* 또는
     # netstat -ant | grep 22 명령어 사용하여 확인/캡쳐하여 제출하시오.

 

 

 

728x90
728x90

[1,2교시 - 데이터베이스 보안]

/ 데이터베이스 보안 요구사항 정의


1. 데이터베이스 사용 용도를 분석한다.
    > 어떤 업무인지, 어떤 분야에서 사용하는지, 어떤 사용자들이 주로 사용하는지..


2. 데이터베이스 보안 설계 목적필요성을 분석한다.
    > 데이터베이스 보안 목적 분석
    > 데이터베이스 보안 필요성 분석


3. 데이터 무결성 규칙의 종류를 활용하여 분석한다.
    > 도메인 무결성 규칙 분석
    > 실체 무결성 규칙 분석
    > 참조 무결성 규칙 분석
    > 트리거 분석


4. 데이터베이스 보안 요구사항을 분석한다.
    > 권한을 부여받은 사용자만 접근을 허용하고 있는가?
    > 추론 방지가 요구되고 있는가?
    > 데이터베이스의 무결성이 보장되도록 하고 있는가?
    > 데이터의 논리적 일관성이 보장되고 있는가?
    > 감사 기능이 제공되고 있는가?
    > 사용자 인증이 적정하게 이루어지고 있는가?
    > 시스템 간 데이터의 전송 제한이 이루어지고 있는가?

 

[3,4,5교시 - 시스템 보안]

/ RAID1+0
- RAID1 + RAID0
- 신뢰성(안정성)과 성능(속도)이 동시에 뛰어난 방법

/ nslookup과 dig차이점
- nslookup www.naver.com   164.124.101.2
- dig @164.124.101.2 www.naver.com
- 으로 명령어 뒤의 순서가 반대이다.

/ Linear RAID 구축 실습
- CentOS&_101 탭 우클릭 > 세팅 > Add > 하드디스크 넥스트 > 넥스트 > 크리에이트 어쩌고 넥스트 >
   > 2GB, 싱글 넥스트 > 이름은 'test2.vmdk'로 설정 > 피니쉬 > ok > 서버 reboot
- 부팅할때 sdc가 확인된다.

- ll /dev/sd*로도 새로 추가한 하드디스크를 확인할 수 있다.

- fdisk를 raid용으로 파티셔닝해야 한다.
- 먼저 'fdisk -l'로 하드디스크를 확인한다.

- /dev밑에 sda, sdb, sdc가 확인이 되고 sdb와 sdc를 리니어 raid로 만들것이다.
- '/dev/sdb'를 새로 파티셔닝 한다. (이때 이전에 /dev/sdb1로 포맷하였더라도 '/dev/sdb'로 진행한다.)

- L을 누르면 모든 코드가 나온다.

- 확인

- 나오기

- 'fdisk -l /dev/sdb'로 확인해본다.

- sdc도 진행한다.
- 이 친구는 새로만들어야하니까 n으로 간다.

- 이후 t로 들어간 후 fd로 설정한다.

- w로 저장하고 나오기

- 'll /dev/sd*'로 확인할 수 있다.

- 'fdisk -l | grep fd'로도 확인가능하다.

- mdadm 사용하기
# mdadm --create /dev/md9 --level=linear --raid-devices=2 /dev/sdb1 /dev/sdc1
- --create : 생성
- --level : 리니어 단계 성정
- --raid-devices 하드 하드 : 합칠 하드디스크

- mdadm --detail /dev/md9로 확인

- 'cat /proc/mdstat'으로도 확인가능하다.

- 이제 md9에 대해서 mkfs.ext4를 한다.

- 이제 폴더를 새로 만들어서 마운트를 한다.
# mkdir /linear
# mount /dev/md9 /linear
- 그리고 이제 컴퓨터를 켤때 언제든지 /dev/md9 장치가 (/linear) 디렉터리에 마운트되어 있도록 설정/etc/fstab의 파일내용을 수정해준다.

- 저장 후 리부팅 해준다.
- 이제 리부팅해도 바로 새로운 하드디스크를 리니어 raid로 인식한다.

- 이외 명령어 옵션
# mdadm --stop /dev/md9
# mdadm --run /dev/md9
# mdadm --detail /dev/md9


/ raid0 실습
- 새로 또 하드를 2개 추가한다. 1기가 싱글로

- 먼저 ll로 확인한다.

- sdd, sde를 fdisk한다.
- raid로 진행하기 위해 헥사코드를 fd로 해서 진행한다.

- sde fdisk

- 다시 'll /dev/sd*'로 확인해본다.

- 'fdisk -l | grep fd'로도 확인해본다.

- mdadm으로 진행한다.
# mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdd1 /dev/sde1

- /dev에 md0으로 잘 생성되었는지 확인한다.

- mdadm --detail /dev/md0

- 이제 폴더를 만들고 마운트를 해보면 에러가 난다.
- mkfs.ext4를 하지 않아서 나는 에러다.

- md0를 mkfs.ext4를 해준다.

- 이제 마운트가 된다.

- 확인

- 이제 /etc/fstab의 파일 내용을 수정해준다.

 

/ RAID1 실습
- 하드디스크를 1기가 싱글로 2개를 더 붙인다.

- 리부팅 할때 새로운 하드디스크가 확인된다.

- 'll /dev/sd*'에서도 확인해본다.

- 두개의 하드디스크도 fdisk작업을 한다.

- 이제 mdadm작업을 한다.
# mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdf1 /dev/sdg1

- --detail로 확인해본다.

- 마운트를 하기 전에 mkfs.ext4로 포맷을 한다.
# mkfs.ext4 /dev/md1

- 마운트를 하고 'df -h'를 하면 raid1로 구성한 하드디스크가 확인된다.
- RAID1로 구성하였기때문에 디스크 한개 만큼의 용량만 확인이 된다.

- 이것도 재부팅 시 자동으로 인식하기 위해 '/etc/fstab'파일을 수정해준다.

 

- 지금까지의 정보를 cat으로 확인해본다.
# cat /proc/mdstat

 

 

728x90
728x90

[1,2교시 - 데이터베이스 보안]

/ 다른 계정에 있는 테이블 복사해오기
- dba권한이 필요하다.
# grant dba  to kimjh9;
- 테이블 복사 쿼리
# create table EMPLOYEES as select * from hr.EMPLOYEES;

/ CMD나 터미널에서 쿼리 결과를 볼때 불편할때
# set pages 4000             -- 데이터가 화면에 표시되는 라인 수 (몇줄)
# set lines 5000               -- 데이터가 가로로 표시되는 라인 수
# col 컬럼명 for a숫자 (보통 10정도씀)   -- 한 데이터 컬럼이 화면에 표시되는 사이즈
# col 컬럼명 for 사이즈(a10) heading "바꿀컬럼명"

[3,4,5교시 - 시스템 보안]

/ fdisk로 확인해보기

 

/ 파일 시스템(File system)
- 파일이나 디렉토리를 효과적으로 다루기 위한 구조
- 윈도우 : fat16, fat32, fat64, NTFS, ReFS
* fat : File Allocation Table
* NTFS : New 테크놀로지 File System
- 최근에 NTFS, ReFS가 나왔는데 ReFS가 별로 성능이 좋지 못해 NTFS를 주로 쓴다.

- 리눅스 : ext(확장의 개념을 가지고 있다.), ext2, ext3, ext4(지금 실습하는 것), xfs(루트 쪽)
* journaling : 파일 시스템내에서 백업/에러/엑세스 관련된 정보를 이 기술을 사용해서 보관을 한다.
                  ext3이상부터 적용된다.

/ 파티션 해보기
# fdisk /dev/sdb
- 잘 모르니까 m을 눌러보자

m을 누른후..

- 파티셔닝을 해야하니 n을 누른다.
- 새로 추가한 하드를 디폴트로 p가 선택되어 있어서 그냥 엔터를 누른다.

- 이번에는 또 번호를 뭘로 줄꺼냐인데.. 기본 1번이 되어 있으므로 또 엔터


- 섹터 부분도 그냥 다 넘어간다.

- p를 누르면 적용된것을 확인할 수 있다.

- w를 누르면 작업에서 빠져나온다.

- 다시 확인해본다.
- 이때 맨 앞에 b가 들어가있는데 블록이라는 뜻이다.

- 확인2

 

- 마운트 등 다른 작업을 안해서 df -h에는 아직 안보인다.

 

/ 메모
- IDE는 2개까지만 연결가능하고, SCSI는 16개까지 연결 가능하다.
- 하드디스크를 1개 장착하는 흐름도는
'물리적인 장착 > fdisk > /dev/sdb1 확인 > mkfs.ext4 > /dev/sdb1 확인 > mount > /mydata > /etc/fstab > 리부팅' 이다.

- mkfs.ext4를 한다.
# mkfs.ext4 /dev/sdb1
- Creating journal이 된다. (밑에서 2번째 줄)

 

/ 파일 시스템 구조

 

# df -hi
- i 옵션은 inode를 확인하기 위한 옵션이다.

 

- / 에다가 tdir 폴더를 만든다.
# mkdir /tdir

- 마운트를 한다.
# mount /dev/sdb1 /tdir

- 확인
# df -h

 

/ mkfs.ext4
- 방금 mkfs.ext4를 이용해서 저널링을 만들었다.
# mkfs -t etx4 /dev/sdb1  == mkfs.ext4 /dev/sdb1 명령어가 같다.
- -t로 만들고 싶은 형식을 지정할 수 있다. (ext3, ext4 등등)
- mke2fs : ext2, ext3, ext4 파일 시스템을 생성할때 사용하는 명령어
            : 예외적으로 ext4는 따로 -T옵션을 준다. ex) mke2fs -T ext4 /dev/sdb1
- mke2fs의 -t 옵션 : 뒤에 붙는 형식으로 주겠다. ex) mke2fs -t ext2
- mke2fs의 -j 옵션 : 저널링을 주는 옵션. 뒤에 ext3만 줄 수 있다. ex) mke2fs -j ext3

/ 마운트
- mount 논리장치 물리장치
# mount /dev/sdb1 /tdir

/ 마운트 정보
# mount -l
- 맨밑에 아래와 같은 내용이 나온다.
- 'mount -l'의 결과 화면은 시험에 자주 나오니 기억해두자. (장치 on 위치 type 형태)

# mount -l | grep /tdir
- grep도 가능하다.

 

/ 연결을 끊을 때
- 내가 마운트할 디렉토리안에 들어가 있거나 사용하고 있으면 언마운트 할 수 없다.

- umount명령어를 이용하여 언마운트할 수 있다.
- 경로명, 위치명 둘다 가능하다.
# umount /tdir
# umount /dev/sdb1


- 언마운트 확인
# df -h
# mount -l | grep /tdir

 

/ 마운트된 정보가 저장되는 곳
- '/etc/fstab'파일 : 부팅할때 명시된 장치들을 확인한다.
# vi /etc/fstab

- 편집한다.
> 디스크장치명 ; 경로 ; fs형식 ; defaults(기본속성), nofail(구문에 에러가 있어서 문제가 있더라도 패일 발생하지마) ; 0 0
- 앞숫자 : 덤프(1로 되어있으면 이슈 등 을 로그로 남긴다),
- 뒷숫자 :  부팅할때 깨졌는지 정상인지 아닌지 파일 시스템 체크. 1이면 체크

- cat으로 작성한 내용을 확인한다.

- 일시적으로 마운트가 깨졌을때 fstab에 있는 내용을 자동으로 가져올때
# mount -a

- fstab에 오류가 나면 init 1모드에 진입하게 된다.

 

# blkid

 

# nmcli c

 

/ fstab
- 장치명 ; 경로 ; fs형식 ; 속성옵션 ; 0 0
- /dev/sdb1  /tdir  ext4  defaults,nofail  0 0
- 속성 옵션 : 디스크용량 할당에 대한 옵션을 적는다. 
- 디스크 쿼터(quota) : 사용자들에게 용량을 제한해서 제공하는 기능
    > usrquota : v1, 유저에게 quota를 적용
    > grpquota : v1, 그룹대상에게 quota를 적용
    > usrjquota : v2, 유저에게 quota를 적용
    > grpjquota 대신 jqfmt사용 : v2, 그룹대상에게 quota를 적용
    > ex) /dev/sdb1   /tdir   ext4   defaults,nofail,usrquota,grpquota   0 0
    > ex) /dev/sdb1   /tdir   ext4   defaults,nofail,usrjquota=aquota.user,jqfmt=vfs   0 0
    > edquota : 사용자 또는 그룹에 쿼터를 설정할 때 사용하는 명령어
    > quotacheck : 사용자별 디렉토리에 생성한 쿼터 설정파일을 체크할때
    > quota : 로그인 된 사용자의 쿼터 설정 정보를 확인
    > repquota : /home처럼 시스템에 설정된, 시스템 단위의 설정 정보를 확인
- aquota : 사용자가 기록을 하게끔 하는 명령어

 

/ RAID(Redundant Array of Inexpensive Disks)
- 윈도우, 리눅스 똑같다.
- 여러개의 디스크를 하나의 디스크처럼 사용함
- 비용 절감 + 신뢰성 향상 + 성능 향상의 효과를 낸다.
- 하드웨어 RAID, 소프트웨어 RAID가 있고 실무에서는 하드웨어 RAID가 많이 쓰인다.
- 실습은 소프트웨어 RAID를 할것임.
- 레이스 2~4는 써보니까 너무 안 좋아서 안 씀.
- Linear RAID : 쭉쭉쭉 계속 붙여서 쓰는거. 용량 상관없이 확장 가능. 앞에 붙인 디스크에 문제가 생기면 싹 다 날라감
- RAID0 : 모든 디스크에 동시저장, 가장빠름, 10G랑 100G랑 묶으면 20G가 잡힘(10G의 10, 100G의 10),
             근데 디스크 하나 나가면 짝 다나감. 똑같은 컨텐츠가 많은 회사는 RAID0를 쓰기도 한다.
- RAID1 : 미러링, 두개를 묶으면 2분의1용량만 사용할 수 있음.
             한쪽 디스크가 고장나도 복원가능(Fail over). 공간효율은 안 좋지만 중요한 데이터를 저장하기에 적절하다.
- RAID5 : 3개부터 묶을 수 있음, 모든 디스크에 동일하게 저장됨.
             3개를 묶으면 3분의 2만 사용가능하다(n개면 n-1개만 사용가능).
             오류가 발생하면 '패리티'라는것을 이용해서 데이터를 복구
- RAID6 : 4개부터 묶음 수 있음. 패리티 사용. 4개중에 2개가 나가도 사용가능(n-2)

 

 

 

 

 

728x90
728x90

[1,2교시 - 데이터베이스 보안]

- 실행창에서 cmd를 검색창에 입력 후 쉬프트+컨트롤+엔터를 누르면 관리자로 실행된다.

- 접속하면 데이터 베이스 이름을 확인할 수 있다.

- sys계정은 관리자 계정이라 무엇이든 할 수 있고 이외에는 사용자 계정이다.

 

/ 계정 생성
> create user 계정이름 identified by 비밀번호;

- 생성된 사용자 확인

 

/ 권한주기
- 권한은 SYS 계정에서만 줄 수 있다.
- 접속권한, 테이블 생성권한 주기
> grant connect, resource to 계정;

 

- 그러면 이제 cmd를 열어서 방금 내가 만든 계정으로 바로 접속이 가능하다.

 

- 테이블이 몇개 있는지 확인

SYS계정 확인
방금 만든 사용자 계정 확인

 

- 테이블 select 조회시 데이터가 끊어져서 나올때

- 'set pages 4000' 과 'set lines 5000'명령어를 입력하면 이쁘게 잘 나온다.

 

- 중요도 : 접근제어, 암호화, 작업결재, 취약점
- DBMS 취약점 분석 평가 항목은 아래와 같다.

 

- 테이블 생성

CREATE TABLE emp (
    empno NUMBER(4) NOT NULL,
    ename VARCHAR2(10),
    job VARCHAR2(9),
    mgr NUMBER(4),
    hiredate DATE,
    sal NUMBER(7,2),
    comm NUMBER(7,2),
    deptno NUMBER(2)
);



- 새로 만든 emp테이블에서 empno를 프라임키로 만들기

alter table emp add constraint emp_pk primary key(empno);

 

- 테이블에 데이터 넣기

insert into 테이블이름 values(데이터1, 데이터2, 데이터3 등등);

- 데이터 확인

 

- cmd에서 하기 힘드니 SQL Developer를 이용해본다.
- 실행 후 이름은 system 비밀번호는 oracle로 해서 테스트하고 접속한다.

 

 

 

[3,4,5교시 - 시스템 보안]

/ 클라이언트용 리눅스 이미지 추가
- lvm : 로지컬 어쩌고 저쩌고 인데 우리는 싱글이라서 표준 파티션을 사용한다.(lvm이 무엇인지 검색해보기)
- swap추가하면 sda1이 보이는데 왜 그런것인지도 자세히 검색해보기
- 그놈 데스크탐은 지놈응용, 개발용 도구 선택하기
- 네트워크는 켬으로 선택
- 네트워크 설정할때 하단의 호스트 이름에 'client'로 설정
- kdump사용안함으로 설정

- fdisk -l : 현재 파티션 정보(목록)
- 20Gb로 했는데 21기가로 보이는 이유 : 논리적으로 보이기 때문


- fdisk /dev/sdb : sdb를 파티셔닝..

- 디스크를 추가하면 sd뒤에 알파벳이 순서대로 붙어서 sda, sdb, sdc.. 순으로 이름이 지어진다.
- 이때 sda를 두개로 파티셔닝 하면 sda1, sda2 가 되고
- sdb를 파티셔닝을 안하고 한개로 쓰겠다 하면 sdb1이 되는 식이다.

# df -h : 서버의 사용량 가용량을 보는 명령어. -h 옵션은 사람이 쉽게 볼 수 있게 보여줘라

 

 

/ 관리자 권한
- 관리자 권한 : su -   => root로 로그인
- su -c "명령어" : 임시로 잠깐 명령어를 쓸때만 root권한을 빌려씀. 권한만 빌려서 쓰고 로그인 변경X

/ 일반 사용자에게 임시 관리자 권한을 주기
# sudo
- sudo를 쓰게 하려면 따로 설정을 해줘야 한다.
- 관리자로 들어간 후 'vi /etc/sudoers'를 수정해준다.

/ vi 편집기에서 줄 복사하기
- yy를 눌러서 줄을 버퍼에 복사한 후 원하는 줄에 가서 p를 누르면 해당줄이 복사된다.

 

- 네트워크 재시작

 

- sudo 를 한경우 특정 시간동안 sudo를 한것이 적용되어서 한동안은 root권한의 작업을 할때 sudo를 할때 비밀번호를 묻지 않는다.

/ 편집기
- 텍스트 기반 편집기 : vi, emac(리처드 스톨만이 제작함), pico
- 그래픽 기반 편집기 : gedit

Q) X윈도우(init 5)환경에서만 사용가능한 편집기가 아닌 것은?
1. gedit
2. nano
3. xemacs
4. gvim

- 구분하기 -> GNOME(일반 그래픽 환경) / KDE(고급스러운 그래픽 환경)

/ 런레벨
- init 0 : 시스템 종료
- init 1 : 유지보수 모드, 단독
- init 2 : 거의 사용X, (NFS가 지원이 안되는 다중(멀티)유저 모드)
- init 3 : CLI모드(명령어 모드), 다중 모드, NFS 지원가능
- init 4 : 거의 사용X
- init 5 : X윈도우 기반 (그래픽 모드), 다중 모드, NFS 지원가능
- init 6 : 리부팅
* NFS : 네트워크 파일 시스템

/ cli에서 명령어를 백그라운드로 실행시키려 할때 맨 끝에 &를 붙여준다.

gedit /etc/hostname &

 

/ 백그라운드로 프로그램을 돌리는 법
# vi /etc/hostname &
- 또는 vi에 들어가 있는 상태에서 컨트롤+z를 누르면 잠깐 뒤로 넘긴다.

/ 백그라운드로 돌아가는 프로그램들 확인하는 법
# jobs

/ 백그라운드로 들어간 작업을 꺼내는 법
- foreground : fg %작업번호

 

/ GNOME 기반 응용 프로그램
- nautilus : GUI 시스템 파일 관리자 -> nemo
- mutter : 디스플레이 제어(매니저)
- metacity : GNOME 2.x 윈도우 매니저
- enlightenment : 초기 사용 윈도우 매니저
- GTK+ : GNOME 관련 라이브러리(OS : GimpToolkit)
- GimpToolkit : 이미지 프로그램(그림판, 포토샵)
- totem : 미디어플레이어
- evolution : 오피스 프로그램

/ KDE 기반 응용 프로그램
- konqueror : 만능 파일 관리자
- kwin : KDE 2.x 윈도 매니저
- Qt : KDE 관련 라이브러리(C++)

 

/ 1번 서버에 하드디스크 추가하기
- 첫번째 서버에 우클릭 > 세팅 > +클릭 > 하드디스크 선택 다음 > SCSI 선택 다음 > 크리에이드 어쩌고 선택 다음 > 1기가, 싱글> 이름 적당히 짓고 피니쉬 > 세팅 화면에서 ok를 꼭 누를것
* SCSI : 스몰 컴퓨터 시스템 인터페이스

- 아직은 fdisk를 해도 안보인다. (리부팅을 해야 함)

 

- 리부팅을 하니 보인다.
- 아직 파티셔닝을 하지 않아서 sdb1 같은 식으로 보이지 않고 sdb로만 보인다.

- 아직 파티셔닝을 하지 않아서 'df -h'로는 보이지 않는다.

 

내일 'fdisk /dev/sdb', 'mkfs.ext4 /dev/sdb1', 'mount' 등을 써볼것이다.

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
728x90

[1,2교시 데이터베이스]

- 오라클 설치 및 실습
- 비밀번호는 oracle로 통일한다.

 

SQL > select * from all_users;

SQL > show user;

 

/ hr계정의 비밀번호를 변경한다.
SQL> alter user hr identified by hr;

 

/ hr로 접속하기
- 바로 들어가면 막혀있다.
- 락이 걸리면 아무 계정으로도 접속되어 있지 않다
- 다시 sysdba로 접속 한 후 account unlock으로 hr 계정의 락을 푼다.
- conn 계정/비번 으로 hr계정에 로그인 해본다.
- 성공

 

- 데이터베이스 들 목록의 구조
- NAME이 테이블 이름이다.

 

- 쓰레드(?)
- 내용 중 인스턴스(INSTANCE)가 테이블 이름이다.

 

 

[3,4,5교시 시스템]

/ ssh 설치했던 config파일 찾기
- yum으로 설치했던 이름 찾고
# yum list installed | grep ssh

- openssh-server로 설치했었으니까 rpm -qc에서 openssh-server로 찾기
# rpm -qc openssh-server

 

- 텔넷 설정

service telnet #/etc/services
{
    disable = no                                    # 해당 서비스 사용?
    socket_type = stream                         # steam : TCP소켓, dgram : UDP소켓
    protocol = tcp                                  # 프로토콜
    wait = no                                        # 연결할때 대기시간 제공 여부(다른 접속을 할 수 있게 해주겠느냐)
    user = root                                      # 서비스를 시작하는 권한 사용자
    server = /usr/sbin/in.telnetd                # 서비스를 처리하는 프로그램 위치
    log_on_failure += USERID                   # USERID를 포함해서 로그인실패 정보를 로그에 쌓겠다.
    access_times = 07:30-18:30                 # 접속이 가능한 시간
    cps = 50 10                                    # Connect Per Second.
                                                        # 앞숫자 : 1초에 허용되는 연결수.
                                                        # 뒤숫자 : 앞숫자를 초과하면 연결거부하는 시간(초)
    instance = 50                                   # 서버에 접근/접속할 수 있는 최대 클라이언트 수
    per_source = 2                                 # 출발지(소스)마다 연결은 최대 2개만 허용
    only_from = 10.10.10.10 192.168.111.1  # 접속할 수 있는 (소스)아이피 또는 대역 제한(띄어쓰기 구분)
}

 

/ 명령어 모드 서버 설치 및 클라이언트용 서버 설치

- new > 티피컬 > 세번째 넥스트 > 리눅스 센트os > 이름을 CentOS 7_102, 위치는 "D:\CentOS\CentOS7_102"
> 20Gb 싱글 > 피니쉬

- 102의 에디트 > 프린트, 사운드, usb 삭제 > cd/dvd선택 > Use ISO image file > centos ios파일 로드 > ok

- 102 파워 on!

- 한국어 > 키보드 추가 영어 미국 > 소프트웨어 선택 최소설치 > 설치대상 파티션을 설치합니다. > 표준 파티션 > +클릭 > swap을 2048, /만 선택해서 추가 > 네트워크는 켬 > 설치 시작

- 비밀번호는 password , 사용자는 centos/centos

- 호스트 네임 변경할때 꼭 /etc/hostname을 vi로 변경하지 않아도 된다.
# hoswnamectl set-hostname 호스트이름

 

- se리눅스 활성화 확인
# sestatus

- se리눅스 비활성화 하기
# vi /etc/sysconfig/selinux
- SELINUX를 disabled로 변경

 

- nmtui > Edit a connection > 첫번째 엔터

 

- ifconfig와 nslookup이 실행이 안된다. 설치가 안되어 있기 때문
- yum으로 설치하기
- 이미지에서 오타났는데 bind-utils이다.
- systemctl restart network로 재시작하고 ifconfig를 하면 아이피가 확인된다.

 

- 여까지 하고 리부트(reboot)

- VMware에서 여기까지 진행된 내용을 스냅샷을 찍는다.
- 시계에 플러스있는모양 클릭하여 저장한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
728x90

/ 이름을 물어보면 정보를 알려줌
# dig www.naver.com  
- 자세하게 알려줌 

/ 네트워크 설정하면서 우리가 집어넣은 네임서버 정보를 볼 수 있다.
# cat /etc/resolv.conf

 

/ 파이프 more, 파이프 less
# rpm -ql httpd | more -> 스페이스바로 아래아래로 볼 수 있다.
# rpm -ql httpd | less -> 화살표로 왔다갔다 볼 수 있다.
- less를 빠져나올때는 q를 누르면 된다.
- less는 한줄씩 볼때는 좋은데 양이 또 너무 많으면 보기 힘들다.
- more은 윗 페이지를 다시 볼 수 없다.

 

# yum info httpd | head -10
- | -10 -> 헤드에서 10줄만 보여줘

# yum search httpd | head -10

- info와 search의 차이, 각 결과화면을 기억하기

 

# yum -y update httpd
- 업데이트 하기
- 되어 있는 경우 할것이 없다고 나옴

# yum -y install httpd
- 이미 설치되어있는 경우 할것이 없다고 나옴

/ 서비스 활성화, 비활성화 시키기
# systemctl disable httpd
# systemctl enable httpd
- ln : 링크
- -s : 소프트 링크

 

/ 링크
- ln : link
- ln -s : soft link. 유연성x. 링크 원본이 삭제되어도 목적 파일이 삭제되지 않음
- ln    : hard link. 유연성x. 링크 원본이 삭제되면 목적파일링크가 삭제된다.

/ 방화벽 정책
- All Deny : 일단 다 막고 시작함. 특정포트, 특정 서비스만 오픈, 중급이상 관리자들이 많이 사용
- All Open : 일단 다 열고 시작함. 필요한 포트와 서비스만 차단, 초급관리자들이 많이 사용
* 우리꺼는 들어올때는 All Deny, 나가는것은 All Open이다.

 

여기까지 복습
=================================================================

/ ssh
- Secure Shell의 약자. 22/tcp 암호화

/ telnet, telnetd : 23/tcp 암호화
- 텔넷은 보안이 취약하여 root로 바로 접속할 수 없다.

/ 텔넷 yum 확인
# yum list telnet*
- telnet : 클라이언트용
- telnet-server : 서버용

 

/ 설치하기
# yum install -y telnet telnet-server

 

/ 설치 후 확인
# yum list telnet*

 

/ 텔넷 시스템 시작
# systemctl start telnet.socket
# systemctl enable telnet.socket

/ 텔넷 상태 확인
# systemctl status telnet.socket

 

/ 프로세스 찾는 과정...
- ps -ef에서 telnet으로 검색이 안되는데 이유는 systemd로 통합이 되어서 그렇다고..
# ps -ef | grep systemd 로 검색해야 한다.

 

/ 텔넷 접속용 계정 따로 만들기 실습
# useradd teluser
- shadow에서 조회했을때 !!으로 되어있으면 teluser로 로그인할 수 없는 상태이다.
* *이어도 패스워드가 잠겨있는 상태이나 다른 인증방식으로 로그인할 수 있는 상태이다.

- 비밀번호를 만들어 주면 로그인이 가능해진다.
# passwd teluser
- 패스워드 부분에 $6$는 비밀번호 암호화 알고리즘, 두번째 $블라블라$는 솔팅 암호화 난수이다.
- 끝 부분의 7은 비밀번호 만료일수일다. (6번째 순서)
- 비어있는 7번째는 사용자 계정이 만료가 되는 날짜를 임의로 넣을 수 있다.
- 비어있는 8번째는 사용자 계정이 만료가 되려면 며칠이 남았는지 표시된다.(만료일수)

 

/ 사용자 관련 설정 파일
# vi /etc/login.defs
- 요 부분이 중요하다. 외워둘것

 

/ 사용자를 추가할때 홈 디렉토리를 어따가 둘지, 쉘을 뭘 쓸지 등등을 정한다.

 

/ 배시쉘을 쓰는 계정의 프로파일에 대한 정보. 배시쉘에 대한 일반적인 정보가 들어있는 디렉토리이다.
# ls -al /etc/skel

 

/ 사용자를 생성할때 홈디렉토리를 설정하고 싶다면 -d 옵션을 준다.
# useradd -d 경로 사용자이름
ex) # useradd -d /root/mydir teluser2

/ 사용자를 지울때 홈 디렉토리까지 지우려면
# userdel -r 사용자이름
ex) # userdel -r teluser2

/ 사용자를 만들면서 비밀번호를 같이 적용하려면 -p옵션을 준다.
# useradd -p 비밀번호 사용자이름
ex) # useradd -p 1234 teluser3
- 단, 이렇게 하면 shadow에 평문으로 저장이 된다.

 

/ 이전 리눅스의 /etc/passwd에 있는 비밀번호를 /etc/shadow에 옮기려면
- /etc/passwd pwconv -> /etc/shadow를 하면 된다. (지금 리눅스에서 하면 이상해짐)
- 되돌리는 것은 pwunconv를 하면 된다.

 

/ 터미널 접속하기
* 터미널에서는 사용자 계정일 경우 $로 표시된다.

 

/ 접속한 유저들 확인해보기
# who

 

/ 텔넷 나가기
# exit

/ 방화벽에 23번 포트 허용해주기

 

/ 외부 pc에서 cmd로 텔넷을 사용해보기
- 맨처음에는 텔넷을 사용할 수 없으므로 활성화 해야한다.

- 제어판 > 프로그램 > Windows 기능 켜기/끄기 > 텔넷 클라이언트 체크

- 이제 접속이 될것이다.

- who로 확인해보면 접속한 유저 목록이 확인된다.

- 텔넷으로 tcping처럼 확인할 수도 있다.
ex) telnet www.naver.com 22일때 빈화면이 나오면 해당 포트가 열려있는 것이다.

- putty로 텔넷 접속을 해볼 수도 있다.

* 가상 터미널 서버 pts(pseudo terminal server)

- w명령어와 who명령어의 결과 화면을 기억해두자.
- w는 쉘 정보는 보이는데 who는 안나온다.

- w, who 는 /ver/run/utmp에서 보이는 파일이다.
- /var/log/btmp는 lastb인데, 실패한 로그인 이력을 저장한다.
- /var/log/wtmp는 last인데, 로그인/로그아웃 리부팅
- /var/log/lastlog는 lastlog인데, 마지막 로그인이력

/ 관리자로 사용자를 바꾸기
# su - root
- su를 할때 -를 어지간하면 쓰는것을 추천 : 대시를 쓰지 않으면 루트 사용자의 옵션을 가져가지 않는다.

/ sudo
- 관리자 계정이 아닐때 sudo를 붙이면 관리자 계정으로 실행시키게 된다.(패스워드는 입력해야 함)

- 텔넷은 은퇴하는 프로그램이다...

 

/ ssh
- 공개키 인증방식과 관련하여 접속할것인데 접속할것이냐? 예

/ 쁘띠로 접속 후 서버에서 접속된 내용을 확인하기

 

- 또는 /var/log의 secure파일을 확인해볼 수 있다.
- 로그인 인증 내역이 남는다.
# cat /var/log/secure

 

/ ssh의 22번 포트 변경하기
- ssh의 22번 포트는 너무 유명한 포트라 접속하는 22번 포트를 변경할 수도 있다.
- 컨피그 파일 확인하기
# rpm -qc openssh-server
- 에서 /etc/ssh/sshd_config가 설정파일이다.

- sshd_config파일의 17번째 라인을 주석해제하고 포트를 변경한 후,ㅊㅇ 
- #systemctl restart sshd로 재시작을 해준다.
- 어지간하면 포트는 1023포트 이상으로 적용해준다.
- 확인은 # netstat -antp | grep sshd로 하면 된다.
- 근데 방화벽이 막혀있어서 밖에서 바로 접속이 안된다..
- 2220 방화벽을 추가해주자

 

/ 외부에서 루트가 로그인 하지 못하게 하기
- PermitRootLogin
- 아까의 /etc/ssh/sshd_config에서 48행의 PermitRootLogin을 no로 변경해준다.

# vi /etc/services
- 46, 47행의 포트번호를 변경해준다.

- 그리고 # systemctl restart sshd로 서비스를 재시작 해준다.

- 이후 쁘띠로 centos로 접속하여 'su -' 관리자 계정으로 스위치 유저를 하더라도 접속했던 계정은 그대로 centos이다.

 

- 누가 'se -'명령어를 서서 관리자 계정으로 스위치 유저를 했는지도 알 수 있다.
# cat /var/log/secure

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90

+ Recent posts