AWS에서 RDS를 사용하던 서버에 MySQL-Server로 옮기려고 설정하던 중이었다.

우선 MYSQL 설치를 했다. 이건 뭐 리눅스 계열 좀 해본 사람은 대충 알거라 생각한다. 설치는 다른 글 있다.

2021/02/01 - [IT/우분투서버] - [ubuntu server 20.04 LTS] MySQL 설치

근데 보안을 생각해서 우선 루트계정을 원격접속이 안되게 설정해놨다.

여기부터 계속 PC에서 서버 DB로 접속이 안된다.

문제점을 하나씩 살펴봤다. 정리해본 결과 몇가지가 된다. 나의 경우를 정리했다.

우선 편리를 위해 루트계정으로 했다. 설정 자체는 루트계정이 아닐경우 수정이 안되는 경우가 많고 sudo를 계속 치면서 pw를 치는게 번거롭다.

 

1. 방화벽 포트포워딩.

- 서버와 내가 사용하는 PC는 다른 IP이기 때문에 너무 당연한 거였다.

이 부분은 결정적인 원인은 아니다.

2. 우분투 IP 및 포트 개방.

- OS에서 포트가 개방 되어있는지 그리고 IP가 로컬로 되어있는지 확인을 했다.

netstat 명령어를 사용하면 된다. 

# netstat -tnlp

기본적으로 MySQL은 3306 포트를 사용한다. 

우선 Local Address를 살펴보면 3306포트가 127.0.0.1로 되어있는것을 확인할 수 있다. 그렇단 뜻은 로컬에서만 mysql을 접속 할 수 있다. 이건 mysql 설정을 바꿔주면 된다. 우선 맨끝에 프로그램 이름을 확인하자. mysqld 라고 되어있다. 이걸 기억한 후 mysql 폴더로 가야한다.

cd /etc/mysql
ls -a

mysql 폴더는 etc 밑에 있다. cd 명령어를 통해서 이동 후 ls 명령어를 통해서 폴더 안에 어떤게 있는지 확인한다.

여기서부터 문제가 많았다.

이 설정은 os 버전과 mysql 버전에 따라 설정 파일이 다를 수 있다. 나도 이 부분에서 굉장히 헤맸다. 어떤 사람은 my.conf , mysql.conf, mysqld.conf ... 어떤 사람은 이 폴더에서 찾는 사람도 있다. 많은 시도 끝에 해결했다. 우선 아까 프로그램이름이 mysqld 였는데 이 폴더 안에는 같은 이름의 cnf가 없었다.

그래서 mysql.conf.d 폴더로 이동했다. 그 안에 mysqld.cnf 파일이 있었다.

cd mysql.conf.d
ls -a
vi mysqld.cnf

vi로 mysqld.cnf 파일을 편집하자.

bind-address가 있다. 그걸 0.0.0.0으로 바꿔주자. 그리고 :wq를 입력하고 나오면 된다. 

수정했다면 mysql를 재실행한다.

service mysql restart

재실행했으면 아까 netstat 명령어로 IP가 제대로 설정됐는지 확인해보자

이렇게까지 했으면 이제 Mysql에서 user를 살펴봐야한다.

3. User 설정

mysql에 root 계정으로 접속한다.

mysql -u root -p

접속 한 후 데이터베이스를 선택한 후 user 테이블을 확인해보자.

mysql> use mysql;

mysql> select user,host from user;

user 테이블을 보면 host 컬럼에 localhost만 되어있다. 이 뜻은 외부 접속이 안된다.

그러면 user를 하나 생성해주자.

mysql> create user 'user'@'%' identified by '!QAZ2wsx';

'user'@'%'는 user는 user name이고 , % 는 외부의 모든 접근 허용이다.

여기까지 한다면 workbench에서 접속이 가능할 것이다.

728x90

설치 명령어다. 

# apt-get install mysql-server

