2018년 9월 28일 금요일

PostgreSQL 에서 pg_hba.conf 의 ADDRESS 설정

저번 포스트에서 postgresql.conf 의 listen_addresses 에 대해 기록을 했다.
listen_addresses 는 PostgreSQL 서버 입장에서 listen 을 할때에 대한 내용이었다.

pg_hba.conf 는 다른 컴퓨터(클라이언트)에 대한 control 내용이다.

편집기를 통해 pg_hba.conf 파일을 열어보면, 아래와 같은 형태로 되어 있다.

# TYPE  DATABASE        USER            ADDRESS                 METHOD

이번에는 ADDRESS 항목에 대해서만 기록해 보자.

pg_hba.conf 의 초기 내용은 아래와 같다.

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust

# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust

"127.0.0.1/32" 라고 되어 있다.
클라이언트 IP 주소가 127.0.0.1 경우만 접속을 허용하겠다는 의미다.
클라이언트 IP 주소가 127.0.0.1 이라는것은,
결국 localhost 접속만 허용하겠다는 의미다.

% psql -h localhost
이 형태의 접속만 허용하겠다는 의미다.

다른 컴퓨터(클라이언트)의 접속을 허용하기 위해서는,
해당 컴퓨터의 IP 주소를 입력하면 된다.

예를 들어,
10.0.2.20 주소를 가지고 있는 클라이언트의 접속을 허용하기 위해서는,
"10.0.2.20/32" 라고 입력하면 된다.
이렇게 하면 10.0.2.20 주소를 가지고 있는 컴퓨터(클라이언트)만 접속할 수 있다.

host    all             all             10.0.2.20/32            trust

만약에,
10.0.2.30 주소를 가지고 있는 클라이언트도 접속을 허용하기 위해서는,
"10.0.2.30/32" 라고 추가적으로 입력하면 된다.
이렇게 하면 10.0.2.30 주소를 가지고 있는 컴퓨터(클라이언트)도 접속할 수 있다.

host    all             all             10.0.2.20/32            trust
host    all             all             10.0.2.30/32            trust

특정 IP 주소 말고, IP 주소 대역대를 입력할 수 있다.
"/32" 를 다른 값으로 넣어주면 된다.
"/32" "/24" 는 서브넷마스크를 의미한다.

host    all             all             10.0.2.0/24            trust

이렇게 하면 IP 주소가 10.0.2.x 대역의 주소를 가지고 있으면 접속이 가능하다.

만약 IP 주소 상관없이 모든 접속을 허용하고 싶게 하고 싶다면,
"/0" 을 입력하면 된다.

host    all             all             10.0.2.0/0            trust

지금까지는 TCP/IP socket 접속에 대한 내용이다.
그렇다면, local 은 무엇인가?

local   all             all                                     trust

local 은 Unix-domain socket(UDS) 을 의미한다.
그러므로 IP 주소를 입력하지 않는다.

아래 내용은 구글링을 통해서 얻은 정보이다.
--------------------------------------------------------------------------------------------
유닉스 도메인 소켓(Unix Domain Socket)은 프로세스간의 데이터 교환을 위한 기술 중 하나로, 파일 시스템을 통해 소켓통신 방식으로 내부 프로세스간의 통신을 하는 구조로 이뤄져있다. 약칭으로 UDS라고 표기하며, 간단하게 ‘유닉스 소켓(Unix socket)‘이라고 부르기도 한다. IPC(Inter Process Communication)의 일부로서 분류할 때는 ‘IPC소켓’이라고 부르기도 한다. POSIX의 표준 운영체제 구성요소 중 하나로 포함되어있다.

UDS의 가장 큰 특징은 소켓통신 방식을 써서 만든 프로세스에 사용이 가능하기 때문에 소켓프로그래밍 구조를 유지한 채로 로컬 프로세스와의 효율적 통신을 가능케 한다는 점이다. TCP, 혹은 UDP형식 데이터를 파일 시스템을 이용해서 통신하는 구조로, 파일 시스템을 통해 파일 주소 및 inode로 각 프로세스에서 참조되며, 통신은 운영체제의 커널상에서 이뤄지기 때문에 inet소켓을 이용해서 네트워크단을 이용해 전달하는 것보다 빠르며 부하가 적게 걸린다.(기본적으로 소켓통신 방식이 TCP/IP의 4계층을 거쳐 전달되기 때문에 지연이 발생하는데 반해서 유닉스 소켓은 어플리케이션 계층에서 TCP계층으로 내려가 바로 데이터를 전달하고, 수신측도 TCP계층에서 수신해 어플리케이션 계층으로 올라간다)
--------------------------------------------------------------------------------------------

