Windows 10에서 Tensorflow-gpu 처음부터 끝까지 설치하기.

이번에 컴퓨터를 포멧하면서 텐서플로우를 처음부터 다시 설치해야 되는데, 까먹지 않게 처음부터 했던 방법을 기록하는 중.
  1. miniconda를 설치해주자.
    1. 기본 세팅으로 끝까지 설치하자.
    2. 윈도우 검색창에 Anaconda Prompt를 실행하자
    3. conda create -n ml python=3.6
      를 입력하고 엔터를 친뒤 쭉쭉 진행시키자.
    4. 다 됐으면 일단 여기까지
  2. GPU 설정
    일단 텐서플로우-gpu를 설치하기 전에 텐서플로우가 GPU를 쓸 수 있도록 이것저것 다 설치해야 한다. 지원 가능한 GPU이고 최신 드라이버가 설치되어있다고 가정한다.
    텐서플로우 공식 웹사이트를 가면 가이드를 준다. 링크를 확인해보자.
    링크에 따르면 Cuda Toolkit, CUPTI, cuDNN을 설치하란다.
    1. CUDA 설치하려면 비쥬얼 스튜디오 부터 설치해야됨 시발
      링크로 가서 2017 커뮤니티 버전을 다운받고 실행하자. 이것 저것 중에서. 
      아래만 설치하자. 이거 누르면 다른것도 자동 체크 됨.
      VC++ 2017 버전 15.6 v14.13 도구 집합
    2. CUDA 9.0 설치
      다만 텐서플로우 가이드로 설치를하면 Cuda 10.0을 설치하게 되는데 우리는 9.0이 필요하니까 링크를 눌러서 설치하자. Base Installer이면 되는것 같다. patch는 뭔지 잘 모르겠음.
      기본 세팅으로 끝까지 쭉쭉 진행하자. 뭐가 먼지 잘 모름.
    3. CUPTI
      설명 보니까 cuda설치할때 같이 설치 된다는거 같음
    4. cuDNN SDK
      링크. 참고로 이거 설치시 회원가입을 해야됨. cuDNN library가 CUDA 9.0버전이 맞는지 확인을 하고 설치를 하자.
      이 파일은 압축파일인데, 쿠다 설치 경로랑 동일한 곳에 복붙하면 된다. 참고

    5. 환경변수 설정
      SET PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin;%PATH% SET PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\extras\CUPTI\libx64;%PATH%
      입력하셈 cmd에
  3. Tensorflow-gpu 설치
    Anaconda Promt로 돌아와서 
    activate ml
    입력한다. 
    pip install –user –upgrade tensorflow-gpu
    도 입력한다.
  4. 설치확인
    anaconda promt에 python을 입력해서 파이썬을 실행시키자. 3.6인걸 확인



import tensorflow
from tensorflow.python.client import device_lib
device_lib.list_local_devices()

GPU가 결과에 보이면 GPU 설치가 제대로 완료된거임

  1. (옵셔널) Pytorch 설치
    (나중에 추가)

  다 하고나니까 용량 30기가 사라짐  

Baidu 로그인 없이 빨리 다운받기

2019-03-28. (수정)

중국에서 CV 쪽 논문이 많이 나온다. 그러다 보면 데이터 셋을 바이두 클라우드에 올리는걸 자주 보게 된다. 중국 대륙에서는 구글이나 드롭박스가 막혀있는지 바이두에 올리는 걸 보게 되는데, 뭐 다 좋은데 문제는 바이두 클라우드는 로그인을 해야지만 대용량 파일을 다운 받을 수 가 있다. 회원가입은 중국 핸드폰 번호가 필요하다.

안타깝게도 더이상 로그인 없이 바이두 클라우드 파일 다운로드는 불가능하다. 따라서 본문 하단 방법은 불가능 한데, 대신 중국번호 없이 한국 전화번호로 바이두를 회원가입하는 방법은 존재한다.

https://passport.baidu.com/v2/?reg&overseas=1

위 링크는 해외 거주자를 위한 회원가입 시스템인데, 직접 해보진 않았지만, 포럼 글을 통해 읽어보니 충분히 가능한 것 같다.

위 링크를 타고 들어갔을때 보이는 화면.

안타깝지만 이제는 회원가입을 해야 할 것 같습니다ㅠㅠ흑흑

