PHP

 

가상운영체제인 vmware 나   VirtualBox  를 설치한다.

 

1-1. vmware 다운로드 

 

https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html

 

VMware-workstation-full-11.1.2  버전을 설치 할경우  라이센스는 

https://my.vmware.com/web/vmware/details?productId=462&downloadGroup=WKST-1112-WIN

비밀댓글로 남기길 바랍니다.

 

(1) VMware Workstation Pro 12.1.1 

http://download3.vmware.com/software/wkst/file/VMware-workstation-full-12.1.1-3770994.exe

또는

http://download.hanbit.co.kr/ubuntu/16.04/VMware-workstation-full-12.1.1-3770994.exe

 

 

1-2. virtualBox

 가상 OS 구동 프로그램인 VirtualBox를 설치해보자

 

 

2. 우분트를 설치한다.  여기서는 이미 설치된 우분트를  iso 를 가지고 사용하겠다.

 

우분투 리눅스 설치 

▶ (링크) Ubuntu Desktop 16.04 LTS. ISO 파일(64bit)     --> 다운로드후 크기를 꼭!!!  확인. (1.38 GB)

▶ (링크) Ubuntu Server 16.04 LTS. ISO 파일(64bit)    --> 다운로드후 크기를 꼭!!!  확인. (655 MB)

▶ (링크) Ubuntu GNOME 16.04 LTS. ISO 파일(64bit)    --> 다운로드후 크기를 꼭!!!  확인. (1.17 GB)

 

 

여기서는 VMware-workstation-full-11.1.2 버전을 기준으로 설명 하겠다.

우분트는 

▶ (링크) Ubuntu Server 16.04 LTS. ISO 파일(64bit)    --> 다운로드후 크기를 꼭!!!  확인. (655 MB)

기준으로 하겠다.

 

 

 

 

 

desktop 아닌 서버 입니다.만 desktop 으로 설치해도 상관 없다.

 

 

 

리눅스 로그인 username 과 비밀번호를 설정 한다.

 

저장 위치를 임으로 설정한다.

 

 

 

usb 에 넣고 다니거나 다른 곳으로 이동하기 싶게 싱글선택

 

 

 

 

 

 

 

 

 

 

3. 기본으로 주어진 계정이 root 가 아닐 경우에만 0번을 따라하세요.


본문의 모든 명령어는 root 의 권한에서 실행해야합니다. 자신에게 주어진 계정이 root 계정이 아니라면 다음의 명령어로 root 로 전환해 주도록 합시다.

자신의 계정 보기

# whoami

sudo 명령어 실행. root 권한으로 root 로 로그인하는 명령어를 실행한다.

# sudo su

자신의 계정 보기

# whoami

 

기본 계정의 UserID 는 그림과 다를 수 있음. 위 예시에서 기본 아이디는 ubuntu 이다.

sudo 명령어를 사용할 수 있는 계정은 root 와 동급이니 비밀번호 관리에 신중해야한다. 기본 계정의 비밀번호를 매우긴 어려운 것으로 변경해주도록 하자.

# passwd ubuntu

 

 

 

 

4.   현재 서버에 설치된 패키지 최신버전으로 업그레이드

APT 목록 갱신

APT란 Advanced Packaging Tool 을 뜻합니다.
우리는 apt 라는 우분투에 내장된 프로그램을 이용해서 프로그램을 쉽게 설치/제거 할 수 있습니다.

 

패키지 목록 갱신.

#apt-get update

 

현재 운영체제에 설치되어있는 프로그램 최신버전패치

#apt-get upgrade

 

 

 

 

5. 시스템 시간 설정

 

# date 

를 입력하면 리눅스 시스템의 시간이 표시된다.

 

 

만약, 시간이 다르면 영국 시간이 표시되는것이다.

따라서 시스템 시간 설정

이것을 하지 않으면 영국 시간을 불러올 것이다.

물론 초기 설치할 때 Asia/Seoul 을 설정했다면 이 작업을 할 필요는 없다. 하지만 또 한다고 해서 문제되지는 않는다.

- 데비안 패키지 재설정 TimeZone Data 를 실행한다.

#dpkg-reconfigure tzdata

GUI 환경이 나올 텐데, 순서대로 Asia - Seoul 을 선택하면 된다.

 

g4

ubuntu_timezone_1604

 

 

 

6.  Hostname 설정

이 서버에 이름을 정하는 것이다. 이름을 잘 정해 두어야 나중에 다중 서버작업을 할 때 헷갈리지 않는다.

