본문 바로가기
리눅스

리눅스 수업 2 1차시

by IT매니절 2024. 4. 6.

Rocky Linux 설치하여, Rocky와 Centos7 두 개의 서버 이용.

 

1. Apache + PHP + MariaDB 환경 구성

DNS
Server  ┌─ 방화벽Firewall
↕                (httpd)      (php)        (php-mysql)
WEB    ↔  WEB   ↔  PHP    ↔  DBMS
Client          Server      Engine      MariaDB


- web server는 프로그래밍 능력이 없으므로, PHP Engine이 WAS의 역할을 함
- 도메인을 사용했을 때 web server -> web client -> dns server를 거침

 

 

2. Apache + Tomcat + Oracle 환경

DNS
Server ┌─Firewall      JSP
↕          │    (httpd)      (tomcat)       (oracle)
WEB    ↔ WEB   ↔  Tomcat   ↔  DBMS
Client        Server        WAS         Oracle XE

 

(* https 443/tcp, http 80/tcp, php-mysql 3306/tcp, oracle 1521/tcp)

 

최근에는 https처럼 전체 암호화 활용. 네트워크 속도, 컴퓨팅 속도가 빨라졌기 때문.

 

 

웹 애플리케이션의 기술들
- HTML : 태그를 이용
- CSS : HTML의 스타일과 레이아웃 정의
- Javascript : 클라이언트(프론트엔드) 사이드 스크립트. HTML을 동적으로 변환 
- PHP : 서버(백엔드) 사이드 스크립트 (Window, Unix, Linux)
- JSP : 서버(백엔드) 사이드 스크립트 (Window, Unix, Linux)
- ASP : 서버(백엔드) 사이드 스크립트 (Window)

 

서버 환경

APM + Tomcat : Apache + PHP + MySQL or MariaDB + Oracle + Java + Apache Tomcat
LAMP : Linux + Apache + MySQL or MariaDB + PHP (램프)
LEMP : Linux + Enginx + MySQL or MariaDB + PHP

 

보안설정

1. root로 접속하는 것을 금지한다.
일반유저로 접속한 후, root로 변경하여 사용한다.

 

/etc/ssh/sshd_config 파일의 PermitRootLogin No로 설정한 후,
systemctl reload sshd로 sshd 설정을 다시 읽어 적용.
이후부터 root 로그인이 금지된다.

( systemctl restart sshd : sshd 서버 프로그램 데몬을 중지한 후 다시 시작 )

 

2. 관리자용 사용자를 생성한다.

useradd -g wheel linuxadmin

(관리자는 wheel 그룹에 들어가야 한다)

 

3. PAM 모듈 설정에 의한 명령어의 권한 제한

su - : 영구적으로 관리자 권한으로 변경

    └ su : root로 변경하지만 일시적

    └ su - : root로 변경하면서 root의 환경변수도 변경된다

sudo : 명령어를 한 번 관리자 권한으로 실행해준다

 

/etc/pam.d/su 파일에서
auth            required        pam_wheel.so use_uid
해당 라인의 주석을 풀거나 추가하여,
wheel 그룹 사용자만 su 명령어를 쓸 수 있게 한다

 

wheel 그룹이 아닌 user1의 su -, sudo 명령어 시도 결과

 

 

설치

yum -y install httpd php php-mysql mariadb mariadb-server

=> httpd는 apahe를 의미함. php와 maraidb를 연결해주는 것이 php-mysql이다.

 

 

방화벽 설정
: 아웃바운드 패킷이 웹서버로 들어올 수 있게 서비스를 오픈한다


firewall-cmd --list-services
=> 현재 열려져 있는 서비스 확인

firewall-cmd --permanent --remove-service=dhcpv6-client
=> 쓸모없는 서비스는 삭제

firewall-cmd --permanent --add-service={http,https}                (공백 넣으면 오류남!)

또는 firewall-cmd --permanent --add-service=http                   (단일서비스 지정시)

=> http와 https 추가
firewall-cmd --reload
=> 방화벽 재시작

firewall-cmd --list-services

=> 다시 리스트 조회 후 추가된 것 확인

 

(permanent는 임시적인 것이므로 reload를 해야한다)

 

systemctl enable --now httpd
=> 웹서버를 영구적으로 실행. 재부팅시 자동으로 실행됨. enable 후 --now 지금 httpd 실행해달라는 명령어

 