————-(예전글) 더 이상 안됩니다.————–

중국에서 CV 쪽 논문이 많이 나온다. 그러다 보면 데이터 셋을 바이두 클라우드에 올리는걸 자주 보게 된다. 중국 대륙에서는 구글이나 드롭박스가 막혀있는지 바이두에 올리는 걸 보게 되는데, 뭐 다 좋은데 문제는 바이두 클라우드는 로그인을 해야지만 대용량 파일을 다운 받을 수 가 있다. 회원가입은 중국 핸드폰 번호가 필요하다.

아래 방법은 이를 해결하는 방법이다.

  1. 크롬 설치
  2. 크롬 앱중 baidu-bl 설치

여기 까지만 하면 일단 다운은 받아진다. 앱을 실행시고 바이두 클라우드를 들어가면 오른쪽 위 파란색 전구에 불이 들어온다.

이때 전구를 누르면 다운 받을 수 있는 주소가 Glink에 뜨며, 다운을 받을 수 있다. 그러나 이 경우 속도가 너무 느려 답이 없는데, 그걸 위해서 이 앱 제작자가 rpc 서버를 지원한다. 

3. aria2c 설치. aria2-1.34.0-win-64bit-build1.zip 면 될꺼다 아마.
압축을 풀면 exe 파일이 있는데 이건 커맨드 라인에서 실행시켜야 된다.

4. cmd를 들어가서 exe 파일이 있는 폴더까지 진입한다음에 

start aria2c.exe --enable-rpc --rpc-listen-all

를 쳐주면 창이 하나 더 뜨는데, 이게 rpc 서버가 로컬에서 돌아가고 있다는 소리다. 잘은 모르겠는데 aria2c는 다운로드를 빨리하게 도와주는 거라고 한다.

그러면 이제 오른쪽의 RPCDownload를 누르면 된다. 이 방법은 HLink가 있을때만 가능하고, HLink는 GLink보다 조금 더 늦게 뜬다. 이버튼을 누르면 새로 떴던 콘솔창에서 다운로드가 시작되었음을 알리고 다운로드를 해준다. 내 경우에는 2기가를 받는데 8시간이 걸리던게 8분으로 줄어들었다. 

Bitlocker

나는 OS에 거의 돈을 쓰지 않고 살았다.

예전 노트북은 포맷후 고등학교 컴퓨터에 설치되는 OS를 정보선생님한테 빌려서 썼었다. 엔터프라이즈 전용이여서 거의 프로와 동일하게 사용했었는데, Windows 10이 나오면서 문제가 생겼다. 마소에서 Windows 7을 전부 무료로 10으로 업글해주는 이벤트를 했었는데, 당연하게 엔터프라이즈는 대상이 아니였고 하는 수 없으 좀 오랫동안 windows7을 이용했었다. 그 와중에 Surface 3는 Windows 10을 가지고 있어서 얼마나 편한지 알고 있었기 때문에 때가 되면 바꿔야 된다고 생각했다.

우리 학교에서 Windows 10을 제공한다는 걸 알고 그걸로 사용하다가 1년 전쯤에 노트북을 새로 구매하면서 기본 설치된 OS를 사용하게 되었다. 몇년전부터 프로모션으로 대학생들에게는 Windows Edu 버전을 무료로 제공한다는걸 알게 되어서 프로와 거의 동일한 Windows Edu 버전을 이용하게 되었다.

Windows Pro는 일반 유저라면 살 필요가 전혀 없다. 추가 되는 기능은 정말 전문가들을 위한 기능이기고 일반 사람들은 사용할 방법도, 이유도 없다. 다만 Bitlocker이라는 기능은 일반유저들에게도 유용하다.

Bitlocker은 하드디스크에 있는 모든 데이터를 암호화해서 아무나 쉽게 빼가지 못하도록 한다. 예를 들어서 내 USB 저장소를 Bitlocker로 암호화한다면 내가 어디에 잃어버려도 줏은 사람은 이 안에 있는 파일 정보를 읽지못한다.

이런 이유에서 Bitlocker은 꽤나 유용하다고 생각하며 이동식 저장소 뿐만 아니라 컴퓨터 안의 하드드라이버에도 사용 가능하다. 가면 갈 수록 기술의 발달을 통해서 개인 정보와 파일들도 쉽게 유출이 되는데 이런 방법으로 간단하게 지킬수 있다면 좋지 않을까?

