본문 바로가기
정보보안

정보보안8 1차시

by IT매니절 2024. 11. 9.

로키리눅스 환경 구축

NVMe 하드디크스 9개 추가 (기존것과 합하여 총 10개)

 

수동 파티션 설정

 

파티션을 나누지 않으면 보안상 문제가 발생한다.

 

(* root 계정 비밀번호 설정하는 걸 깜빡해서, 접속 후에 sudo passwd root 명령어를 통해 비밀번호를 재설정해주었다)

 

LVM(Logical Volume Manager)
논리적인 디스크 관리자. 여러 개의 하드디스크를 하나로 통합한 후, 파티션을 분할해 사용하는 기술.

Physical Volume(물리 볼륨) : 물리적인 하드 디스크
Volume Group(볼륨 그룹) : 물리 볼륨이 합쳐진 가상 하드디스크
Logical Volume(논리 볼륨) : 가상의 하드디스크(볼륨그룹)에서 분할된 파티션
Physical Extent(PE) : 물리 볼륨이 갖는 일정한 블록
Logical Extent(LE) : 논리 볼륨이 갖는 일정한 블록

 

순서
물리 볼륨 생성 > 볼륨 그룹 생성 > 논리 볼륨 생성 > HDD 사용
파티션을 자동으로 설치하면 LVM으로 설치되며 자동으로 lvm2 패키지가 설치된다.
수동 설치시 본래는 설치가 되지 않지만, 로키 리눅스는 자동으로 설치된다.
데비안에서는 apt-get, 레드햇에서는 dnf를 사용해 lvm2를 설치한다.

 

fdisk /dev/nvme0n2
=> /dev/nvme0n2 를 쪼개는 등 파티션 설정을 변경할 수 있다.

 

# fdisk -l | grep 'Disk'
Disk /dev/nvme0n1: 20 GiB, 21474836480 bytes, 41943040 sectors
Disklabel type: dos
Disk identifier: 0x8930ea86
Disk /dev/nvme0n2: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk /dev/nvme0n3: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk /dev/nvme0n4: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk /dev/nvme0n5: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk /dev/nvme0n6: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk /dev/nvme0n7: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk /dev/nvme0n8: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk /dev/nvme0n9: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk /dev/nvme0n10: 20 GiB, 21474836480 bytes, 41943040 sectors

=> 현재 디스크 현황 확인

 

커맨트 입력 종류

g gpt 타입 생성
n dos 타입 생성
d delete 삭제
n add 추가

n > enter 4번 친 상태


p print 정보 출력


l list 리스트 타입 출력


t change type 파티션 타입 변경
q 저장하지 않고 종료
w 저장하고 종료

 

2~10번까지 n(추가) > 엔터 4번 > t > 8e > w (저장) 입력하여

Linux LVM 타입 8e로 변경해주었다

 

VG 볼륨 그룹을 생성하여 논리 볼륨으로 나누고
home2, oracle, mariaDB로 나누어 본다

 

# pvcreate \
> /dev/nvme0n2p1 /dev/nvme0n3p1 /dev/nvme0n4p1 /dev/nvme0n5p1 /dev/nvme0n6p1 \
> /dev/nvme0n7p1 /dev/nvme0n8p1 /dev/nvme0n9p1 /dev/nvme0n10p1
  Physical volume "/dev/nvme0n2p1" successfully created.
  Physical volume "/dev/nvme0n3p1" successfully created.
  Physical volume "/dev/nvme0n4p1" successfully created.
  Physical volume "/dev/nvme0n5p1" successfully created.
  Physical volume "/dev/nvme0n6p1" successfully created.
  Physical volume "/dev/nvme0n7p1" successfully created.
  Physical volume "/dev/nvme0n8p1" successfully created.
  Physical volume "/dev/nvme0n9p1" successfully created.
  Physical volume "/dev/nvme0n10p1" successfully created.

=> 물리볼륨 생성

 

vgcreate INFORMATIONSECURITY \
>  /dev/nvme0n2p1 /dev/nvme0n3p1 /dev/nvme0n4p1 /dev/nvme0n5p1 /dev/nvme0n6p1 \
>  /dev/nvme0n7p1 /dev/nvme0n8p1 /dev/nvme0n9p1 /dev/nvme0n10p1
  Volume group "INFORMATIONSECURITY" successfully created