웹서버 enable 실행시

Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

이런 안내가 출력된다.

ll /etc/systemd/system/multi-user.target.wants/

...
lrwxrwxrwx. 1 root root 37  4월  6 11:04 httpd.service -> /usr/lib/systemd/system/httpd.service

폴더를 확인해보면 httpd.service가 생성된 것을 확인할 수 있다.

 

systemctl stop httpd
systemctl disable httpd
서비스를 중지 시킨 뒤
ll /etc/systemd/system/multi-user.target.wants/
다시 폴더를 확인하면 httpd.service가 사라진 것을 확인할 수 있다.

(start 후 enable httpd 해주면 다시 생김)

 

systemctl status httpd
=> 웹서버 서비스의 현재 상태 조회

httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since 토 2024-04-06 11:11:26 KST; 1min 45s ago

 

/multi-user.target.wants/에 service가 있는 의미?

=> 해당 폴더에 있는 서비스들은 부팅시 자동으로 실행된다. (단, 심볼릭 링크를 직접 생성한다고 해서 systemctl status의 disabled가 enabled로 변경되지는 않는다. 이는 명령어를 통해 변경된다)

 

yum -y install tree
트리구조로 보기위해 설치

 

tree -F /etc/httpd/

/etc/httpd/                                <- 최상위 디렉터리
├── conf/                               <- 설정파일
│   ├── httpd.conf                <- 메인설정파일
│   └── magic
├── conf.d/                            <- 설정파일 보조 디렉터리
│   ├── README
│   ├── autoindex.conf
│   ├── php.conf                   <- php 설정 파일
│   ├── userdir.conf
│   └── welcome.conf
├── conf.modules.d/             <- 모듈 디렉터리
│   ├── 00-base.conf
│   ├── 00-dav.conf
│   ├── 00-lua.conf
│   ├── 00-mpm.conf
│   ├── 00-proxy.conf
│   ├── 00-systemd.conf
│   ├── 01-cgi.conf
│   └── 10-php.conf
├── logs -> ../../var/log/httpd/                                 <- 웹서버 로그 디렉터리. 심볼릭링크.
├── modules -> ../../usr/lib64/httpd/modules/        <- 동적모듈 디렉터리. 심볼릭링크
└── run -> /run/httpd/

 

ss -nlt | grep 80
LISTEN     0      128       [::]:80                    [::]:*

=> 80 port가 LISTEN 상태로 열려있다.

(LISTEN : 데몬 입장에서의 상태. Port가 오픈되어, 웹서버 데몬은 들을 준비가 되어 있다.)

* ss 명령어 = netstat 명령어를 대체한다

 

(netstat를 사용하려면 yum -y install net-tools 설치하여 netstat -nlt 로 사용)

netstat -nlt | grep 80
tcp6       0      0 :::80                   :::*                    LISTEN

=> 비슷하지만 약간 다르게 표기됨

 

옵션

n : 숫자로 표기
l : listen 포트만 표기
t : tcp를 의미

 

cd /var/www/html
=> 아파치 웹서버의 루트 디렉터리로 이동

(Document Root 디렉터리 : 웹문서의 최상위 디렉터리. 설정을 통해 변경 가능.)


http://192.168.100.3/ 로 접속하면 index.html 파일이 없어도 디폴트 페이지를 보여준다
(본인의 ifconfig 등으로 확인하고 본인 ip로 접속해야함)

이 경로에 index.html 파일을 만들면, 해당 페이지가 보이게 된다.

 

html만 있으면 내용이 변치 않는 정적인 웹페이지이고,

php 등의 서버 사이드 스크립트(또는 클라이언트 사이드 스크립트)가 들어가면 동적인 웹페이지가 된다.

 

vi /etc/httpd/conf.d/php.conf
<FilesMatch \.php$> → <FilesMatch \.(php|html)$>
=> php.conf 파일을 열어서, html도 php로 인식하도록 수정한다.

 

vi /etc/php.ini
=> php 설정파일.

808 data.timezone = Asia/Seoul             ← 시간설정
211 short_open_tag = On                       ← <?php 를 <?로 사용
478 display_errors = On                         ← 에러를 출력하는 옵션 (개발:On, 운영: Off) 

