Nuke Olaf - Log Store

AWS - EC2 인스턴스위에 LAMP 설치 본문

Language/[PHP]

AWS - EC2 인스턴스위에 LAMP 설치

NukeOlaf 2020. 2. 24. 17:37

https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/install-LAMP.html

 

https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/install-LAMP.html

자습서: Amazon Linux AMI를 사용하여 LAMP 웹 서버 설치

docs.aws.amazon.com

 

Amazon Linux AMI 를 사용하여 LAMP 웹 서버 설치하기

1. 인스턴스를 시작할 때, SSH(포트22), HTTP(포트80), HTTPS(포트 443) 연결을 허용할 수 있도록 보안그룹을 구성해야한다.

 

2. 본격적인 세팅에 앞서 패키지를 최신버전으로 업그레이드 한다.

$ sudo apt update
$ sudo apt upgrade

 

3. 루트로 로그인하고 비밀번호를 설정한다

현재 계정확인

$ whoami

루트 로그인

$ sudo su

 

root 계정과 기본계정인 ubuntu 계정의 비밀번호를 설정해준다

$ passwd root
$ passwd ubuntu

 

4. Apache 웹 서버 설치 및 환경설정

(1) 아파치 웹 서버를 설치한다 (Apache 2.4.29 버전이 설치된다)

$ apt-get install apache2

 

*아파치 버전확인 명령어 (Ubuntu 기준)

$ apache2 -v

 

(2) 공인 IP (또는 공인 DNS 주소) 로 접속하여 웹 서버가 정상적으로 구동하는지 확인한다

이때, [네트워크 및 보안] - [보안 그룹] - [인바운드] - [편집] - [규칙추가] - [HTTP] 의 허용 아이피가 0.0.0.0/0 으로 설정되어 있어야 한다.

(/var/www/html 에 아직 콘텐츠가 없어서 Apache 의 테스트 페이지가 표시된다.)

 

(3) 아파치의 설치경로는 /etc/apache2 이다.

해당 경로로 들어가보면 아파치의 설정파일인 apache2.conf 를 확인할 수 있다.

apache2.conf 파일을 보면 document root 가 /var/www/ 로 되어있는것을 확인할 수 있다.

 

(4) 아파치 웹서버의 상태를 확인하는 명령어

$ service apache2 status

 

(5) root 계정이 아닌 기본계정 'ubuntu' 에서 Apache document root 디렉토리에 보관된 파일을 처리하기 위해서는 해당 디렉토리의 소유권 권한을 변경해야 한다.

Apahce document root 기본 루트는 /var/www/html 이며, 기본적으로 소유권이 root 에 있다.

나는 apache 라는 그룹을 만들고, ubuntu 사용자를 apache 그룹에 추가할 것이다.
그다음, /var/www 및 그 콘텐츠의 그룹 소유권을 apache 그룹으로 변경할 것이다.

그룹 생성 명령어

$ groupadd apache

사용자에게 그룹 추가하기

$ usermod -a -G apache ubuntu

/etc/group 을 cat 명령어로 확인하면, 아래와 같이 apache 그룹에 ubuntu 사용자가 추가된것을 확인할 수 있다.

exit 명령어로 로그아웃한 다음, 터미널 창을 닫았다 다시 열어준다.

 

(6) /var/www 및 그 콘텐츠의 그룹 소유권을 apache 그룹으로 변경해준다

해당 폴더(디렉토리)의 그룹 소유권을 변경하는 명령어
-R 옵션을 사용하면 디렉토리와 그 안에 들어있는 모든 파일의 사용자를 변경한다

$ chown -R ubuntu:apache /var/www

root:root 였던 /var/www 의 소유권이 ubuntu:apache 로 변경되었다

 

(7) ubuntu 유저와 apache 그룹의 멤버가 Apache document root 에서 파일 추가, 삭제, 편집을 할 수 있게한다.

먼저, /var/www 와 그 하위 디렉토리의 권한을 변경한다.

$ chmod 2775 /var/www

find 는 찾을때 사용하는 명령어인데, 아래는 /var/www 디렉토리에서 'd' 타입인 파일에 chmod 2775 라는 지정된 명령을 실행하라(exec)는 뜻이다. 2775 처럼 4자리로 표현되는 경우 특수권한이 적용되어 그렇다. Set-GID 인 2를 사용한다

https://raisonde.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4-3%EA%B0%80%EC%A7%80-%ED%8A%B9%EC%88%98%EA%B6%8C%ED%95%9C

https://jhnyang.tistory.com/144