=> 볼륨그룹 생성

 

# vgdisplay
  --- Volume group ---
  VG Name               INFORMATIONSECURITY
  System ID
  Format                lvm2
  Metadata Areas        9
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                9
  Act PV                9
  VG Size               179.96 GiB
  PE Size               4.00 MiB
  Total PE              46071
  Alloc PE / Size       0 / 0
  Free  PE / Size       46071 / 179.96 GiB
  VG UUID               edZZlz-jHZk-D6Da-IGST-ncHU-dA1W-l53jLs

=> Act PV 9, VG Size 179.96 GiB 등 확인 가능

 

# lvcreate -n homeData -L 60g INFORMATIONSECURITY
# lvcreate -n oracleData -L 60g INFORMATIONSECURITY
# lvcreate -n mariadbData -l 100%FREE  INFORMATIONSECURITY

 

# lvdisplay
  --- Logical volume ---
  LV Path                /dev/INFORMATIONSECURITY/homeData
  LV Name                homeData
  VG Name                INFORMATIONSECURITY
  LV UUID                1o2sw1-g70b-hQcq-axyE-YFDZ-g2d1-QifvXR
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2024-11-09 01:36:30 -0500
  LV Status              available
  # open                 0
  LV Size                60.00 GiB
  Current LE             15360
  Segments               4
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

  --- Logical volume ---
  LV Path                /dev/INFORMATIONSECURITY/oracleData
  LV Name                oracleData
  VG Name                INFORMATIONSECURITY
  LV UUID                CMraFN-KVEz-goeJ-rqNW-G2dx-Xn5b-PFWjlF
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2024-11-09 01:37:26 -0500
  LV Status              available
  # open                 0
  LV Size                60.00 GiB
  Current LE             15360
  Segments               4
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1

  --- Logical volume ---
  LV Path                /dev/INFORMATIONSECURITY/mariadbData
  LV Name                mariadbData
  VG Name                INFORMATIONSECURITY
  LV UUID                Y9b19h-RGce-RxIv-omVJ-r3xd-UBZe-odbxdG
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2024-11-09 01:40:02 -0500
  LV Status              available
  # open                 0
  LV Size                59.96 GiB
  Current LE             15351
  Segments               3
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

만들어진 논리 볼륨을 lvdisplay로 확인

 

# ll /dev/mapper/
합계 0
lrwxrwxrwx. 1 root root       7 11월  9 01:36 INFORMATIONSECURITY-homeData -> ../dm-0
lrwxrwxrwx. 1 root root       7 11월  9 01:40 INFORMATIONSECURITY-mariadbData -> ../dm-2
lrwxrwxrwx. 1 root root       7 11월  9 01:37 INFORMATIONSECURITY-oracleData -> ../dm-1
crw-------. 1 root root 10, 236 11월  9 01:36 control

 

/dev/mapper/ 폴더에서 만들어진 논리 볼륨을 확인할 수 있다.

 

mkfs.xfs /dev/mapper/INFORMATIONSECURITY-homeData    -L homeData
mkfs.xfs /dev/mapper/INFORMATIONSECURITY-oracleData    -L oracleData
mkfs.xfs /dev/mapper/INFORMATIONSECURITY-mariadbData    -L mariadbData
=> 관리자 명령어로 해당 파티션의 라벨명을 각각 설정하고 재부팅한다.

 

mount /dev/mapper/INFORMATIONSECURITY-mariadbData /var/lib/mysql
mount -t xfs /dev/mapper/INFORMATIONSECURITY-homeData /home2
mount /dev/mapper/INFORMATIONSECURITY-oracleData /u01/

각각 폴더를 만들고 마운트를 해준 뒤, chcon -t default_t 권한설정도 해준다.
root권한으로 진행시 ' your fstab has been modified ... 하략 ' 이런 메시지가 뜰 수 있는데,
df로 확인하면 마운트가 되어 있으니 상관없다

 

df | grep /dev/mapper/
/dev/mapper/INFORMATIONSECURITY-mariadbData  62846996  471216  62375780   1% /var/lib/mysql
/dev/mapper/INFORMATIONSECURITY-homeData     62883840  471468  62412372   1% /home2
/dev/mapper/INFORMATIONSECURITY-oracleData   62883840  471468  62412372   1% /u01

 