g6

위의 뜻은 “li599-115 서버에 root 사용자” 라는 뜻이다.

서버 이름은 FQDN(Fully Qualified Domain Name)을 쓰는 것이 좋다.

참고로 라엘이의 이 블로그 서버의 hostname은 macaroncis.go이다.

 

#vi /etc/hostname

빈 파일일 건데(또는 기존 hostname이 쓰여있을것임.) 원하는 이름으로 바꾼다.

권장하는 단어는 이 서버에 연결될 대표 도메인이다. 예를 들어  macaroncis.go 같은 것.

 

 

적용한다.

#hostname -F /etc/hostname

 

 

 

서버에 재 접속하면 적용된 것을 확인 할 수 있을 것이다.

g7

hostname 값은 서버작업자에게 서버이름을 알려주는 역할을 하며, 아무 의미없는 글자를 적어도 된다.

일부 sendmail 같은 프로그램에서 다른 서버와 통신시 사용하기도 한다.

 

- hostname 을 FQDN 으로 설정하는 것을 권장하지만, 외부와 연결이 없는 서버이거나 자신이 쓰고 싶은 이름이 있다면 (팀명이나, 회사명, 서비스명 등) 그것으로 해도 된다.

예를 들어 myserver1, new1111 같이 자신이 하고 싶은대로 정했다고 한다면, 서버의 /etc/hosts 에 해당 이름을 등록해두도록 하자.

127.0.0.1    myserver1

g8

 

#vi   /etc/hosts

 

 

추가) 메일 발송프로그램 설치하기

많은 프로그램에서 mail() 함수를 사용한다. 이 함수는 서버의 sendmail 프로그램에게 메일발송을 요청한다.

메일문의, 가입시 환영메일, 비밀번호 찾기 메일, 이메일인증 등 널리 사용된다. 서버가 메일 발송을 할 수 있게 sendmail 을 설치하자.

# apt-get install sendmail

이것은 오직 웹사이트에서 메일을 보내기 위한 것이다.

아이디@당신의도메인.com 같은 것을 하고 싶다면 절대로 직접 구축하려고 하지 말고 구글앱스, 도메인 구입처, 클라우드서버 업체의 메일호스팅, 서버호스팅업체의 메일호스팅 을 사용하도록 하자.

 

# vi /etc/mail/local-host-names

qv3

localhost 를 제외하고 나머지 항목은 지운다. 이곳에 쓰여진 도메인은 sendmail 발송시 목적 메일서버조회(mx record query)를 하지않고 로컬로 보낸다.

 

 

 

 

 

7.  Apache2 설치

#apt-get install apache2

16.04 LTS 에서는 apache 2.4.x 가 설치된다. (2018년 1월 6일 현재 최신버전은 Apache 2.4.18 이다.)

가끔씩 apt-get update 및 apt-get upgrade 를 실행하면 아무런 문제없이 최신버전으로 업데이트 될 것이다.
설치가 완료되면 자동적용 및 시작된다.

버전체크

apache2 -v

 


확인해본다.

 

#ifconfig 로 확인해 본다.


http://192.168.78.130/(서버의아이피)

 

 

 


웹브라우져에 기본 설명페이지가 뜨면 성공.
(참고로 기본으로 보여지는 파일은 /var/www/html/index.html 이다.)

 


테스트용 php 파일을 만든다.

 

# touch /var/www/html/index.php

 

index.php 파일에  php 가 제대로 설치되었는지 다음 내용을 입력해 둔다.

vi /var/www/html/index.php

<?php phpinfo(); ?>

 

 

기타 주로 사용되는 모듈을 활성화, 필요없는 모듈은 비활성화 한다.
아래 모듈에 대한 자세한 설명은… 생략한다.
사용에 문제가 발생하지 않는 최상의 방식이라고 이해하면 된다.

#a2enmod rewrite
#a2enmod headers
#a2enmod ssl
#a2dismod -f autoindex


#추가 보안패치. (.git, .svn, .env 등 dot로 시작하는 파일 및 폴더 보호, Web Access가 되어서는 안될 파일들의 접근 제어)

# vi /etc/apache2/apache2.conf

파일 중간의  구문 다음에 추가한다.

 

추가하기 전에  먼저 SSH 설치하고  putty 나 xshell 을 설치해 서 접속해 보자.

 

-------------      SSH 설치   시작 -------------   

 Ubuntu에 SSH 서버를 설치하고, PuTTY를 이용하여 터미널 접속하는 방법을 간단하게 설명하겠습니다.

 

 