나도 이번에 처음으로 하드드라이버를 Bitlocker로 암호화했다. 나중에 시간이 된다면 컴퓨터 내부 하드도 암호화를 하고 싶다. 다만 이 외장하드가 산지 몇년이 지나서 새로 사야된다고 느끼기는 하는데 사실 여태까지 사용에 문제가 없어서 고민이 된다.

Pytorch

Pytorch를 해보는 중이에요.

Windows는 원래는 안되지만 어떤 사람이 되게 해줬어요. 아직까지는 기본만 보고 있지만 tensorflow보다 훨신 간편한 것 같아요.

강좌는 우리 학교 교수님의 강좌로 해보고 있어요

https://github.com/hunkim/PyTorchZeroToAll

나쁘지 않네요.

USTmap

USTmap을 예전에 안드로이드 어플로 만들었다. 이 어플의 주된 목적은 인터넷을 사용하지 않고도 캠퍼스 지도를 볼 수 있게 하기 위해서 만든 것이다.

그러나 문제점은 요즘 사람들은 앱을 전혀 다운받지 않는다는 것이다. [참고] 나 역시도 어플 다운로드를 별로 좋아하지 않는데, 그 이유는 아무래도 어플리케이션을 설치한다는 것이 약간의 부담감이 드는 행위이기 때문이다. 간단한 기능들은 요즘에는 충분히 웹앱으로 기능이 구현 가능하다. 그래서 똑같은 기능을 가진 웹앱을 개발해보기로 했다.

처음으로 자바스크립트를 제대로 사용해본 프로젝트였고 좀 야심차게 했지만 출시 2주가 약간 안 되어가는데 사용량을 보니 참 의미 없었던 것 같다. 아무래도 학교 지도라는게 초반에 몇번 강의실을 확인하는 데 사용한 다음부터는 필요가 없어지기 때문에 사용량이 극격하게 줄어든 것 같다.

처음에는 따로 지도 데이터베이스를 뽑아서 사용했었는데 매번 업데이트 해줘야 된다는 문제점이 보여서, 학교 공식 지도 사이트의 서버의 결과물을 맘대로 뽑아서 사용하고 있다. 다만 학교 공식 지도 사이트는 외부 사이트에서 뽑아서 쓸 수 없기 때문에 내 페이지에서 프록시 php파일을 만들어서 그걸로 받아서 쓰고 있다.
이제 학교 공식 지도가 업데이트 되면 내 지도도 따로 만질필요 없이 알아서 업데이트가 된다. 히히

사실은 github.io에 올리려고 했는데 학교 공식 서버 php 파일이 HTTP이고, github.io는 HTTPS이기 떄문에 mix-content 문제로 브라우저가 허용을 하지 않는다. github.io는 강제로 http로 만들수 없고 pathadvisor.ust.hk는 절대로 https로 바뀔 것 같지는 않으니 일단은 학교에서 제공하는 개인 사이트 호스팅에 올려두었다. 평생 도메인 돈내고 쓸 것도 아니고 하니까 때 되면 github.io로 옮기고 싶다.

웹앱 코드

우분투 16.04에 이메일 서버 설치하기.

 

sudo apt-get update

sudo DEBIAN_PRIORITY=low apt-get install postfix

설정은 Internet Site, jihoonjjang.com, jichoong (우분투 계정 이름), No, 기본값 —> 으로 두었다.

sudo postconf -e 'home_mailbox= Maildir/'

sudo postconf -e 'virtual_alias_maps= hash:/etc/postfix/virtual'

sudo nano /etc/postfix/virtual
@jihoonjjang.com jichoong
sudo postmap /etc/postfix/virtual

sudo systemctl restart postfix

sudo ufw allow Postfix

sudo  apt-get install dovecot-common dovecot-pop3d dovecot-imapd

sudo nano /etc/dovecot/conf.d/10-mail.conf

 

## the location of the mailbox is specified in 'mbox' format ##
mail_location = mbox:~/mail:INBOX=/var/mail/%u

## dovecot is granted necessary permission to read/write user mailboxes ##
mail_privileged_group = mail

이거 추가

 