(vi 라인수로 이동하기 478G 이런식으로 숫자+shift+g 입력하면됨. : 콜론은 필요없음) 

수정하고 systemctl restart httpd 서버를 재시작하여 적용

(reload는 설정파일만 다시 읽는데, php 설정 파일은 reload로는 적용이 안되므로 restart 한다)

 

httpd 아파치 웹서버 데몬(웹서버 프로그램) 재시작
- 아파치 설정 파일을 수정했을 경우
- php 설정파일을 수정했을 경우
=> web server는 apache 설정파일과 php 설정파일을 읽어 메모리를 할당받아 web server 데몬 서비스를 시작한다
=> 시작할 때 읽기 때문에, 설정파일을 변경해도 실시간으로 적용되지 않으므로 재시작해야 한다

 

httpd -t
=> syntax(구문) 체크. 에러가 나지 않으면 그 때 systemctl restart httpd

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message

=> 서버이름ServerName이 없어서 나는 에러. /etc/httpd/conf/httpd.conf 에서 serverName을 설정해주면 된다

 

 

동적인 페이지 예시

http://192.168.100.3/?count=3

변수를 받아서 php로 count 개수만큼 특정 구문을 반복함

<?
     if(!isset($_GET['count'])) {
        echo "Centos7 으로 구축한 웹 서버!";
    } else {
        $count = $_GET['count'];
        $i = 1;
        while($i <= $count){
            echo "Centos7 으로 구축한 웹 서버!<br>";
            $i++;
        }
    }
?>             ;원래 <php? php?> 인데 설정으로 단축한 상태

 

(복습
vi 단축키
복사 : 한줄복사는 yy 특정라인수만큼 복사는 ny (ex 3y 5y ... )
커서뒤에 붙여넣기 : p (커서앞은 P)

삭제 : 한줄삭제 dd

되돌리기 : u )

 

 

mariadb는 yum으로 설치하면 낮은 버전이 설치되므로, 다른 방법을 이용한다

 

mariadb-server : 서버 패키지
mariadb : 클라이언트 패키지
/var/lib/mysql : 리눅스용 mariadb db 파일 위치 (기본값)
/etc/my.cnf : 설정파일

 

vi /etc/my.cnf
설정파일에
collation-server=utf8_general_ci
character-set-server=utf8
skip-character-set-client-handshake
bind-address=127.0.0.1

해당 설정을 추가해야 한글이 깨지지 않는다

 

systemctl enable --now mariadb
systemctl status mariadb

 

ss -ntl   

State      Recv-Q Send-Q Local Address:Port               Peer Address:Port     
LISTEN     0      50     127.0.0.1:3306                     *:*                

=> 127.0.0.1 설정을 해주어서, 외부에 오픈하지 않게 되어 있다.

 

mysql : mariadb 클라이언트 명령어

mysql입력 후 \s 로 characterset이 utf8로 되어있는지 확인한다

Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8

 

mariadb를 생성하면 mariadb 내 root계정이 생기는데, 시스템의 root 계정과는 다르므로 구분할 것 

 

mysqladmin -p

=> 비밀번호를 설정한 후, mysql 입력하여 접속.

(root로 접속한 경우, 비밀번호를 설정해도 시스템 계정 root와 mysql root 계정명이 일치하여 비밀번호를 묻지 않고 접속된다)

 

비밀번호를 잊어버렸을 때 복구하는 법
systemctl stop mariadb
=> 데몬 중지
mysqld_safe --skip-grant-tables &
mysql mysql
=> 권한 없이 들어가서
SELECT host,user,password from user;
=> 데이터 확인
update set pasasword=password('값') where user='root' and host='localhost';
=> 비밀번호 업데이트
pkill -9 mysqld
=> 프로세스를 죽인 다음
systemctl start mariadb
=> 재시작

 

DBMS 자동 접속하기

vi .my.cnf 에

[client]
password = 값 (암호화되지 않은)

이런식으로 셋팅해주면 된다 

'리눅스' 카테고리의 다른 글

소스 복사 붙여넣기  (0) 2024.04.07
리눅스 수업 2 2차시  (0) 2024.04.07
리눅스 수업 8차시  (0) 2024.03.17
리눅스 수업 7차시  (0) 2024.03.16
리눅스 수업 6차시 (셀프실습)  (0) 2024.03.14