Ubuntu에 SSH 설치

Ubuntu에 ssh 설치는 간단하게 아래 한줄이면 ssh 설치가 가능합니다.

#sudo apt-get install ssh

 

 설치가 완료된 ssh는 별도로 설정하지 않아도 기본 22번 포트로 설정되어 있어 추가로 수정해야 할 부분은 별로 없습니다. 만약 ssh의 config 파일을 수정할려면 아래 명령어를 통해서 수정하시면 되며, 필요에 따라 #을 지우셔서 옵션 활성화를 진행하면 됩니다. vi 또는 gedit를 사용하여 수정하시면 됩니다.

#sudo vi /etc/ssh/sshd_config

#sudo gedit /etc/ssh/sshd_config

 

sshd_config의 설정을 수정하셨다면 아래 명령어를 통하여 프로그램을 다시 시작시켜줄 수 있습니다.

#sudo /etc/init.d/ssh restart

 

다음 이미지는  Xshell 로 putty 보다 성능이 좋다.

 

 

PuTTY 다운로드

 터미널 접속시에 주로 PuTTY라는 프로그램을 이용합니다. 프로그램과 소스코드는 MIT 라이센스와 BSD 라이센스를 기준으로 배포되는 프리웨어 프로그램으로 별도의 설치도 필요치 않는 간단한 프로그램입니다. 아래 PuTTY 홈페이지에서 다운로드 받아 실행할 수 있습니다.

PuTTY 다운로드 : http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

 홈페이지 접속한 후 x86의 PuTTY을 다운로드 받아 사용하시면 됩니다.

 

 다운받은 PuTTY 를 실행하면 아래와 같이 첫 화면에 바로 IP 주소 또는 URL 주소를 입력하시면 됩니다. 현재 PC의 IP 주소 확인은 아래 명령을 통해서 확인이 가능합니다.

#ifconfig

위 내용에 적었다.

 

# sudo su

 

ifconfig를 이용하여 현재 로컬의 IP 주소를 확인 하고 아래 터미널에 IP 주소를 입력하면 됩니다. IP 주소를 입력하고 자주 사용하는 목록에 추가하려면 아래 Saved Sessions 부분에 저장할 이름을 적고, 오른쪽 메뉴의 save를 누르시면 됩니다. 이후에는 하단의 목록을 더블클릭하면 쉽게 접근이 가능합니다.

 

 

 PuTTY를 사용할 경우 한글은 텍스트 오류가 나게 됩니다. UTF-8 로 변경하고 접속해야 한글 깨짐 현상이 없으니 메뉴의 "Translation"을 눌러서 "Remote character set:"을 UTF-8로 변경하시면 됩니다.

 

 아래와 같이 최종 Putty를 실행한 상태입니다. 접속시에는 아이디와 비밀번호를 입력하시면 접속이 되며, 우분투 내 터미널을 사용하는 환경과 동일합니다. 외부에서 접속할려면 22번 포트에 대한 방화벽(공유기)에서 열어두어야 하며, 이 경우 외부 IP 주소를 확인하거나, URL을 사용할 수 있습니다.

 

 

-------------      SSH 설치    끝  -------------   

 

 


#추가 보안패치. (.git, .svn, .env 등 dot로 시작하는 파일 및 폴더 보호, Web Access가 되어서는 안될 파일들의 접근 제어)

# vi /etc/apache2/apache2.conf

파일 중간의  구문 다음에 추가한다.

 

/etc/apache2/apache2.conf 설정파일 중간에 추가

 

# deny file, folder start with dot
<DirectoryMatch "^\.|\/\.">
    Require all denied
</DirectoryMatch>
  
# deny (log file, binary, certificate, shell script, sql dump file) access.
<FilesMatch "\.(?i:log|binary|pem|enc|crt|conf|cnf|sql|sh|key)$">
    Require all denied
</FilesMatch>
  
# deny access.
<FilesMatch "(?i:composer\.json|contributing\.md|license\.txt|readme\.rst|readme\.md|readme\.txt|copyright|artisan|gulpfile\.js|package\.json|phpunit\.xml)$">
    Require all denied
</FilesMatch>
 
# Allow Lets Encrypt Domain Validation Program
<DirectoryMatch "\.well-known/acme-challenge/">
    Require all granted
</DirectoryMatch>

 

XShell 을 이용하자.  vmware 사용하면 vi 사용시 마우스 우클릭이 안된다.

 

 

 

