본문 바로가기

정보 보안 수업/Lab 구성

정보 보안 랩(Lab) 파트 II: 서버 필수 패키지 설치

가. VI 편집기 설치 및 설정하기

# yum -y install vim

 

1. .bashrc 설정하기

# nano .bashrc

 - alias vi='vim 추가

 

Ctrl + X 누르고 yes(or y) 그리고 엔터키를 눌러 종료

 

2. /etc/vimrc 설정 파일에 vi  사용 시 편리성 및 효율성 설정

# nano /etc/vimrc


- 위 이미지처럼 아래 내용을 vimrc 파일 열고 맨 아래 열부터 추가 

# 줄 번호 표시

set nu            

# 자동 들여쓰기
set ai             

# C언어에 맞는 자동 들여쓰기
set ci               

# 백그라운드를 어둡게 
set bg=dark      

# 들여쓰기, 내어쓰기 간격을 4로 설정(4칸)
set sw=4         

# 탭 크기를 4로 설정(4칸)
set ts=4            

# 탭을 공백으로 수정

set expandtab  

# 커서가 있는 줄을 하이라이트 

set cursorline     

 

Ctrl + X 누르고 yes(or y) 그리고 엔터키를 눌러 종료

 

3. vi 편집기를 열어서 설정한 대로 나타나는지 확인


3.1. vi 명령어 기본 모드:

a. 명령모드(이동, 삭제, 복사)

b. 입력모드(글자 입력)

c. EX 모드(또는 콜론 모드):

    c.1.  :w     저장

    c.2.  :q      종료  

    c.3.  :w!    강제 저장

    c.4.  :q!    저장하지 않고 종료

    c.5.  :wq   저장하고 종료 

 

 

나. 프로그램 코딩을 위한 컴파일러 및 인터프리터 패키지 설치

1. C 언어 관련 패키지 설치

# yum -y install ctags wget man man-pages gcc make gdb glibc.i686 \
glibc-devel.i686  libgcc.i686  libstdc++.i686 glibc  glibc-devel  libgcc  libstdc++

 

* 위 패키지는 소프트웨어 개발에 필수적인 도구들이라 한 번에 같이 설치

[참고] 위 패키지 요약 설명

  • ctags: 소스 코드의 태그 파일을 생성하는 도구
  • wget: 웹에서 파일을 다운로드하는 도구
  • man: 명령어 매뉴얼을 보는 도구
  • man-pages: 명령어 매뉴얼을 포함하고 있는 패키지
  • gcc: C와 C++ 프로그래밍 언어를 위한 컴파일러
  • make: 컴파일 과정을 자동화하는 도구
  • gdb: 디버깅 도구
  • glibc.i686: i686 아키텍처를 위한 glibc 라이브러리
  • glibc-devel.i686: i686 아키텍처를 위한 glibc 개발 헤더 파일
  • libgcc.i686: i686 아키텍처를 위한 libgcc 라이브러리
  • libstdc++.i686: i686 아키텍처를 위한 libstdc++ 라이브러리
  • glibc: i686 및 x86_64 아키텍처를 위한 glibc 라이브러리
  • glibc-devel: i686 및 x86_64 아키텍처를 위한 glibc 개발 헤더 파일
  • libgcc: i686 및 x86_64 아키텍처를 위한 libgcc 라이브러리
  • libstdc++: i686 및 x86_64 아키텍처를 위한 libstdc++ 라이브러리

※  패키지 요약 설명 출처: Bard 에서 제공

 

- gcc 버전 확인: 

[root@localhost ~]# gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)

 

- gcc 명령어 경로 학인: 

[root@localhost ~]# which gcc
/usr/bin/gcc


[참고] gcc
는 다음과 같은 과정을 통해 소스 코드를 실행 파일로 컴파일 함

  1. 전처리(Preprocessing): 소스 코드에서 매크로를 확장하고, 헤더 파일을 포함
  2. 컴파일(Compilation): 전처리된 소스 코드를 기계어 코드로 변환
  3. 어셈블(Assembly): 기계어 코드를 기계어 명령으로 변환
  4. 링크(Linking): 다른 라이브러리와 함께 실행 파일을 생성

* gcc는  GNU Compiler Collection 약자

 

1.1. C 소스코드(myprogram.c) 작성
  1. #include <stdio.h>
  2
  3 int main(){
  4    printf("Hello C!\n");
  5    return 0;
  6 }

 

1.2. 소스코드 컴파일 

- 컴파일이란? 소스 코드를 실행파일로 뽑는 작업
- 컴파일 형식.1: gcc 소스파일명 -o 실행파일명

- 컴파일 형식.2: gcc -o 실행파일명 소스파일명

 

1.3. 컴파일된 실행파일 실행

# ./myprogram 

 

 

2. C++ 언어 관련 패키지 설치

# yum -y install gcc-c++

 

- gcc 버전 확인: 

[root@localhost ~]# g++ --version
g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)

 

- g++ 명령어 경로 학인: 

[root@localhost ~]# which g++
/usr/bin/g++

 

2.1. C++ 소스코드(myprogram2.cpp) 작성
  1 #include <iostream>
  2 int main(){
  3
  4     std::cout << "Hello C++!\n";
  5     return 0;
  6 }

 

2.2. 소스코드 컴파일 

- 컴파일이란? 소스 코드를 실행파일로 뽑는 작업
- 컴파일 형식.1: g++ 소스파일명 -o 실행파일명