Unix-domain socket(UDS)의 특징은 소켓프로그래밍 구조를 유지한 채로 프로세스간 통신이 가능하다.
장점은 모듈화를 잘 하면 소켓 코드를 재사용할 수 있다는 것과, 개발 공수가 적게 들어간다는 것이다.
일반 소켓프로그래밍과 차이점은 TCP 계층 2개만(Application, Transport) 사용한다는 것이다.

% psql
아무런 옵션없이 접속하는 경우, Unix-domain socket 으로 접속한다.

pg_hba.conf 를 사용해서 적절하게 접근 권한을 설정해서 보안을 설정하면 된다.
수정후에는 반드시 restart 혹은 reload 를 해야 한다.

% pg_ctl reload
% pg_ctl restart




출처

2018년 9월 27일 목요일

PostgreSQL 에서 postgresql.conf 의 listen_addresses 설정

PostgreSQL 은 DBMS 이다.
당연히 socket 을 통한 접속 기능을 제공하고 있다.

처음 설치를 하면, 보안을 위해서 socket 외부 접속이 막혀있다.
이것을 열어주기 위해서는 postgresql.conf 파일을 수정해야 한다.

편집기를 통해서 postgresql.conf 파일을 열어보면,
listen_addresses 항목이 있는데 이것을 수정하면 된다.

listen_addresses 앞에 주석표시를 삭제한다.
(당연한 것이겠지만, 혹시나 하고)

listen_addresses = 'localhost' # what IP address(es) to listen on;
                                       # comma-separated list of addresses;
                                       # defaults to 'localhost'; use '*' for all
                                       # (change requires restart)

기본값이 localhost 로 되어 있다.
localhost 와 127.0.0.1 은 같은 의미다.

뭐, 예를 들어, 실제 PostgreSQL 소스 코드에
listen("localhost");
이런식으로 들어간다는 말이다.

아래 명령어를 통해서,
실제로 네트워크가 어떻게 되고 있는지 확인할 수 있다.

% netstat -nap | grep 5432

tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      30702/postgres

이 말은 PostgreSQL 이 네트워크를 listen 하고 있는데,
127.0.0.1 으로 listen 하고 있겠다는 의미다.
로컬 접속만 허용하겠다는 의미다.

어떤 서버가 psql 을 통해서 PostgreSQL 에 접속을 하려고 할때,
"psql -h localhost" 이런식으로 접속 해야 된다는 것이다.
혹은 "psql -h 127.0.0.1"

결국, 다른 컴퓨터가 아닌, 자기 자신의 접속만 허용한다는걸 의미한다.

만약 다른 컴퓨터에서 접속할 수 있게 하려면 어떻게 해야 할까?

listen_addresses = '자신의 IP 주소'
이런식으로 하면 된다.

만약 자신의 IP 주소가 10.0.2.12 일 경우,
listen_addresses = '10.0.2.12'
이런식으로 하면 된다.

아래 명령어를 통해서,
실제로 네트워크가 어떻게 되고 있는지 확인할 수 있다.

% netstat -nap | grep 5432

tcp        0      0 10.0.2.12:5432          0.0.0.0:*               LISTEN      30702/postgres

어떤 서버가 psql 을 통해서 PostgreSQL 에 접속을 하려고 할때,
"psql -h 10.0.2.12" 이런식으로 접속 하면 된다.

만약 자신의 IP 주소가 2개일 경우,
listen_addresses = '10.0.2.12,10.0.2.14'
이런식으로 콤마(,)를 사용해서 추가하면 된다.

아래 명령어를 통해서,
실제로 네트워크가 어떻게 되고 있는지 확인할 수 있다.

% netstat -nap | grep 5432