# deny file, folder start with dot
<DirectoryMatch "^\.|\/\.">
    Require all denied
</DirectoryMatch>
  
# deny (log file, binary, certificate, shell script, sql dump file) access.
<FilesMatch "\.(?i:log|binary|pem|enc|crt|conf|cnf|sql|sh|key)$">
    Require all denied
</FilesMatch>
  
# deny access.
<FilesMatch "(?i:composer\.json|contributing\.md|license\.txt|readme\.rst|readme\.md|readme\.txt|copyright|artisan|gulpfile\.js|package\.json|phpunit\.xml)$">
    Require all denied
</FilesMatch>
 
# Allow Lets Encrypt Domain Validation Program
<DirectoryMatch "\.well-known/acme-challenge/">
    Require all granted
</DirectoryMatch>

 

 

 

 

 

 

 

8. PHP 7.0 설치

PHP 5 를 설치하고 싶으시면 Ubuntu 14.04 LTS 를 설치하세요.

--

#apt-get install php

ubuntu_1604_php7

16.04 에서는 PHP 7.0.x 가 설치된다.

 

PHP-아파치 연동모듈 설치

#apt-get install libapache2-mod-php7.0

 

기타 주로 사용되는 모듈을 설치한다.
- 암호화 모듈

#apt-get install php-mcrypt

 

- 다국어 처리모듈

#apt-get install php-mbstring

 

- 이미지처리 모듈

#apt-get install php-gd

 

- 원격지 정보 불러는 모듈 (워드프레스, 드루팔 등에서 쓰임)

#apt-get install php-curl php-xml

 

-추가로 설치하고 싶은 모듈이 있으면

#apt-cache search php-

라고 입력해서 설치가능한 패키지를 검색후 install 하도록 하자.
ubuntu_1604_aptcache

 

- 아파치 재시작(적용을 위해서)

#service apache2 restart
버전체크
#php -v

PHP 7.0.22-0ubuntu0.16.04.1 (cli) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.0.22-0ubuntu0.16.04.1, Copyright (c) 1999-2017, by Zend Technologies

PHP 7.0.22 버전이다. (당신이 설치한 버전은 이것보다 높을 것이다.)

 

 

php 가 제대로 설치 되었는지 url 상으로 확인 해보자.

index.php 내용은 7번에서 미리 작성해 두었다.

http://192.168.78.130/index.php

 

 

에러시

#sudo apt-get purge php.*

명령으로 php 제거 후 다시 php 설치 과정을 진행해 보자.

 

 

 

 

 

9.  MariaDB 설치

mysql 과 mariadb 는 완전 API 호환된다.

 

#apt-get install mariadb-server

MariaDB 10.0.24 이 설치된다.

 

MariaDB 초기화.

14.04 LTS까지는 자동으로 처리되던 작업인데.. 분리되었다.

아무튼 데이터베이스 초기화 작업을 하도록 하자.

다음의 명령어 실행하자.

/usr/bin/mysql_secure_installation

모르면 엔터 누르면 된다. (비밀번호만 설정하고 나머지는 엔터)

잘못한 것 같으면 위 명령어를 다시 실행하면 된다.

 

:: root 의 인증 플러그인 정보 제거하기

MySQL에 플러그인이라는 개념이 생겼다. 그 중 하나가 서버사이드 인증이다.

예를들어 Linux의 myuser1 사용자와 MySQL(MariaDB)의 myuser1 과 연결이 되는 경우이다. (비밀번호 필요없이 쉘인증)

root 사용자가 기본값으로 unix_socket Auth Plugin 이 설정되어 있는데… 이건 실 사용에 많은 불편함을 준다.  기존과 같이 비밀번호 인증 방식으로 바꾸도록 하자.

Linux root 사용자로 로그인한 상태에서

# mysql

(현재는 unix_socket 인증방식이라서 Linux root 사용자는 MySQL(MariaDB) root 계정에 비밀번호 없이 로그인 할 수 있다)

mysql_1604

use mysql;
update user set plugin='' where User='root';
flush privileges;
exit;

 

-----------

 

#apt-get install php-mysql

DB 연동모듈 설치. 완전 호환되기 때문에 mysql 이라고 해도 mariadb 사용가능.

 

MYSQL 콘솔 클라이언트 버전체크

#mysql -V
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 43
Server version: 10.0.31-MariaDB-0ubuntu0.16.04.2 Ubuntu 16.04

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others

 

 

에러시 

다음 명령으로 삭제후 다시 설치해 보자.

[Mysql]

sudo apt-get purge mysql-server