sudo service dovecot restart
sudo postconf -e 'smtpd_tls_cert_file = /etc/letsencrypt/live/jihoonjjang.com/fullchain.pem'
sudo postconf -e 'smtpd_tls_key_file = /etc/letsencrypt/live/jihoonjjang.com/privkey.pem'
 
sudo nano /etc/postfix/master.cf
submission inet n       -       n       -       -       smtpd
  -o smtpd_tls_security_level=encrypt

이거 주석 풀기

sudo nano /etc/dovecot/conf.d/10-ssl.conf
ssl = yes

ssl_cert = </etc/letsencrypt/live/jihoonjjang.com/fullchain.pem

ssl_key = </etc/letsencrypt/live/jihoonjjang.com/privkey.pem
sudo ufw allow 995
sudo ufw allow 993
sudo ufw allow 25
sudo ufw allow 587
sudo nano /etc/dovecot/conf.d/10-master.conf
## The listener is added under the service auth section ##
service auth {
    unix_listener /var/spool/postfix/private/auth {
        mode = 0660
            user = postfix
            group = postfix
    } ##end listener
} ## end service auth

잘 보고 리스너 추가

sudo nano /etc/dovecot/conf.d/10-auth.conf
auth_mechanisms = plain login
sudo service dovecot restart
sudo nano /etc/postfix/main.cf
#### SASL ####
## specify SASL type ##
smtpd_sasl_type = dovecot

## path to the SASL socket relative to postfix spool directory i.e. /var/spool/postfix ##
smtpd_sasl_path = private/auth

## postfix appends the domain name for SASL logins that do not have the domain part ##
smtpd_sasl_local_domain = example.tst

## SASL default policy ##
smtpd_sasl_security_options = noanonymous

## for legacy application compatibility ##
broken_sasl_auth_clients = yes

## enable SMTP auth ##
smtpd_sasl_auth_enable = yes

## smtp checks ##
## these checks are based on first match, so sequence is important ##
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

#### SSL/TLS parameters ####

## 'encrypt' will enforce SSL. Not recommended for live servers ##
smtpd_tls_security_level = may 
#smtpd_tls_security_level = encrypt 

smtpd_tls_received_header = yes 
smtpd_tls_auth_only = no 

## loglevel 3 or 4 can be used during troubleshooting ##
smtpd_tls_loglevel = 1 

## path to certificate and key file ##
smtpd_use_tls=yes 

## server will announce STARTTLS ##
smtp_tls_note_starttls_offer = yes 

smtpd_tls_session_cache_timeout = 3600s

가장 마지막에 추가

sudo service postfix restart

 

 


참고한곳

https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-postfix-on-ubuntu-16-04#step-4-adjust-the-firewall

https://www.namecheap.com/support/knowledgebase/article.aspx/9795/69/installing-and-configuring-ssl-on-postfixdovecot-mail-server

http://xmodulo.com/mail-server-ubuntu-debian.html

http://xmodulo.com/enable-user-authentication-postfix-smtp-server-sasl.html

우분투 16.04에 워드프레스 설치하기

서버에 문제가 생겨서 완전히 초기화 시키고 처음부터 다시 까는 과정이다. 이 과정에서는 워드프레스 설치, SSH로 로그인, https 활성화, 이메일 서버 설치, fail2ban 설치를 할 것이다. 이메일과 fail2ban은 다음 포스트에 올라온다.

현재 서버는 linode에서 한달 10불 짜리를 사용하고 있으며 OS는 우분투 16.04를 사용하고 있다. 도메인은 구입하여 등록했다.

1. 초기 서버 설정

A. 새로운 유저 등록

다음 과정은 이 사이트를 참고하였다.

제일 먼저 서버에 연결한다. 서버 연결은 Putty를 통해서 하는 것이 편하다. 처음 로그인은 root로 하지만 root로 모든 것을 하는 건 위험하기 때문에 새로운 user을 등록 해준다.

adduser jichoong

콘솔에 위 라인을 입력하면 새로운 비밀번호를 입력하라고 하고,
개인 정보를 입력하라고 하는데 개인 입력 정보는 엔터로 넘어가도 괜찮다.

현재 root인 상태에서

usermod -aG sudo sammy

를 해주어서 권한을 준다.

B. SSH로 서버 접속