기본적으로 리눅스 계열의 세팅이 필요한듯하다.

# ufw allow mysql
# systemctl start mysql
# systemctl enable mysql

1 외부접속 기능 설정(Port 3306 개방)

2 mysql 실행

3 서버 리부팅 시 mysql 자동 재시작

 

Mysql은 설치 후 추가 설치 과정이 필요하다.

# mysql_secure_installation

암호 검증을 말하는 것 같다. 

암호 난이도? 인듯 하다. 

 

루트 계정 암호 입력이다.  암호를 입력하면 입력한 암호의 보안 강도를 나타내며 사용할 것인지 또 묻는다.

MySQL은 디폴트로 익명의 유저를 있고, 어차피 이건 필요하지 않으니 지울거냐고 물어보네요

일반적으로 루트유저는 localhost에서만 접속이 되네요. 원격 접속을 할 때 막을 건지 물어보는듯 하네요?

디폴트로 testDB를 생성하네요 지울거냐고 묻네요

끝났습니다. 아래 명령어로 MySQL에 접속 해보고 마무리 해야죠.

# mysql -u root -p

728x90

회사 서버 잘 쓰다가 갑자기 방화벽 설치한다고 한다.

그래서 방화벽 내가 설치하고 NAT 설정 했는데 문제는 파일질라로 FTP 잘만 되던게 안되기 시작했다. 

방화벽이 없었을때는 NAT 설정해서 사용했는데 지금은 해결이 안되기 때문에 FTP 설정을 다시 했다.

 

vsftpd 설치

# apt install vsftpd

vsftpd가 설치가 되고 실행된다. 실행이 잘 되고 있는지 상태를 확인해야한다.

service vsftpd status

ftp 포트가 LISTEN 중인지 확인해보자

# netstat -natp | grep ftp

이제 환경설정을 해야한다.

# vi /etc/vsftpd.conf

나의 경우엔 아무것도 안써있었다. 그래서 자신에 상황에 맞게 아래의 링크에서 참고하여 설정했다.

https://security.appspot.com/vsftpd/vsftpd_conf.html

 

Manpage of VSFTPD.CONF

VSFTPD.CONF Section: File Formats (5) Index Return to Main Contents   NAME vsftpd.conf - config file for vsftpd   DESCRIPTION vsftpd.conf may be used to control various aspects of vsftpd's behaviour. By default, vsftpd looks for this file at the location

security.appspot.com

이제부터 환경설정인데 두가지다.

1. 방화벽 없이 PC 통신일 경우

액티브 모드만으로도 충분할 겁니다. 근데 파일 리스트라던지 데이터 통신이 안된다면 아래 2번 방법을 해보자.

listen=YES
listen_ipv6=NO		// 1, 2번은 주석이 아니니 설정 변경하세요

listen_port=21		// 주석해제

2. 만약 방화벽 같은 게 있다면 아래의 방법을 참조

패시브 모드가 필요하다. 액티브와 패시브 모드는 나도 잘 모른다. 대충 알아만봤다.

그리고 처음 두 줄은 주석이 해체되어있다. 그러니 아래처럼 변경해주고 listen_port 부터는 그냥 귀찮으니 맨 밑에 쓰자.

listen=YES
listen_ipv6=NO		// 1, 2번은 주석이 아니니 설정 변경하세요

listen_port=21		// 주석해제
pasv_min_port=60020
pasv_max_port=60030

 

공통적으로 1번 방법은 포트포워딩에서 TCP 21, 2번 방법은 TCP 21. 60020~60030을 같이 열어줘야 한다. 

 

* 로그인 및 파일전송 로그는 /var/log/vsftpd.log 파일에 기록

/etc/ftpusers 파일에 쓰여진 사용자는 FTP 로그인이 거부

 

아직까지 잘 모르겠지만 서비스 재시작하면 완료다.

# service vsftpd restart