$ find /var/www -type d -exec chmod 2775 {} \;

그 다음으로, /var/www 및 그 하위 디렉토리의 파일 권한을 반복하여 변경한다

$ find /var/www -type f -exec chmod 0664 {} \;

 

5. MySQL 서버 설치 및 환경설정

(1) MySQL 을 설치한다 (MySQL 5.7.29 버전이 자동 설치된다)

$ apt-get install mysql-server

service mysql status 를 통해 현재 실행중인지 확인한다.

 

(2) mysql_secure_installation 실행을 통해 데이터베이스 서버 보안을 설정한다

$ mysql_secure_installation

참고 사이트 : https://webnautes.tistory.com/1185

 

(3) MySQL 에 접속하여 root 계정에 패스워드를 추가한다.

* sudo mysql (root 계정에서는 그냥 mysql) 명령어만으로도  MYSQL 에 접속할 수 있다

$ mysql -u root -p

처음에는 위의 명령어로 root 계정에 패스워드 없이 접속이 될 것이다.

ALTER USER 'root'@'localhost' IDENTIFIED BY '비밀번호'; 명령어로 root 계정에 패스워드를 추가한다

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '비밀번호'

 

(4) mysql 을 사용할 계정을 만들어 준다.

웹 서버와 연결해 DB 를 사용할 때는 root 계정을 사용하는 것보다 계정을 만들고 권한을 부여해 사용하는 것이 좋다.

아래는 olaf 라는 이름의 계정을 만드는 명령어이다. olaf 계정의 Host 는 localhost 이다.
mysql 의 user 테이블에 추가나 변경사항이 있을 경우 flush privileges 쿼리를 실행해줘야 한다.
(쿼리문은 대문자로 작성하는 것이 관례이다)

mysql> CREATE USER 'olaf'@'localhost' IDENTIFIED BY '비밀번호';
mysql> FLUSH PRIVILEGES;

 

SELECT User, Host FROM mysql.user; 명령어로 user 정보를 확인할 수 있다.

 

(5) olaf 계정이 사용할 Database 를 만들고, 해당 DB 를 olaf 계정이 사용할 수 있도록 권한을 부여한다.

먼저, nukeolaf 라는 Database 를 생성해주고,

mysql> CREATE DATABASE nukeolaf;

olaf@localhost 계정에게 nukeolaf DB 권한을 부여하고, flush privileges 쿼리를 실행해준다

mysql> GRANT ALL PRIVILEGES ON nukeolaf.* to olaf@localhost;
mysql> FLUSH PRIVILEGES;

olaf 계정에 nukeolaf DB 권한이 잘 부여되었는 지 확인 해보자
SHOW GRANTS FOR '계정이름'@'호스트' 로 해당 계정에서 어떤 권한을 가지고 있는 지 확인할 수 있다.

GRANT USAGE ON *.* TO 에서 *.* 는 아무 권한이 없다는 의미이다.
즉, olaf 계정은 nukeolaf DB 만 권한을 가지고 있고, mysql 의 admin 이나 system 에 접근할 수 있는 권한은 없다는것을 의미한다. 계정 뒤에 붙은 @localhost 는 해당 계정이 localhost 즉, mysql 이 설치된 pc 에서만 접속할 수 있다는 의미이다. 만약 다른 서버(remote)에서 mysql 에 접속하고 싶다면 접속하려는 서버의 IP 로 계정을 만들어주어야 한다.

예시) 192.168.0.10 에서 접속하고 싶은 경우 =>

mysql> CREATE USER 'root'@'192.168.0.10' IDENTIFIED BY '비밀번호';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.0.10' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;

특정 PC(192.168.0.10) 가 아닌 어디서든 접속하려는 경우 IP 대신 % 를 넣어주면 된다. => 'root'@'%'

 

6. PHP 웹 서버 설치 및 Apache 와 연동

(1) PHP 를 설치한다 (php 7.2.24 버전이 자동설치된다)

$ apt-get install php

 

(2) Aapche 와 PHP 가 연동되는지 테스트

vi 문서편집기로 Apache 의 문서 루트에 PHP 파일을 생성한다.

$ vi /var/www/html/index.php

index.php 의 내용은 아래와 같다

<?php phpinfo(); ?>

 

그 다음 http://공인IP주소/index.php URL 을 입력하여 PHP 정보 페이지가 표시되는지 확인한다.

 

참고 사이트>>>

https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/install-LAMP.html

https://ndb796.tistory.com/314

https://nonria.com/post/98/

 

 

Comments