영구적으로 마운트해주기 위해서

vi /etc/fstab에

/dev/mapper/INFORMATIONSECURITY-mariadbData             /var/lib/mysql          xfs     defaults        0 0
/dev/mapper/INFORMATIONSECURITY-homeData                /home2                  xfs     defaults        0 0
/dev/mapper/INFORMATIONSECURITY-oracleData              /u01                    xfs     defaults        0 0

추가해준다.

 

mount -a 명령어로 fstab에 있는 시스템을 모두 마운트해주고

systemctl daemon-reload 리로드 후

reboot 해준후에도 df에 남아있으면 영구 마운트 완료

(* -f는 마운트할 수 있는지만 확인, -r 읽기만 가능하게 마운트, -w 읽기쓰기 모드로 마운트 등등)

 

 

 

 

APM 환경 구성하기

dnf -y module reset php
dnf -y module enable php:8.2
dnf -y install \
mariadb mariadb-server php-{cli,fpm,zip,gd,mbstring,curl,xml,pear,bcmath,json,pdo} \
libjpeg giflib libpng freetype httpd php php-mysqlnd git

# 웹서버 설정파일 수정
sed -i 's/php|phar/php|html|phar/' /etc/httpd/conf.d/php.conf
sed -i 's/^short_open_tag = Off/short_open_tag = On/' /etc/php.ini
sed -i 's/^;date.timezone =/date.timezone = Asia\/Seoul/' /etc/php.ini
sed -i 's/^;security.limit_extensions = .php .php3 .php4 .php5 .php7/security.limit_extensions = .php .html/' /etc/php-fpm.d/www.conf
systemctl enable --now php-fpm
systemctl enable --now httpd

# MariaDB 설정

sed -i '21icollation-server=utf8_general_ci'     /etc/my.cnf.d/mariadb-server.cnf
sed -i '22icharacter-set-server=utf8'            /etc/my.cnf.d/mariadb-server.cnf
sed -i '23iskip-character-set-client-handshake'  /etc/my.cnf.d/mariadb-server.cnf
sed -i '24ibind-address=127.0.0.1'               /etc/my.cnf.d/mariadb-server.cnf
systemctl enable --now mariadb

mysql_secure_installation

# 접속 계정에 맞게 변경
cat << EOF > /home/linuxadmin/.my.cnf
[client]
host = localhost
user = root
password = 111111
EOF
chown linuxadmin.linuxadmin /home/linuxadmin/.my.cnf
chmod 600 /home/linuxadmin/.my.cnf

# 방화벽
firewall-cmd --permanent --add-service={http,https}
firewall-cmd --reload

# 웹페이지 생성
echo "<?php phpinfo(); ?>" > /var/www/html/index.html

dnf 통해서 php를 8.2로 변경하여 설치함.

mysql_secure_installation은 db설정 부분.

 

java 관련 설치

dnf -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel \
tomcat tomcat-webapps tomcat-admin-webapps tomcat-docs-webapp

 

vim /etc/tomcat/tomcat-users.xml
<role rolename="admin-gui"/>
<role rolename="manager-gui"/>
<user name="admin" password="1" roles="admin-gui,manager-gui" />
=> 설정 추가. 배포를 위한 설정. (57~66 라인)

 

** Rocky Linux 8에서 Tomcat 재시작시 Error 상황에 대한 대처

dnf -y install epel-release-8-18.el8.noarch
dnf -y install haveged
systemctl enable --now haveged
systemctl status haveged
=> JVM 엔트로피가 부족해서 tomcat이 재시작할 때 문제가 되는 경우가 있다.
cat /proc/sys/kernel/random/entropy_avail 의 값이 낮다면 엔트로피 부족으로 암호화 작업이 지연될 수 있다
haveged는 고속 엔트로피 생성 데몬이고, 이를 설치하여 데몬으로 시작하면 시스템의 엔트로피 풀이 더 빨리 채워진다
500이하 엔트로피는 낮으며, 1000 이상이 적합하고 2000이상이면 고도화된 암호화 작업이나 고부하 상황에 알맞다

 

 