서버를 접속할 때 비밀번호로 접속하는 것은 불안전하다. 따라서 SSH를 통해서 접속하는 것이 훨신 안전하다. 따라서 public key와 private key를 만든뒤 private key는 내 컴퓨터에 따로 보관하여 나만 로그인 할 수 있도록 하는게 보안 상 좋다.

아래 과정은 이 사이트를 참고 하였다. 일단 이 사이트를 접속하여 Puttygen을 다운 받는다.

Puttygen을 실행시킨뒤
Type of key to generate은 RSA,
Number of bits in a generated key는 4096
을 입력한 뒤 Generate 버튼은 누른다. 그럼 프로그램은 엔트로피를 위해서 프로그램 빈 칸에서 마우스를 와따가따 하기를 부탁하는 데 그래주자.

Passphrase칸에는 원하는 비밀번호를 입력한다. 입력을 안하고 넘어갈 수 도 있지만 입력하는것이 훨신 안전하다.

Save public key, Save private key를 원하는 위치에 한다. 위 칸에 있는 public key를 전부 복사해두자. 이 문자열이 ssh-rsa로 시작하는 것을 확인하자. 그 후 콘솔에 아래 라인을 입력하자.

mkdir ~/.ssh
chmod 0700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 0644 ~/.ssh/authorized_keys
nano ~/.ssh/authorized_keys

이렇게 하면 authorized_keys라는 파일을 수정하는 메모장으로 들어오는 데 복사한것을 붙혀넣자. Putty에서는 붙혀넣기는 마우스 오른쪽 클릭이다. 붙혀넣은뒤 ctrl+x를 누르고 y키를 누르고 엔터키를 눌러서 저장하고 나간다. (nano 메모장은 위 방법으로 저장하고 나간다)

같은 방법을 새로 만든 계정에다가도 진행해주자.

su - jichoong
mkdir ~/.ssh
chmod 0700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 0644 ~/.ssh/authorized_keys
nano ~/.ssh/authorized_keys

한뒤 복붙하고 저장하고 나가주자.

이제 Putty 설정을 바꿔서 SSH로 접속이 되게 만들자.

PuTTY를 실행시킨 뒤 가장 처음 화면의 Host Name칸에 VPS의 IP주소나 도메인주소를 입력한다. Port칸에 VPS의 포트번호를 입력한다. (주로 22). Protocol에서 SSH를 선택한다. 프로그램 창 왼쪽 면에 Data 아래에 Connection탭을 들어가서 Auto-login username에 새로 만든 계정 이름(jichoong)을 입력한다.

Connection아래에 SSH 아래에 Auth탭을 들어간뒤 Browse버튼을 눌러서 위 PuTTYGen에서 저장한 private key 파일을 선택해준다. 초기 화면인 Session탭으로 돌아온뒤 Saved Sessions에 적당한 이름을 입력한 뒤(jichoong@my.domain.com) 이 설정을 저장한다.

이제 저장한 설정을 더블 클릭하면 바로 접속이 되며 passphase를 묻는 것을 확인할 수 있다.

아이디/비밀번호 접속 막기
sudo nano /etc/ssh/sshd_config

참고로 이제부터 모든 것은 새로만든 sudo 계정인 jichoong으로 진행을 한다. 위 파일을 nano로 연 뒤, 파일에서 다음 줄을 찾아 수정을 한다.

[...]
PasswordAuthentication no
[...]
UsePAM no
[...]

참고로 nano에서는 ctrl+w를 통해서 검색을 할 수 있으니 화살표 키를 일일히 눌러가며 찾아보지는 말자. yes를 no로 바꾸어주면 된다.

reboot

그리고 재시작하자.

 

2. LAMP 설치

LAMP란 리눅스, 아파치, MySQL, PHP를 의미한다. 이것이 전부 있어야 워드프레스를 설치할 수 있다. 아래 과정은 위 사이트를 참고하였다.

Apache 설치
sudo apt-get update
sudo apt-get install apache2

apache를 설치하자. 패키지를 설치할때는 확인을 물어보니까 y를 누르고 엔터를 해서 확인을 해주자.

sudo apache2ctl configtest

설치가 완료된 뒤 위 라인을 쳐보면 에러가 뜬다.

 

sudo nano /etc/apache2/apache2.conf

를 한 뒤 파일 가장 아래에

[...]

ServerName jihoonjjang.com

이 한 줄을 추가해 준다. 여기서 jihoonjjang.com은 자신의 도메인이다.