* 보통 접속시 active mode로 하며 접속은 되는데 파일리스트가 제대로 안보이거나 파일 전송이 안되는데 대부분 방화벽이 주 원인이다. 서버에서는 클라이언트가 알려준 포트로 접속을 했는데 방화벽에서 차단을 하기 때문이다. 그래서 passive mode 포트를 입력하고 방화벽에서 해당 포트를 열어주면된다.

728x90

우분투서버로 파일질라를 통해 FTP 접속하여 파일을 옮기려는 중에 에러가 생겨서 파일이 정상적으로 옮겨지지 않았습니다.

Response: 553 Could not create file.

Error: Critical file transfer error

왠지 바로 느낌이 왔습니다. ROOT 권한에 때문이란 것을요

파일질라에서는 root 로그인이 안되더라고요

일반 계정에 root 권한을 주거나 아니면 일반 계정도 폴더나 파일을 수정할 수 있는 권한을 줘야하는 것 같습니다.

답은 생각보다 간단했습니다.

여기서 username은 계정 명을 써주시면 됩니다.

sudo chown -R username /경로,폴더명/...

 

728x90

이번엔 백그라운드에서 서버 실행하려고 합니다.

왜 그러려고 하냐? 다른 명령어도 사용해야하는데 js파일 하나만 할 순 없으니깐

vscode에서도 npm server.js를 실행하면 코드를 입력할 수 없고 request에 의해서 콘솔이 찍힐 뿐이죠...

저거를 취소하는 순간 서버가 꺼진 것과 다름이 없죠. 

그렇기 때문에 백그라운드 실행을 하려고 합니다.

우선 forever 설치를 합니다.

$>npm install forever -g

 

그 후 실행할 파일 디렉토리로 이동한 수 forever를 이용해서 node.js 파일을 실행합니다.

$>forever start server.js

 

백그라운드 실행이 되고 있는지 확인하고 싶다면 

$>forever list

그럼 이렇게 사진처럼 나옵니다

그런데 여기서 root권한이 없는 상태로 명령어를 입력한다면 밑에 사진처럼 아무것도 나오지 않는다.

forever은 사용자 권한을 구분하여 정보를 반환한다.

 

해당 파일을 종료하고 싶다면 list 명령어로 확인한 pid를 X에다 넣어서 실행시키면 된다.

$>forever stop X

그럼 밑에 사진처럼 forever stopped process가 나올 것 이다.

 

해당 프로세스의 로그를 실시간으로 확인하고 싶으면 logs 또는 list 명령어의 logfile 주소를 아래의 명령어와 조합을 하면된다.

단순 확인은 cat, vi 등으로 확인할 수 있다.

 

$ > tail -f /home/user/.forever/dke.log

예시이기 때문에 사람마다 user 명과 log 파일명이 다르다. 

728x90

Ubuntu Server 20.04 LTS IP 고정 할당 입니다.

대부분 DHCP 만 썼었는데 서버인 만큼 IP 고정 할당을 해보려고 합니다.

우선 root 계정으로 하거나 아니면 vi 할때 sudo 추가 하셔야 됩니다.(root 권한으로 안하면 변경이 안됩니다.)

vi /etc/netplan/00-installer-config.yaml

※ 마지막 파일은 다를수도 있습니다. cd로 가서 ls 해보는걸 추천.

vi로 들어가면 밑에 사진 처럼 나옵니다.

그러면 dhcp4를 지워지고 밑에 정보를 추가해주시면 됩니다.

addresses와 gateway4는 자신의 환경에 맞춰서 변경 해주세요

network:
  ethernets:
    ens160:
      addresses:
      - 192.168.1.60/24
      gateway4: 192.168.1.1
      nameservers:
        addresses:
        - 8.8.8.8
        search:
        - 8.8.4.4
  version: 2

그리고 변경하고 나와서

netplan apply 명령어 실행하시면 됩니다.

728x90

+ Recent posts