톰캣 매니저
: 배포된 프로젝트를 관리할 수 있는 페이지.
tomcat-admin-webapps 패키지 필요
http://localhost:8080/manager/html 로 접근

vim ~tomcat/webapps/manager/META-INF/context.xml

접근을 위해 22라인에 자신의 ip를 추가한다

vim ~tomcat/webapps/docs/META-INF/context.xml

접근을 위해 20라인에 자신의 ip를 추가한다

 

firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload
firewall-cmd --list-ports

외부접속을 위해 방화벽에 8080/tcp 허용. 리로드한 후에 리스트 확인.

 

systemctl enable --now tomcat.service

톰캣을 올려주고

 

# netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp6       0      0 :::8080                 :::*                    LISTEN      29279/java

netstat에 떠있는지 확인한다.

접속확인

 

dnf -y install wget
wget을 이용해서 오라클 11g XE 설치

 

usermod로 홈디렉터리를 변경(-d)할 수 있는데(-m을 같이 쓰면, 새 디렉터리에 파일을 옮겨준다),
해당 사용자가 접속중이면 vipw를 통해 변경해줄 수 있다.

 

useradd -D -b /home2
=> 앞으로 만들어지는 사용자는 사용자 디렉터리가 /home2에 만들어진다.

 

dnf -y install unzip net-tools bc libnsl
=> unzip net-tools bc libnsl 설치
unzip oracle-xe-11.2.0-1.0.x86_64.rpm.zip
=> 압축해제
cd Disk1
=> 압축해제된 폴더 내부로 이동
sudo rpm -Uvh oracle-xe-11.2.0-1.0.x86_64.rpm
=> 레드햇에서 패키지를 관리하는 프로그램 rpm을 이용하여 설치한다. 의존성에러가 발생할 수는 있다.
sudo /etc/init.d/oracle-xe configure
=> Specify the HTTP port that will be used for Oracle Application Express [8080]: 이 때 포트를 변경할 수 있다. 9090으로 설정함. initial configuration: / Confirm the password: 이 때는 비밀번호 설정.

rlwrap
오라클 사용시 sqlplus를 더 편하게 사용하게 해주는 프로그램 (방향키 등... )

rlwrap을 설치하고
sudo su - oracle 로 사용자를 변경한 뒤
cp /etc/skel/.bash* .
파일들 복사해오고
vim .bashrc 설정에
source /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh
alias sqlplus='rlwrap sqlplus'
추가해준다

rlwrap_rocky8
0.34MB

해당 파일은 강의중에 다운로드 받았다 공식설치 경로는 사라졌다는 듯...

 

source .bashrc
source를 통해 oracle_env.sh 파일 환경변수 설정

sqlplus / as sysdba
sqlplus를 통해 sysdba 계정으로 SQL 접속.

접속해서 실습용 텍스트 파일을 실행한다

@scott.sql.txt

내용은 테스트용 권한 부여, 테이블 생성, 더미 데이터 생성 등이다

 

sqlplus 사용예 ) sqlplus scott/TIGER

 

set linesize 200 (정보출력시 가로 사이즈)
column 컬럼명 format a40

 


JDBC 드라이버 설치하기

오라클11gXE를 사용하므로 이미 JDBC 드라이버를 가지고 있다

 

sudo cp /u01/app/oracle/product/11.2.0/xe/jdbc/lib/ojdbc6.jar ~tomcat/lib/
sudo systemctl restart tomcat.service

복사해서 tomcat/lib에 넣고 톰캣 재실행

 

sudo setenforce 0

oracle 11g 버전은 SELinux가 나오기 이전 버전이므로 꺼준다

 

AJP (Apache Jserv Protocol)
아파치 웹서버와 톰캣이 서로 통신하는 프로토콜
Jserv는 Java Servle의 약자. 아파치 톰캣 프로젝트로 흡수됨.

아파치 웹서버 - 정적인 페이지 (이미지)
아파치 톰캣 - 동적인 페이지

'정보보안' 카테고리의 다른 글

정보보안8 3차시  (0) 2024.11.16
정보보안8 2차시  (0) 2024.11.10
정보보안7 8차시  (0) 2024.11.03
정보보안7 6차시  (0) 2024.10.20
정보보안7 5차시  (0) 2024.10.19