sudo nano /etc/apache2/apache2.conf

다시 위 라인을 돌려볼 경우 에러가 사라져 있다.

sudo systemctl restart apache2

아파치를 재시작 해 준다.

sudo ufw app list

방화벽에 apache관련 서비스 3개 전부 허용 되어있는지 확인한다. 자동으로 되어 있기때문에 따로 손볼 필요는 없다.

sudo ufw allow in "Apache Full"

를 해준다.

이제 아무 브라우저 주소창에 VPS의 IP를 입력할 경우 apache 초기 창이 보인다.

Mysql 설치
sudo apt-get install mysql-server

설치 도중에 MySQL의 root의 비밀번호를 입력하라고 묻는다. 적당히 좋은 비밀번호를 입력해준다. 설치가 완료 된 뒤에는

mysql_secure_installation

라인을 콘솔에 친다. 설정한 비번을 다시 입력한뒤, y, 1, n순서로 입력해주고 나머지는 y로 넘어가 준다.

php설치
sudo apt-get install php libapache2-mod-php php-mcrypt php-mysql

로 php를 설치해 준다. 그리고 나서

sudo nano /etc/apache2/mods-enabled/dir.conf

에 들어가 안에 내용을

<IfModule mod_dir.c>
	DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

로 수정해 준다.

https로 바꾸기

이 과정은 도메인이 등록 되었을 경우에만 가능하다. 어짜피 해야되는거 하고 오자. 아래 과정은 이 사이트를 참고 하였다.

sudo apt-get install software-properties-common python-software-properties

sudo add-apt-repository ppa:certbot/certbot

를 한뒤 엔터키를 누르고

sudo apt-get update

sudo apt-get install python-certbot-apache

sudo certbot --apache -d example.com

여기서 example.com은 내 도메인을 입력한다.

이러면 설정이 뜨는데 처음에 내 이메일을 입력하고, a,n,2순서로 완료한다. 이제 내 브라우저로 다시 내 사이트를 들어갈 경우 https가 잘 되는 것을 확인 할 수 있다.

certificate을 자동 갱신 하기 위해서

sudo crontab -e

를 치고 2번을 선택한 뒤, 파일 마지막 줄에

15 3 * * * /usr/bin/certbot renew --quiet

를 추가한다.

 

워드프레스 설치

이 사이트를 참고하였다.

mysql -u root -p

을 입력하여 MySQL에 접속한다.

CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;


GRANT ALL ON wordpress.* TO 'wordpressuser'@'localhost' IDENTIFIED BY 'password';

FLUSH PRIVILEGES;

EXIT;

이 라인을 각각 입력해주고 exit하는데 여기서 2번째 줄의 password는 새로운 비밀번호이다. 8자 이상, 대소문자 혼용, 특수문자 포함으로 새로 만들어 주자.

이제 다시 콘솔창에

sudo apt-get update

sudo apt-get install php-curl php-gd php-mbstring php-mcrypt php-xml php-xmlrpc

sudo systemctl restart apache2

sudo nano /etc/apache2/apache2.conf

를 통해서 몇개 더 설치하고, 재시작한뒤 설정파일을 열어 적당히 중간에

	<Directory /var/www/html/>
    		AllowOverride All
	</Directory>

이걸 추가한 뒤 저장하고 나가자.

 

sudo a2enmod rewrite

sudo apache2ctl configtest

sudo systemctl restart apache2

콘솔에 위라인을 각각 입력한다.

cd /tmp

curl -O https://wordpress.org/latest.tar.gz

tar xzvf latest.tar.gz

touch /tmp/wordpress/.htaccess

cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php

mkdir /tmp/wordpress/wp-content/upgrade

chmod 660 /tmp/wordpress/.htaccess

sudo cp -a /tmp/wordpress/. /var/www/html

sudo chown -R sammy:www-data /var/www/html

sudo find /var/www/html -type d -exec chmod g+s {} \;

sudo chmod g+w /var/www/html/wp-content

sudo chmod -R g+w /var/www/html/wp-content/themes

sudo chmod -R g+w /var/www/html/wp-content/plugins

위 라인을 각각 실행시켜주자.

curl -s https://api.wordpress.org/secret-key/1.1/salt/