- 컴파일 형식.2: g++ -o 실행파일명 소스파일명

[root@localhost ~]# g++ myprogram3.cpp -o myprogram3
[root@localhost ~]# g++ -o myprogram3 myprogram3.cpp

2.3. 컴파일된 실행파일 실행

[root@localhost ~]# ./myprogram3
Hello C++!

 

 

3. JAVA 언어 관련 패키지 설치

# yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel

 

- java, javac 버전 확인: 

[root@localhost ~]# java -version
openjdk version "1.8.0_382"
OpenJDK Runtime Environment (build 1.8.0_382-b05)
OpenJDK 64-Bit Server VM (build 25.382-b05, mixed mode)
[root@localhost ~]# javac -version
javac 1.8.0_382

 

- javac, java 명령어 경로 학인: 

[root@localhost ~]# which javac java
/usr/bin/javac
/usr/bin/java

 

3.1. Java 소스코드(Myprogram4.java) 작성
  2 class Myprogram4{
  3
  4     public static void main(String[] args){
  5
  6         System.out.println("Hello Java!");
  7
  8     }  
 9 }

 

3.2. 소스코드 컴파일 

- 컴파일이란? 소스 코드를 실행파일로 뽑는 작업
- 컴파일 형식: javac 소스파일명

[root@localhost ~]# javac Myprogram4.java

- class 파일 생성 확인 후

[root@localhost ~]# ls Myprogram4.*
Myprogram4.class  Myprogram4.java

 

3.3. 컴파일된 실행파일 실행

- 실행파일 이름뒤에 확장자 명을 안 붙임

[root@localhost ~]# java Myprogram4
Hello Java!

 

 

4. Python 언어 관련 패키지 설치

# yum -y install python3

 

- python3 버전 확인: 

[root@localhost ~]# python3 --version
Python 3.6.8

 

- python3 명령어 경로 학인: 

[root@localhost ~]# which python3
/usr/bin/python3

 

4.1. Java 소스코드(myprogram5.py) 작성
  1 print("Hi, Python!")

 

4.2. 소스코드 컴파일 

※ 파이썬은 인터프리터 언어로 컴파일이 필요없음

인터프리터 언어는 실행하면 코드를 바로 해석해서 실행

 

4.3. 소스코드 실행

[root@localhost ~]# python3 myprogram5.py
Hi, Python!

 

[참고]

- 컴파일 언어: C, C++, Java
- 인터프리터 언어: python, php, shell script

 

5. 셀스크립트 여러 실행 방법

# . myprogram6.sh
# bash myprogram6.sh
# sh myprogram6.sh
# chmod 755 myprogram6.sh

 

- bash 버전 확인: 

[root@localhost ~]# bash --version
GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)

 

- bash 명령어 경로 학인: 

[root@localhost ~]# which bash
/usr/bin/bash

 

5.1. 쉘스크립트 (myprogram6.sh) 작성
  1 echo "Hello Shell Script"

 

5.2. 소스코드 컴파일 

※ 파이썬은 인터프리터 언어로 컴파일이 필요없음

 인터프리터 언어는 실행하면 코드를 바로 해석해서 실행

 

5.3. 소스코드 실행

[root@localhost ~]# sh myprogram6.sh
Hello Shell Script

 

 

6. 웹 언어를 위한 JSP 관련 패키지 설치

# yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel tomcat tomcat-webapps

 

- 위에서 java 패키지를 설치 했기 때문에 아래처럼 톰캣만 설치하면 됨

# yum -y install tomcat tomcat-webapps

 

6.1. 톰캣(tomcat)  시작 및 활성화  하기

# systemctl start tomcat
# systemctl enable tomcat

 

6.2. 톰캣 시작 및 활성화 후, 서비스 포트(8080, 8005, 8009) 확인

# ss -nlt

[참고] 리눅스에서 ss -nlt 명령어는 TCP 연결을 확인하는 명령어

  • ss는 socket statistics의 약자로, 네트워크 소켓의 상태를 확인하는 명령어
  • -n은 호스트 이름과 포트 번호를 숫자로 표시
  • -l은 LISTEN 상태의 소켓만 표시
  • -t는 TCP 소켓만 표시

※  ss -nlt 명령어 요약 설명 출처: Bard 에서 제공

 

6.3. 방화벽 서비스 포터 추가, 정책 리로더 후 확인

# firewall-cmd --permanent --add-port=8080/tcp
# firewall-cmd --reload

- 서비스 포터 확인 

[root@localhost /]# firewall-cmd --list-ports
8080/tcp

 

6.4. 서버( :8080)로 접속해서 확인

 

 

6.5. jsp 소스코드 작성

- 톰캣 소스코드작성 경로 폴더:

[root@localhost ~]# cd /usr/share/tomcat/webapps/ROOT/

 

- hello.jsp 파일 작성

[root@localhost ROOT]# vi hello.jsp
  1 <%@ page language="java" contentType="text/html; 

              charset=UTF-8" pageEncoding="UT    F-8"%>
  2 <!DOCTYPE html>
  3 <html>
  4 <head>
  5 <meta charset="UTF-8">
  6 <title> ::: jsp 메인 페이지 ::: </title>
  7 </head>
  8
  9 <body>
 10  <% out.println("Hello JSP!"); %>
 11 </body>
 12 </html>

 

6.6. hello.jsp 소스코드 페이지 요청 확인