tcp        0      0 10.0.2.12:5432          0.0.0.0:*               LISTEN      30702/postgres
tcp        0      0 10.0.2.14:5432          0.0.0.0:*               LISTEN      30702/postgres

어떤 서버가 psql 을 통해서 PostgreSQL 에 접속을 하려고 할때,
"psql -h 10.0.2.12" 혹은
"psql -h 10.0.2.14" 이런식으로 접속 하면 된다.

IP 주소를 신경쓰고 싶지 않다면,
listen_addresses = '*' 혹은
listen_addresses = '0.0.0.0' 이런식으로 하면 된다.

IP 주소 상관없이 listen 을 하겠다는 의미다.

아래 명령어를 통해서,
실제로 네트워크가 어떻게 되고 있는지 확인할 수 있다.

% netstat -nap | grep 5432

tcp        0      0 0.0.0.0:5432          0.0.0.0:*               LISTEN      30702/postgres

적용 후, PostgreSQL restart 를 반드시 해야 한다.
% pg_ctl restart


※ 만약, PostgreSQL 을 Active-Standby 형식으로 구성할거라면,
반드시 listen_addresses = '*' 으로 설정해야 한다.
왜냐하면 Active 와 Standby 의 IP 주소가 서로 다르기 때문이다.
물론 각각 별도로 postgresql.conf 를 수정하면 되지만,
일반적으로 처음 동기화를 수행할 때, postgresql.conf 도 동기화 되기 때문이다.



출처
http://justckh.blogspot.com/2013/10/postgresql-ip.html

Linux Timezone(UTC) 시간 변경 (tzdata)

서버 시간이, 실제 자신이 거주하고 있는 곳 시간과 다를 수 있다.

시간을 맞추는 방법은 아래와 같다.

% sudo dpkg-reconfigure tzdata

자신에게 맞는 시간을 선택한다.



2018년 9월 21일 금요일

CentOS 7 IP 주소 설정

CentOS 7 IP 주소 설정

네트워크 설정이 기록되어 있는 파일을 수정하면 된다.

% vi /etc/sysconfig/network-scripts/ifcfg-enp3s0

ifcfg-enp3s0 파일 이름은 서버 상황에 따라 다를 수 있다.

% ip a
명령어를 통해서 네트워크 카드 이름을 확인하자.

% ls -l /etc/sysconfig/network-scripts
해당하는 파일이 존재하는지 확인하자.

붉은색으로 표시된 내용만 수정 혹은 추가하면 된다.

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp3s0
UUID=227c9d90-2be8-4427-a098-3fd3b22e4271
DEVICE=enp3s0
ONBOOT=yes
IPADDR=172.21.70.116
NETMASK=255.255.255.0
GATEWAY=172.21.70.1
DNS1=172.21.17.2
DNS2=168.126.63.1

서버를 재부팅 하거나, 네트워크를 다시 시작하면 된다.
% service network restart



출처
http://devhoma.tistory.com/112

Linux Timezone(UTC) 시간 변경

서버 시간이, 실제 자신이 거주하고 있는 곳 시간과 다를 수 있다.

시간을 맞추는 방법은 여러가지 방법이 있다.
아래 3가지 방법 중 원하는 방법을 사용하면 된다.

(1) localtime 을 링크로 연결해 준다.
% ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

% ls -l /usr/share/zoneinfo
디렉토리를 보면, 다양한 나라들이 존재한다.

다른 시간을 기준으로 하고 싶다면
위처럼 해당 시간을 맞추면 된다.

(2) tzselect 명령어 사용


(3) "dpkg-reconfigure tzdata" 명령어 사용






출처
http://jhproject.tistory.com/136
https://xmlangel.blogspot.kr/2016/06/ubuntu-utc.html
http://misoin.tistory.com/68
http://ngee.tistory.com/643
https://cjh5414.github.io/ubuntu-timezone

2018년 9월 20일 목요일

Ubuntu 18.04 IP 설정

Ubuntu 18.04 IP 설정 설정 방법

Ubuntu 18.04 는 ip address 설정 방법이, Ubuntu 16.04 와 다르다.
정확히는 Ubuntu 17.10 부터 ip address 설정 방법이 달라졌다.

기존 방법에서 사용하던 파일을 open 해보면,
netplan 파일로 변경되었다고 나온다.
% cat /etc/networks/interfaces