sudo apt-get purge mysql-common

[MariaDB]

sudo apt-get purge mariadb-server

sudo apt-get purge mariadb-common

[공용작업]

sudo rm -rf /var/log/mysql

sudo rm -rf /var/log/mysql.*

sudo rm -rf /var/lib/mysql

sudo rm -rf /etc/mysql

 

 

 

 

 

10 .  기본 언어셋 설정(중요)

이 단계를 건너뛰면 DB가 latin1 으로 생성되며 추후 DB작업에 문제가 생길 수 있다.

#vi /etc/mysql/mariadb.conf.d/50-server.cnf

 

(vi 에디터 사용방법을 잘 모른다면 ftp 클라이언트를 사용하여 서버에 로그인 후 해당파일을 수정하고 덮어쓰기한다.)

 

[mysqld] 항목에 다음 2 줄을 추가한다.

2015년도 부터는 아래와 같이 utf8mb4 속성을 사용하세요.

이 속성은 utf8확장입니다. 기존의 모든 utf8과 상위 호환됩니다. (utf8 에서 utf8mb4 로의 변환은 손실이 일어나지 않습니다.)

 

utf8mb4 속성은 스마트폰 이모티콘 문자(emoji)를 저장할 수 있습니다.

자세한 설명은 이곳에(https://blog.lael.be/post/917) 있습니다.

/etc/mysql/mariadb.conf.d/50-server.cnf 에 추가

1   character-set-server = utf8mb4

2   collation-server = utf8mb4_unicode_ci

 

 

q14

 

변경사항 적용

#service mysql restart

 

 

 

 

 

 11 . FTP  &  TFTP 서버 설치  & SFTP  설치 

파일질라 SFTP 접속  및  APtana SFTP 접속 

 

웹서버에서 운영중인 홈페이지를 여러명이서 원격으로 관리해야하므로

FTP설치가 불가피하다.

FTP설치 후 파일질라를 설치하여 관리해보도록 하자.

 

FTP설치

 

설정 하기

설정도 쉽습니다.
쓰기 권한을 주기 위해서 /etc/vsftpd.conf 파일에서 아래 부분을 찾아
# 코멘트만 제거해 주면, 기본적으로 사용할 수 있는 환경이 됩니다.

write_enable=YES
local_umask=022

서버가 클라이언트쪽에 비정상적인 접속시도를 하는 것을 막기 위한 passive 모드 사용을 위해선
아래 내용도 /etc/vsftpd.conf 파일 끝에 추가해 줍니다.

allow_writeable_chroot=YES
pasv_enable=Yes
pasv_min_port=40000
pasv_max_port=40100

서비스 컨트롤 방법

 

vsftp 서버의 시작/중지/재시작은 우분투의 service명령을 사용합니다.
아파치 서버 컨트롤과 같은 방식입니다.

  • $ sudo service vsftpd start ## vsftpd 데몬을 시작합니다.
  • $ sudo service vsftpd stop ## vsftpd 데몬을 멈춥니다.
  • $ sudo service vsftpd restart ## vsftpd 데몬을 재시작합니다

 

보안문제가 걱정되신다면  외부 네트워크에 접속하는 경우에는 sftp(secure ftp) 사용을 권장

 

만약,  FTP 가 안될 경우 링크를 통해

다시 설정해 보자.

http://macaronics.net/index.php/m02/linux/view/262

 

 

*. root 계접 접속을 허용하려면?

  $sudo vi /etc/ftpusers

  root 계정에 앞에 주석처리 해준다 (또는 삭제)

 


 

 

TFTP 서버 설치

$ apt-get install tftpd-hpa

설치가 끝났으니 서비스 상태를 확인해 보자

$ service tftpd-hpa status

active (running) <- 정상 작동 하고있단다.

Ctrl C를 하여 빠져나온고

 

netstat -a | grep tftp

IP4 가 안보인다.

이제 TFTP 서버 환경설정파일을 변경하자.

$ sudo vim /etc/default/tftpd-hpa

 

TFPT_DIRECTORY 는 TFTP가 사용할 디렉토리를 설정한다.

홈페이지를 운영하는 폴더로 지정해 줬다.

 

TFTP_OPTIONS

--secure 뒤에 --create를 추가로 입력하라고하는데

왜해야하는지는 찾지않았다.. 그냥 하란대로 해보자

저장하고 종료.

그리고 TFTP 재시작

$ service tftpd-hpa restart

 

 

SFTP 설치

$ apt install ssh

이 명령어 하나면 우분투는 openssh와 sftp를 같이 설치한다.

 

$ netstat -na

현재 열려있는 포트를 확인해 보니

위에서부터 FTP,SFTP, TFTP 가 정상적으로 작동중임을 알 수 있다.

 

 

FTP 무료프로그램인  Filezilla 는 client 버전은 리눅스에서 사용이 가능하다.

 

$ sudo apt-get install filezilla

이 명령어 한줄로 설치가 가능하다.

 

 

 

압타다 에러시

압타나 에서 SFTP 연결이 안될 경우

다음 메시지가 나타날 경우

--> establishing sftp connection failed: no suitable key exchange algorithm could be agreed.

 

해결방법

1. sshd_config를 찾아서 파일을 열어본다.

vi /etc/ssh/sshd_config

 

2. 다음을 적절한곳에 추가한다.

Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,blowfish-cbc,aes128-cbc,3des-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc

KexAlgorithms=curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1

 

3. ssh를 restart한다.

# /etc/init.d/ssh restart

 

 

 

 

Vi  사용해서  에디터 텍스트 편집이 어려울 경우

ssh 설치, ftp  sftp 설치 등을 하였기 때문에  

phpstom ,  editpus, eclipe , atom, aptana 등 툴과 putty, xshell 등으로 이용해서 리눅스를 제어하자. 

어쩌면 초반에 우부트만 설치후 에 ssh, ftp,sftp 등을 설치부터 하고 putty , 와 툴로 접속해서 리눅스를 제어하는 것이 좋은 것 같기도

하다.

특히,  텍스트를 편집 할때 vi 를 사용하는 데 익숙하지 않으면  텍스트를 편집하가 너무 어렵다.  vi만 전문적으로 공부하는 분들도

많이 계시지만 나처럼 vi 에 숙달되지 않은 초보자에게는  vi 사용이 어려운 존재이다.  

그렇다고 나는 vi를 사용하지 말자라고 주장하는 것이 아니라

 vi 를 주로 사용하면서 정말 다루기 힘든 편집일 경우 phpstom ,  editpus, eclipe , atom, aptana 등 의 툴로 리눅스에 접속한다음  편집을

하자는 의미이다.

 

중요한것이 툴을 이용해서 파일을 변경 하고 싶으면   권한을 부여 하자. 

 

shell 명령어로 sudo 를 통해 root 계정의 권한으로 리눅스를 제어를 하기 때문에 일반 계정으로 툴을 통해 리눅스를 접속한다면

/home/macaroncs  디렉토리의 자신의 계정 폴더만 제어가 가능기 때문이다.   따라서 권한을 주지 않으면 툴로 편집이 불가능하다.

 

예를 들어  -R 옵션을 주고

다음 아래와 같이 소유권을 부여할 경우   

 

sudo.  전체 파일 시스템의 허가 구조가 파괴될 수 있다. 따라서 리눅스를 다시 설치해야 할 사항이 올 수 있다.

chown -R macaronics  /var

이렇게 하면 var 하위 디렉토리까지 전부 macaronics 계정의 소유권한으로 변경 된다.

 

chown  -R macaronics  /

그러나 루트 전부 변경보다는 etc 와 var 만 사용하므로 

chown -R macaronics   /etc/

chown -R macaronics   /var/

만 변경하자.

슬러시 하나만 하면  루트 디렉토리 이하 전부 macaroncis 권한이 부여하여 툴에서 자유롭게 쓰고 변경이 가능하다.

모든 편집이 끝났으면 다시

chown -R root   /etc/

chown -R root   /var/

root 변경하면 된다.  이렇게 하면 간단하지만  이렇게 하면

sudo.  전체 파일 시스템의 허가 구조가 파괴될 수 있다. 따라서 리눅스를 다시 설치해야 할 사항이 올 수 있다.

따라서, 다음과 같이 root 권한 SFTP 접속 권한을 설정하자.

 

#vi /etc/ssh/sshd_config 

PermitRootLogin yes         // root 접속 허용 
PermitRootLogin no       // root 접속 차단


# service sshd restart 

 

그러나 로그인이 안될 것이다.  

root  계정에 비밀번호를 다시 설정 하자.

sudo passwd root

정상적으로 되었다면

SFTP 에서 root 로 접속이 가능하게 된다.

 

 

압타나, xshell 로  vmware 의 리눅스를 제어하는 이미지 모습이다.

웹호스팅, 클라우드에 서버가 존재한다면, 툴과, putty, xshell 등의 SSH 접속 프로그램으로 서버를 제어하면 될 것 같다.

 

 

 

 

 

 

 

12 - 1  PHP 권한 설정

 

웹 서비스 구동시 발생할 수 있는 Nobody 퍼미션 관련 문제를 해결하기 위해 관련 프로그램을 설치한다.
이 세팅을 하면 shell의 권한과 sftp의 권한과 web의 권한이 동일하게 취급되며 보안도 좋게된다.
순서대로 쓰면 된다.

# apt-cache search mpm-itk

libapache2-mpm-itk - multiuser module for Apache

mpm_1604

 

#apt-get install libapache2-mpm-itk
#chmod 711 /home
#chmod -R 700 /home/*

(/home/* 안에 아무파일도 없을 경우 마지막 구문은 에러가 날 수 있다. 에러가 나면 무시하도록 하자.)

 

 

 

 

12 - 2  PHP 실행확장자 변경

 

php 를 해석하는 확장자가 꽤 많이 있다.

#vi /etc/apache2/mods-available/php7.0.conf

xenial_0630

.php .php3 .php4 .php5 .php7 .pht .phtml  확장자 파일이 기본적으로 php를 해석할 수 있게 되어있다.

웹페이지에서 파일업로드 구현시 이 확장자 파일을 제대로 막아주지 못하면 사이트가 위험하게 된다.

 

.php 를 제외한 나머지의 접근을 차단하자.

 

<FilesMatch ".+\.ph(p3|p4|p5|p7|t|tml)$">
    Require all denied
</FilesMatch>

 

 

 

php-security-1604

 

--------------------------------------------

적용을 위해서 아파치 재시작

#service apache2 restart

 

에러시

vi  에디터 로 잘못 편집으로 인한 에러등 기타

만약 

#service apache2 restart 를 입력했는데  여기서 APACHE 오류 가 나면 다음과 같이 실행해 보자

저 아파치를 제거한다.

 

 apt-get -o DPkg::Options::="--force-confmiss" --reinstall install apache2

apt-get -o DPkg::Options::="--force-confmiss" --reinstall install apache2

 

완전히 제거해 준다.

apt-get purge apache2

 

 

완전히 제거 했으면 위      7.  Apache2 설치 내용으로  가서 다시설치를 시작 하고   12 - 2 PHP 실행확장자 변경

을 다시 시작하면 된다.

 

 

 

 

 

12-3 .  PHP Default timezone 설정하기

 

이 값을 설정하지 않으면 시스템 timezone 을 사용합니다.

PHP Default timezone 을 설정하는 것은 필수는 아니지만 매우 권장하는 작업입니다. 설정해주세요.

동일한 작업을 2개의 파일에 적용해 주어야 합니다.
이건 Apache2 - PHP 일때 참조하는 설정파일입니다.

#vi /etc/php/7.0/apache2/php.ini

이건 Cron이나 Console에서 PHP를 직접실행할때 참조하는 설정파일입니다.

#vi /etc/php/7.0/cli/php.ini

 

date.timezone 값을 찾아서 주석을 제거하고 시간을 설정해주세요.

q17

이 값을 찾아서

 

q18

이렇게 변경.

 

#service apache2 restart

 

vi 명령어

1. 먼저 vi 를 실행하고 : 를 눌러 명령어 모드에 들어갑니다.

2. / date.timezone 으로 문자열 탐색

현재 커서 위치에서 아래방향으로 탐색

/찾을문자열

예) :/text

현재 커서 위치에서 윗방향으로 탐색(역방향 탐색)

?찾을문자열

예) :?text

3. 그 다음 문자열를 탐색(계속 탐색)을 하려면 소문자 "n" 을 누르면 되고 

   이전 문자열를 탐색(계속 탐색 - 역방향)을 하려면 대문자 "N"을 누르면 됩니다.

 

4. 정규식도 사용할 수 있다!

예) Text 로 시작하는 문자열을 찾을때

/^Text

 

 

vi 사용이 힘들면 압타나로 간편하게  고칠수 있다.

 

 

 

http://192.168.78.130/index.php   주소를 통해 확인해보자. 

 192.168.78.130 주소는 현재 자신의 컴퓨터주소로 ifconfig 를 치면

나온다.

 파일을 만들고 웹브라우져에서 실행시킨 뒤 위와 같이 설정되어 있으면 정상이다.

/index.php 에는 다음 의 내용이 적혀 있다. 

 

Default timezone 이 설정되어 있으면 정상.

 

 

 

13 .  계정생성 및 동작테스트

현재 아파치 는 var/www/html  폴더를 인식해서  http://192.168.78.131/ 을 보여 주고 있다.

이것을  hom/macaronics/www  폴더로 변경하고자 하는 것이다.   왜냐 하면은 리눅스에서 계정이 만들어지면 home 디렉토리 에

생성된 계정명의 폴더가 자동생성되기 때문에 관리가 편하기 때문이다.

 

var/www/html

 

hom/macaronics/www

 

 

 

 

 

 

1. # vi /etc/apache2/apache2.conf

<Directory /var/www/>
	Options Indexes FollowSymLinks
	AllowOverride None
	Require all granted
</Directory>

 

다음과 같이 변경한다.

<Directory /home/macaronics/www/>
	Options Indexes FollowSymLinks
	AllowOverride None
	Require all granted
</Directory>

 

 

2.   # vi  /etc/apache2/sites-available/000-default.conf

다음과 같이 DocumentRoot 에 주석을 한 다음 변경한다.

    ServerAdmin webmaster@localhost
    #DocumentRoot /var/www/html
    DocumentRoot /home/macaronics/www

 

 

 

3.   home 디렉토리의 자신의 계정에  여기서는 macaronics 에  www  폴더를 생성한다.

# mkdir /hom/macaronics/www
 

 

4.   www 폴더에 index.php 파일을 만들어서 

# vi  /home/macaronics/www/index.php

<h1><?php echo "macaronics/www 로 변경 "; ?></h1>
<?php  phpinfo(); ?>

와 같이 임의 php  코드를 입력해보자.

 

5.  /home/macaronics   폴더에 권한을 부여 하자.

#chmod 775 /home/macaronics/

 

6. 아파치를 재시작 한다.

 service apache2 restart

 

 

 

 

 

 

 

 

14. 웹사이트 Apache 환경설정파일 작성

 

1) 클라우드 호스팅 과 같은  가상호스팅일 경우 다음과 같은 방법으로 진행한다.

 

국내 클라우드 서버호스팅 비교(Virtual Private Server Review)

 

#16.12.20 설정 가이드가 추가됨

환경설정을 쉽게하도록 도와주는, 환경설정 생성기가 추가되었습니다.

https://blog.lael.be/demo-generator/apache/my-example-site.com.php

다음의 내용을 작성한다.
아래 예제에서는 사이트 환경설정파일명을 lael.be 로 가정하고 진행한다.
당신의 도메인, 사용자 아이디, 별도의 구분단어로 설정해서 사용하도록 하자.

#vi /etc/apache2/sites-available/lael.be.conf

 

 

HTTPS 사이트

HTTPS 관련 구문을 설정합니다.

인증서 파일과, 인증서 키파일, 인증서 체인파일을 미리 가지고 있어야합니다.

/etc/apache2/sites-available/macaronics.go.conf

<VirtualHost *:80>
 
    ServerName macaronics.go
    ServerAlias www.macaronics.go
     
    <IfModule mod_rewrite.c>
    RewriteEngine on
 
    RewriteRule ^ - [E=protossl]
    RewriteCond %{HTTPS} on
    RewriteRule ^ - [E=protossl:s]
 
    RewriteCond %{HTTPS} !=on
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
 
    </IfModule>
 
</VirtualHost>
 
 
<VirtualHost *:443>
 
    ServerName macaronics.go
    ServerAlias www.macaronics.go
     
    DocumentRoot /home/macaronics/www
 
    <Directory /home/macaronics/www>
        Options FollowSymLinks MultiViews
        AllowOverride All
        require all granted
    </Directory>
 
    AssignUserID macaronics macaronics
 
    ErrorLog ${APACHE_LOG_DIR}/macaronics.go-error.log
    CustomLog ${APACHE_LOG_DIR}/macaronics.go-access.log combined
 
    Header always set Strict-Transport-Security "max-age=31536000"
 
    SSLEngine on
 
    SSLProtocol all -SSLv2 -SSLv3
 
    SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
 
    SSLHonorCipherOrder on
 
    SSLCertificateFile "/home/macaronics/ssl/mysite_ssl.crt"
    SSLCertificateKeyFile "/home/macaronics/ssl/mysite_ssl.key"
    SSLCertificateChainFile "/home/macaronics/ssl/mysit
								

 

about author

PHRASE

Level 60  라이트

A rolling stone gathers no moss. (우물을 파도 한 우물을 파라!)

댓글 ( 6)

댓글 남기기

작성