이걸 누를경우 함수형태의 출력값이 뜨는데 이것을 복사해 두었다가

nano /var/www/html/wp-config.php

여기로 들어가서 그 출력값과 비슷하게 생긴 라인을 복사한걸로 대체해주자.

그리고

define('DB_NAME', 'wordpress');

/** MySQL database username */
define('DB_USER', 'wordpressuser');

/** MySQL database password */
define('DB_PASSWORD', 'password');

. . .
	
define('FS_METHOD', 'direct');

같은 파일에서 DB_NAME은 wordpress로
DB_USER은 wordpressuser로,
DB_PASSWORD는 내가 새로 설정한 password로 바꾸어 넣고

적당한 곳에 FS_METHOD를 direct로 정의해주자.(마지막줄을 적당한 곳에 넣으라는 뜻)

마지막으로

sudo chown -R www-data /var/www/html

를 입력하면 끝이난다. 이제 브라우저에 VPS의 ip주소나 도메인을 입력하면 워드프레스 초기 설치화면이 뜨고 한국어를 선택한 뒤 하라는 대로 하면 된다.

 

서버에 fail2ban 설치

사실 여태까지 귀찮아서 안하고 있었는 데 이제 해본다.

 

아래 두 링크를 따라서 했다.

https://www.linode.com/docs/security/using-fail2ban-for-security

https://scottlinux.com/2011/05/26/prevent-postfix-brute-force/ ( [postfix] 부분에 enabled 만 해줌)

 

나중에 시간 있을때 재대로 ban 되는지와 밴 되는 경우 이메일이 오는지, 이메일 서버도 ban 되는지 등을 확인해야겠다.

비밀번호 관리

나를 비롯한 수많은 사용자들은 두세가지의 비밀번호를 가지고 여러 웹사이트를 관리한다. 이는 순전히 편의성을 위해서이며 만약 어떤 웹사이트가 특수문자와 같이 좀 특별한 것을 요구할 경우 첫 글자를 대문자로 시작하거나 마지막에 느낌표를 붙히는 간단한 방법으로 넘어간다. 사실 이 방법은 비밀번호 보안에는 매우 해롭고 꼭 고쳐야 되는 습관이다.

비밀번호의 보안에는 두가지가 중요한데 첫번째는 복잡성이다 (엔트로피). 가장 단순하게 비밀번호를 푸는 방법으로는 무차별 대입 (Brute-Force) 방법이 있는데, 만약 비밀번호가 4자리 숫자라면 0000부터 9999까지 전부 대입하는 것을 의미한다. 웹사이트들은 주로 캡챠나 대기시간을 두어 무차별 대입법에 시간이 엄청나게 소요되게 만듦으로써 막는다. 이는 매우 효과적이지만 너무 이것을 믿으면 안된다. 몇년전 크게 이슈화 됐던 할리우드 아이클라우드 사진 유출 사건도 해커가 유명인의 이메일을 입수한 뒤 무차별 대입방법으로 비밀번호를 찾아내어 일어난 일이라고 알려져있다.

비밀번호를 복잡하게 만드는 방법은 두가지가 있는데 첫번째는 길이고 두번째는 문자의 종류이다. 다만 특수문자, 숫자등을 포함시켜서 문자의 종류를 늘린다면 사람으로서는 햇갈리기 때문에 단순한 단어들의 조합으로 간단하지만 길게 만드는 방법을 전문가들은 추천한다. 이 경우 쉽게 기억이 되기 때문에 여러 웹사이트에서 까먹지 않고 쓰일 수 있다.

Password Strength