netplan 으로 이동하자
% cd /etc/netplan

% ls
50-cloud-init.yaml

1개의 yaml 파일이 존재한다.
상황에 따라 이름이 다를 수도 있고, 갯수가 다를 수도 있는거 같다.
아무튼 vi 같은 editor 로 열어보자.

# This file is generated from information provided by
# the datasource.  Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        enp0s3:
            addresses: []
            dhcp4: true
            optional: true
    version: 2

아래처럼 정보를 입력하면 된다.

# This file is generated from information provided by
# the datasource.  Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        enp0s3:
            addresses: [192.168.0.100/24]
            gateway4: 192.168.0.1
            nameservers:
                    addresses: [168.126.63.1,168.126.63.2]
            dhcp4: false
            optional: true
    version: 2



출처
http://blog.hazard.kr/archives/890
https://ujuc.github.io/2017/11/18/ubuntu_17.10e-seo-bu-teo_gibon-eu-ro_sa-yong-doe-neun_netplan
http://blog.hkwon.me/ubuntu-18-04-netplan
https://websiteforstudents.com/configuring-static-ips-ubuntu-17-10-servers
https://websiteforstudents.com/configure-static-ip-addresses-on-ubuntu-18-04-beta

2018년 9월 10일 월요일

Ubuntu 16.04 IP 주소 설정

Ubuntu 16.04 IP 주소 설정 방법

네트워크 설정이 기록되어 있는 파일을 수정하면 된다.
% sudo vi /etc/network/interfaces

#iface enp0s3 inet dhcp
#기존 DHCP 는 안쓰기 때문에 주석처리 해놓는다.

iface enp0s3 inet static
#고정IP 방식을 사용하기 위해선 static 을 입력한다.

address 192.168.0.100
#내부 IP 주소나 외부 IP주소를 address 항목에 입력한다.

netmask 255.255.255.0
#서브넷 마스크를 입력한다.

gateway 192.168.0.1
#Gateway IP 를 입력한다. 공유기를 사용하는 경우 공유기 내부 환경설정을 위해 들어가는 IP 주소가 Gateway 이다.

dns-nameservers 168.126.63.1 168.126.63.2
#dns 서버를 입력한다. 스페이스바를 통해 보조DNS 설정이 가능하다. 첫번째가 메인 DNS, 두번째가 서브 DNS 이다.

설정 완료 후 네트워크를 다시 시작하자.
sudo systemctl restart networking.service



출처
https://blog.supersu.kr/computer/linux/ubuntu/how-to-ubuntu-16-04-static-ip-settings
https://www.manualfactory.net/10108

2018년 9월 3일 월요일

Nginx autoindex timezone 한국 시간 설정

Nginx 는 요즘 한창 인기를 끌고 있는 웹 서버 이다.
Apache 보다 좋다고 인터넷에서 시끌벅적 하길래, 사용해 봤다.

근데 잘 모르겠다.
뭐 그렇게 많은 사람들이 동시에 접속할 일이 없으니 당연하지만.....

암튼 만족하면서 잘 사용중이다.

근데 문제가 생겼다.
autoindex 기능을 사용해서,
현재 디렉토리에 있는 파일들을 나열하도록 해서 사용중인데 날짜가 안 맞는다.

이리저래 해봤는데, 한국 시간보다 9시간 늦게 나온다.
UTC ? 뭐? 거시기? 태평양 가운데 시간 그거..... 암튼 그거 시간으로 나온다.

그래서 구글링을 해본 결과, 나처럼 먼저 삽질한 사람이 해결방법을 적어놨다.
/etc/nginx/sites-available/default 에 아래 내용을 넣으면 된다.

autoindex_localtime on;



출처
https://gist.github.com/lixingcong/e6987f83c9e7b226f976876f5c68f928

WinSCP 기부

나는 리눅스(Linux)를 많이 사용하는 편이다. 회사에서도 사용하고, 개인적으로도 사용하고 있다. 그러다 보니 자연스럽게, SFTP를 많이 사용하게 된다. 리눅스에서는 SFTP에 대해 기본적으로 이렇게 저렇게 잘 지원을 해주는 편인데, 윈도...