로키리눅스 환경 구축
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 추가
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'
추가해준다
해당 파일은 강의중에 다운로드 받았다 공식설치 경로는 사라졌다는 듯...
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의 약자. 아파치 톰캣 프로젝트로 흡수됨.
아파치 웹서버 - 정적인 페이지 (이미지)
아파치 톰캣 - 동적인 페이지