비밀번호 보안의 두번째는 중복성이다. 비밀번호 중복의 문제점은 하나가 해킹되면 다른 하나 역시 뚫린다는 문제이다. 하지만 비밀번호가 중복은 원칙적으로는 문제가 없다. 사이트는 비밀번호를 그대로 저장하지 않고 salt와 hash라는 방법을 이용한다. Hash를 간단히 설명하자면 문자열로 부터 랜덤한 문자열를 얻어내는 방법이라고 생각하면 된다. 입력값이 같다면 결과는 언제나 동일하지만, 다른 입력값으로 같은 결과를 얻어내기는 불가능하며, 결과를 보고 입력값을 추측하는 것도 불가능하다. 회원이 웹사이트를 가입할 때 서버는 랜덤한 문자열(salt)를 만들어내고 salt와 비밀번호를 둘 다 hash함수에 집어 넣고 결과값을 구한다. 이 salt와 hash 결과값을 비밀번호 대신 서버에 저장한다. 나중에 회원이 로그인 할 경우 입력된 비밀번호와 salt를 hash 함수에 집어넣어 저장된 hash와 값이 다른지 같은지 비교를 통해 비밀번호가 맞은지 틀렸는 지를 확인한다.  hash함수는 입력값이 다르면 출력값이 다르기 때문에 (collision이 거의 불가능 하다) 맞는 비밀번호가 아니면 hash값이 같을 수 없다. 이런 방법으로 비밀번화 관리를 할 경우 서버에는 비밀번호 평문(plain text)은 저장되지 않기 때문에 나중에 데이터베이스 유출이 되더라도 비밀번호 유출의 문제는 없다. 즉  password123이 유출이 되는 것이 아니라  p!dfE3[dE와 같은 의미없는 hash값이 유출이 된다.

하지만 이 방법은 웹사이트 내부의 방법이기 때문에 개인 유저의 경우 웹사이트가 hash를 사용해 비밀번호를 저장하는지 평문 그대로를 저장하는지 아는 것은 불가능하고 설마 그대로 저장하겠어 라는 믿음 하나로 살아야 된다. 만약 평문으로 저장되고 이것이 유출 된다면 거의 모든 웹사이트들이 해킹당하는 위험이 있다. 비밀번호가 아무리 복잡하도 평문이 유출된다면 다른 웹사이트의 해킹은 식은 죽 먹기이다.

작년에 일어난 Cloudbleed 사건은 서버가 비밀번호를 hash를 통해 저장했음에도 불구하고 cloudflare의 문제 떄문에 평문이 유출되는 사건이 일어났다. 뿐만 아니라 만약 인터넷 통신이 암호화 되어있지 않다면(http) 비밀번호는 그대로 패킷에 담겨 보내지게 되고 이 역시 위험하다.

결국 비밀번호를 가장 안전하게 쓰는 방법은 적당히 길고 복잡한 비밀번호를 사이트들 마다 다르게 사용하는 것이다. 물론 사이트마다 비밀번호를 다르게 사용하는 것은 실질적으로 매우 힘들며 따라서 비밀번호 관리자를 사용하여 해결한다. 크롬을 쓸 때 비밀번호를 저장하는 것도 비밀번호 관리자로 볼 수 있다. 이 경우 비밀번호는 아무거나 막쳐도 기억은 관리자가 해주기 때문에 문제가 없다. 하지만 비밀번호 관리자의 가장 큰 문제는 관리자가 해킹당할 경우 모든 비밀번호가 유출이 될 수 있다는 것이고 실제로 1Password라는 비밀번호 관리자 사이트는 Cloudbleed 사건에 영향을 받았다.

어떤 사람들은 비밀번호 끝에 로그인 사이트 이름을 붙혀서 관리하라고 한다. 예를들어 구글에 로그인 할경우 pass123google, 페이스북에 로그인 할 경우 pass123facebook. 이 방법의 문제점은 비밀번호가 사이트마다 다르긴 해도 사람이 보기만 하면 바로 다른 웹사이트의 비밀번호를 알아낼 수 있다는 점이다.

해결 방법은 간단하다 pass123google을 hash 함수에 집어넣고 이를 비밀번호 평문으로 사용하면 된다. 이 결과물은 pass123facebook의 결과와 무척 다르기 때문에 해커가 비밀번호 평문을 얻어 내었다고 해도 이것 자체가 hash기 때문에 다른 비밀번호를 추측해내기는 불가능하다.

아래는 내가 만든 hash 비밀번호 생성기이다. 마스터 비밀번호와 웹사이트 url을 집어넣으면 두 문자열을 합친뒤 SHA3 512 함수에 집어넣어 얻은 결과를 약간의 refining을 통해 출력하고 이 비밀번호를 로그인시 사용하면 된다. hash 함수는 클라이언트에서 계산이 되기 때문에 어떤 정보도 밖으로 새지 않아 안전하다. 입력값이 같으면 결과는 언제나 동일하기 때문에 마스터 비밀번호를 까먹지 않는한 잊어버릴 수 없다.

https://jjhoon713.github.io/hashedpassword/