[초보] Postgresql Windows와 Linux에서 JDBC 드라이버 설치하기

출처 : http://blog.naver.com/mllmaster/120019169797

안녕하세요?

Postgresql 초보자입니다.

참으로 오랜 시간이 지난뒤 글을 올리는 군요....

오늘은 Postgresql을 이용한 JDBC 설치를 Linux와 Windows에서 어떻게 하는가에 대한 예기를 하고자 합니다.

여기서 Linux나 Windows 모두 DB는 Linux에 설치되어 있습니다.

(접근하는 파일만 Windows에 있느냐 Linux에 있느냐임.)

우선 Linux 부터 하려 합니다. 이 글은 원칙론 적인 것 보단 제 경험에 의한 것이니 잘못된 것이 있으면 지적 부탁 드립니다.

Linux의 경우

postgresql을 깔아야 겠지요? ^^; (설치법은 많이 나와 있으니 자세히 설명하지 않겠습니다.)

그 다음 http://www.postgresql.org에 가서 postgresql.jar를 다운 받습니다.(다운받지 않고 설치시에 생성되게 하는 경우도 있는데 제 경우는 초보자라 어렵더군요.Ant인가도 설치해야하는데 어떻게 해야 하는지도 모르겠구요.)

들어가 보시면 WWW mirror Site와 FTP mirror Site가 있습니다.

그곳에서 WWW mirror Site의 첫번째 미국국기를 클릭하시면 코끼리 그림이 그려진 postgresql 사이트가 나올겁니다.(다른걸 클릭하셔도 크게 다르진 않을듯.^^)

그곳 메뉴중에서 User's lounge라는 메뉴가 두번째 줄에 있군요. 그걸 클릭합니다.

그러면 General Info ,Specialized Postgresql Site, FAQs 등등의 메뉴들이 나올 것입니다. Specialized Postgresql Site에서 JDBC Drivers Website(링크) 를 클릭합니다.

그러면 Cyan 색의 홈페이지가 뜨는데요 맨 상단의 풀색 비슷한 메뉴에서 Downloads(링크)를 클릭합니다.

그러면 비로소 드라이버다운로드 페이지가 뜨는데요....

거기 써 있는데로 JDBC1 -> jdk1.1, JDBC2 ->jdk1.2 1.3, JDBC3->jdk1.4 등에서 동작하는 것이니 자신이 가지고 있는 jdk 버전을 확인하여

받아주시면 됩니다.(저는 여러가지 Driver(latest Stable Driver, 7.3 RC1 Drivers, Development Driver,Archived Driver.. )중 Latest Stable Driver를 받았던 걸로 기억하고 있습니다만..테스트 하다가 잘 안되시면 여러가지를 받아보심이..(--) 경험에 의한 거라 한계가 많네요)

받은 뒤에는 classpath 설정을 해야 겠지요....

PATH=$PATH:$HOME/bin:/usr/java/jdk1.3.1/bin:

unset USERNAME

export CLASSPATH=/usr/local/pgsql/lib/postgresql.jar:/usr/src/pgsql/postgresql-7.2.3/src/interfaces/jdbc/example:/home/postgres

제가 했던 설정은 위와 같구요.(/usr/local/pgsql/lib/postgresql.jar) postgres 홈 디렉토리의 .bashrc또는 .bash_profile 파일에 위와 같은 설정을 하시면 됩니다.

edit 방법은 $vi .bash_profile 또는 $vi .bashrc 가 되겠지요? $는 프롬프트 상태를 표시한 것이니 $를 빼고 치시면 됩니다.

이때 /usr/local/pgsql/lib/ 안에 postgresql.jar을 넣어야 하는 것...잊지 마시구요.

save(:wq)까지 하시면 $source .bashrc 또는 $source .bash_profile을 쳐서 입력 시키는 것 잊지 마시구요.

이다음은 basic.java 파일을 찾습니다. find . -name basic.java -print 명령어를(루트 디렉토리 에서 치기 바람) 통해서 찾아도 되고 직접 디렉토리 탐색을 통해서 찾을 수 도 있슴

직접 디렉토리를 찾아 들어가는 경우는 설치시에 어느 디렉토리를 선택하여 설치하느냐에 따라 다르므로 find 명령어를 사용하면 쉽게 파일들을 찾을 수 있습니다. 중요한것은 example 디렉토리 안에 있는 것이 찾고자 하는 basic.java 파일입니다.

javac basic.java (Enter)

java example.basic jdbc:postgresql:database user password (enter)

(예)

java basic jdbc:postgresql://218.49.168.122:5432/test postgres 1111 (enter)

쳐서 에러가 없으면 JDBC 설치가 끝난 것입니다. 여기서 port 번호는 5432입니다. 이번호 틀리면 에러 메시지를 냅니다.

(Note: basic.java uses or overrides a deprecates API

Note: Recompile with -deprecation for details)

위와 같은 메시지가 나와도 신경쓰지 않아도 됩니다.

만약 아래와 같은 에러 메시지를 내면 다음과 같이 설정을 해 주어야 합니다.

에러 메시지 시작

Connecting to Database URL = jdbc:postgresql://211.116.131.132:5432/gazetteer

Exception caught.

Something unusual has occured to cause the driver to fail. Please report this exception: Exception: java.sql.SQLException: FATAL 1: No pg_hba.conf entry for host 211.116.131.132, user postgres, database gazetteer

에러 메시지 끝

host all 211.110.000.000 255.255.255.192 trust (211.110.000.000 은 접속하고자 하는 pc(외부 컴퓨터)의 ip 번호입니다.)

data 라는 디렉토리에 있는 pg_hba.conf 파일을 수정하면 됩니다.

역시 pg_hba.conf 파일을 찾는 경우도 find . -name pg_hba.conf -print (Enter) 입니다.^^

아참 설정후 postmaster를 다시 가동 시켜 주셔야 합니다.

가동 방법..

kill -9 -1 (Enter) (모든 프로세스를 죽임..0-0;; 원하지 않으시면 ps 치신후 kill [pid] <= 해당 process번호를 치시면 됩니다)

postmaster -i& (Enter)

원본 : http://database.sarang.net/?inc=read&aid=4446&criteria=pgsql&subcrit=tutorials&id=&limit=20&keyword=&page=4

윈도우의 경우

기본적으로 postgresql.jar 파일을 classpath 에 추가시킨 후

basic.java를 컴파일 하기만 하면 됩니다.

postgresql.jar 파일 받는 법은 위와 동일하고 적당한 디렉토리에 postgresql.jar를 놓은 후

classpath에 아래와 같이 추가 합니다.

C:\javasource\postgresql.jar

postgresql.jar 앞의 경로는 임의로 선택한 디렉토리 경로입니다. (windows 2000의 경우 내컴퓨터를 오른쪽 클릭 하시고 등록정보 클릭 하시면 '고급'이라는 텝 이름이 나오는데, 그곳을 클릭하면 환경 변수 버튼이 있습니다. 클릭하시고 classpath 부분에 위와같은 형식으로 추가 해 주십시오.

basic.java 컴파일은 위의 리눅스의 경우와 동일합니다.

실행 시 에러 메시지를 내는 경우 postgresql DB가 깔려있는 리눅스로 접속해 trust 설정을 해 주시면 (host all 211.116.000.000 255.255.255.192 trust) 됩니다.

'PostgreSQL' 카테고리의 다른 글

[PostgreSQL] \? for help width psql commands  (0) 2008.04.24
Postgresql 프로그래밍  (0) 2008.04.23
UNION, INTERSECT, EXCEPT  (0) 2007.09.19
PostgreSQL 7.2 설치하기  (0) 2006.06.17
PostgreSQL 설치  (0) 2006.06.11
, .

MySQL DB 보안(1)

Security 2007. 6. 11. 10:06
MySQL DB 보안(1)
MySQL은 세계적으로 널리 쓰이는 가벼운 프리소프트웨어 데이터베이스(Free Software Database)이다. 정확하게 말하면 MySQL은 세계적으로 가장 대중적인 SQL이다. MySQL 말고라도 MSQL 같은 소규모 DB, 또는 ASP와 연동하여 쓰이는 MSSQL 등 많은 다른 SQL이 있긴 하지만 MySQL에는 프리라는 이점 때문에 다른 SQL들 보다 널리 사용되고 있다. 우선 MySQL은 Linux, Apache, PHP 등과 같이 오픈 소스를 지향하는 애플리케이션과 궁합이 잘 맞는다. 전 세계적으로 인터넷 상에서 가장 많은 비중을 차지하는 서버는 리눅스이고, 그 중 PHP와 MySQL의 연동은 리눅스 서버의 근간을 이루고 있다.

하지만 이런 이유로 해커에게 가장 많은 타깃이 되는 목표이기도 하다. 이제 MySQL의 기본 보안설정에 대해서 알아보는 시간을 갖도록 하자.

1. Root 계정 패스워드 점검
MySQL설치 시 root 이름을 갖는 계정이 생성되는데 슈퍼유저(superuser) 계정이다. 초기root 계정 패스워드는 비어 있어 누구라도 MySQL 서버에 root - 패스워드 없이 - 로 접속할 수 있다. 이를 이용하여 데이터베이스의 관리자 권한으로 접근이 가능하여 DB의 추가, 삭제, 변경 등의 모든 권한을 갖게 된다.

MySQL Clinet에서 root계정으로 패스워드 입력없이 접근이 되는지 확인한다.


[그림 1] 패스워드 입력없이 root 계정으로 접근


Mysql 이라는 데이터베이스에는 계정 정보를 저장하고 있는 user라는 테이블이 존재하며, 해당 테이블에서 사용자명과 패스워드 설정 유무를 확인할 수 있다.


[그림 2] user 테이블에서 패스워드 설정되어 있지 않는 root 계정 확인


UPDATE를 사용해서 user 테이블을 직접 수정할 수 있다. 아래의 UPDATE 명령문은 유저가 root인 계정의 패스워드를 password()암호화 함수를 이용하여 새로운 패스워드를 할당 하고 있으며, 하나의 패스워드를 두 개의 root 계정 모두에 동시에 할당하고 있다. UPDATE 명령문은 윈도우와 유닉스에 모두 적용된다.
FLUSH PRIVILEGES 명령은 mysql을 다시 시작 하지 않고 바로 권한을 적용 할 수가 있다.



2. 익명 사용자(Anonymous) 계정 패스워드 점검
MySQL 설치 시 root 계정 외에 두 개의 익명 사용자 계정이 생성되고, 사용자 이름이 비어 있는 상태로 만들어 진다. 익명 사용자 계정은 패스워드가 없으며, 따라서 누구라도 이 계정을 사용해서 MySQL서버에 접속할 수 있다. MySQL 5.x부터는 익명사용자가 생성되지 않는다.
유닉스에서는, 두 개 모두가 로컬 호스트에서 접속을 하기 위한 것으로 사용된다. 하나의 계정에 대해서는 localhost 의 호스트 이름을, 또는 다른 계정에 대해서는 실제 호스트 이름 또는 IP 번호를 지정함으로써 로컬 호스트로부터 접속이 이루어져야 한다. 이 계정들은 test 데이터 베이스 및 test_로 시작되는 다른 데이터 베이스를 위한 모든 권한을 가지고 있다.

MySQL Clinet에서 사용자 없이(anonymous사용자) 접근이 되는지 확인한다.


[그림 3] 계정 없이(anonymous사용자) MySQL에 접근


Mysql 라는 데이터베이스에는 계정정보를 저장하고 있는 user라는 테이블이 존재하며, 해당 테이블에서 사용자명과 패스워드 설정 유무를 확인할 수 있다.


[그림 4] mysql.user테이블에서 anonymous사용자 확인


익명 사용자 계정에 패스워드를 할당하기 위해서는, root로 서버에 접속을 한 다음에 SET PASSWORD 또는 UPDATE를 실행한다. 어느 경우에서든지, PASSWORD() 함수를 사용해서 패스워드를 암호화 하도록 한다.
UPDATE를 사용할 경우 Root로 서버에 접속을 한 다음에 UPDATE 명령문을 입력하여 적당한 user 테이블 레코드의 Password 컬럼에 값을 할당한다. 이 과정은 윈도우와 유닉스에서 모두 동일하다.



UPDATE를 사용해서 user 테이블에 직접 패스워드를 갱신한 다음에는, 서버가 FLUSH PRIVILEGES를 통해 Grant 테이블을 다시 읽어 오도록 해야 한다. 그렇게 하지 않으면, 서버를 재 구동 시키기 전까지 서버는 갱신된 내용을 알지 못하게 된다.

패스워드를 설정하는 방법 이외에 아래와 같이 유저를 삭제하는 방법도 있다.



3. USER 테이블 접근 권한 점검
MySQL에서 접근제어(Access Control)는 Grant tabales에 해당하는 User, db, host, tables_priv, columns_priv 테이블에 권한 정보를 저장하고 MySQL서버를 시작할 때 이 테이블에 있는 내용들을 메모리고 읽어들이고, 권한 변경설정 후에도 다시 한번 읽어들인다. 즉, 접근제어 결정은 GrantTable에 메모리 복사본을 기반으로 수행된다.

GrantTalbe중 user 테이블은 HOST, USER, PASSWORD라는 중요 정보를 저장하고 있고 이 테이블에는 사용자 권한 목록 및 사용자 패스워드의 해쉬값등을 포함하고 있다.
이런 중요한 테이블에 대해서는 일반사용자에 대한 접근제어가 이루어져야하며 Select 권한은 DBA(DataBase Administrators)만 사용할 수 있어야 한다.
만약, 웹과 연동되는 DB의 사용자가 USER테이블 접근권한이 있다면 웹과 연동되는 DB의 SQL인젝션 취약성이 있을 경우 DB의 계정 및 인증 정보가 유출될 수 있다.

다음과 같이 Mysql.user테이블에서 전체 DB사용자와 패스워드 해쉬값을 출력할 수 있다.


[그림 5] Mysql.user 테이블에서 DB사용자와 패스워드 출력


3.1 점검 방안

Mysql.user테이블에 대한 접근 권한 또는 Select권한(Select_priv)을 갖고 있는 사용자에 대해 점검한다. Show grants 명령문을 이용하여 각 사용자에게 부여된 권한을 살펴본 후 모든 DB에 접근권한이 있거나 MysqlDB에 접근권한이 있는 사용자들을 살펴본다.


[그림 6] Mysql.user 테이블에서 SELECT권한 확인



[그림 7] munnt계정에 대한 권한 점검


위의 결과는 munnt 사용자에게 모든 DB와 Table에 접근할 수 있는 모든 권한이 부여되어 있다.

① DBA가 아닌 일반사용자에 대해서 mysql.user(mysql 데이터베이스의 user 테이블)에 대한 모든 접근 권한을 제거한다.



또는 ② DBA가 아닌 일반사용자에 대해서 Select권한을 제거한다.



앞에서 설명한 것 이외에도 다음과 같이 mysql을 사용할 때 보안을 위해 알아 두어야 할 사항들이 있으며, 이 부분은 나중에 다시 자세하게 알아보는 기회를 갖도록 한다.

- 샘플 및 테스트 DB 점검
- MySQL 실행 유저 점검
- MySQL 히스토리(history) 파일 점검
- 원격 접근 점검
- MySQL 접속시 보안 방법
- FILE 권한이 승인된 사용자 점검
- 로깅 설정 점검
- GRANT tables에 접근 가능한 사용자 점검
- PROCESS 권한이 부여된 사용자 점검
- SSL(Secure Socket Layer) 설정 점검

[저자] 안랩코코넛 문성태

[출처] 안랩코코넛 SECU-LETTER 2007년 1월호

'Security' 카테고리의 다른 글

Tomcat 보안 개요  (0) 2009.03.12
centos5 geoip patch하기  (0) 2008.07.30
FreeBSD 보안 하드닝 Tip  (0) 2007.06.11
SSH 보안설정  (0) 2007.06.11
[솔라리스 강좌] 설정 변경과 시스템 보안 설정  (0) 2006.06.11
, .
FreeBSD 보안 하드닝 Tip
이번 호에는 인터넷에 무작위로 떠 돌고 있는 FreeBSD 시스템의 하드닝에 관하여 간단히 몇 가지를 정리해 보았습니다.
다른 OS와 다르게 많이 알려지지 않은 탓일까? 리눅스에 비해 발표되는 취약성이 많지 않은 편입니다. 시스템 하드닝을 하기 위해서 손 댈 곳도 많지 않습니다. BSD는 TCP/IP를 먼저 채택한 OS로 알려지며 어느 OS보다 네트워크가 튼실하다고 합니다. 야후가 Fore-End 서버를 BSD로 쓰고 있는 것을 보면 네트워크 하나만큼은 다른 OS에 비해 강력하다고 볼 수 있을 것입니다.

아래 내용들은 버전에 따라 내용이 다를 수 있습니다. 이점 유의 하시기 바랍니다.

1. Startup

1) 목적: 시스템 부팅 시에 시작되는 시작 프로그램에 의해 발생 할 수 있는 해킹 시도를 미연에 방지합니다.

2) 점검 방법
  • /etc/inetd.conf 파일 permission 점검
    inetd.conf내의 설정을 점검하여 불필요한 서비스나 보안상 취약한 서비스가 있는지 점검한다.
    Default 값은 모든 inetd.conf 설정은 disable 되어있다.
  • /etc/defaults/rc.conf내의 설정 상태를 확인 후 /etc/rc.conf의 설정을 비교하여 서비스를 점검한다.


3) 설정 방법
  • inetd를 사용할 경우 inetd.conf에서 사용하지 않는 서비스는 주석처리하고 process를 재 시작 한다.
  • /etc/default 디렉토리의 rc.conf는 수정하여서는 안 된다. 불필요한 서비스가 실행 중이라면 /etc 디렉토리에 있는 rc.conf에서 수정하여야 한다.



다음 표와 같이 설정 값을 확인하고 변경한다.



2. 패스워드 수준

1) 목적: 잘못 설정되어 있는 패스워드 설정을 점검하여 패스워드를 이용한 해킹 시도를 방지한다.

2) 점검 방법
- Password 생성 기본 암화화 방식은 md5로 설정되어 있다. Md5는 암호화 방식이 간단하여 쉽게 crack이 된다.
- Password 생성시 복잡성을 만족하는지 점검한다. 복잡성을 만족하지 않게 설정을 하면 사용자들이 간단하게 password를 설정함으로써 쉽게 crack을 당할 수 있다.
- Password 생성시 최소 암호 길이를 점검한다. 기본값은 5이다. 암호의 길이가 짧으면 crack하기가 쉬워 진다.

3) 설정 방법
- Password의 encryption 방식을 blowfish로 변경한다. Blowfish는 DES이후에 나온 암호화 방식으로 DES보다는 강력한 암호화 방식이다. Password를 생성할 때 복잡성을 만족시키려면 a-z, A-Z, 0-9, 특수문자 등을 포함하여 생성 할 수 있다.
- Password crack 툴들은 8자 단위로 암호를 crack한다. 그러므로, password의 최소 길이를 8자 이상으로 설정한다.
관련 내용을 /etc/login.conf에 설정 변경 또는 추가 한다.
:passwd_format=blf:\
:mixpasswordcase=true:\
:minpasswordlen=8:\

3. 네트워크 무결성

1) 목적: 네트워크 취약성을 이용하여 악용될 소지가 있는 파일과 설정 사항들을 점검한다.

2) 점검방법:
/etc/rc.conf
/etc/rc.conf의 내용을 수정하기 이전에 /etc/defaults/rc.conf 파일을 먼저 살펴 보아야 한다.
시스템에서 쉘 스크립트를 실행 시키는 순서는 /etc/defaults/rc.conf의 내용을 먼저 읽어 들인 다음 /etc/rc.conf 파일의 내용을 읽어 들인다. /etc/rc.conf파일의 내용은 쉘 스크립트 실행여부, 네트워크 설정 등이 포함되어 있다.
/etc/systel.conf
커널 파라멘터의 값을 확인하여 네트워크 파라미터의 설정 값에 취약점이 있는지 점검한다.

3) 설정 방법
/etc/rc.conf
다음과 같이 설정 값을 변경한다



/etc/sysctl.conf
네트워크 파라미터의 값을 수정한 후 시스템을 reboot 한다.



[ Reference ]

- FreeBSD handbook(보안 부분)
http://www.freebsd.org/doc/en_US.ISO8859-/books/handbook/security.html

- FreeBSD Security How-To

http://www.windowsecurity.com/whitepaper/unix_security/FreeBSD_Security_HowTo.html

[저자] 안랩코코넛 SM사업부 권혁철 대리

[출처] 안랩코코넛 SECU-LETTER 4월호

'Security' 카테고리의 다른 글

Tomcat 보안 개요  (0) 2009.03.12
centos5 geoip patch하기  (0) 2008.07.30
MySQL DB 보안(1)  (0) 2007.06.11
SSH 보안설정  (0) 2007.06.11
[솔라리스 강좌] 설정 변경과 시스템 보안 설정  (0) 2006.06.11
, .

SSH 보안설정

Security 2007. 6. 11. 10:00

SSH 보안 강화하기
대부분의 리눅스 시스템 관리자들은 운영체제 설치 후 프로그램의 설정 파일을 수정하지 않고 기본값을 그대로 사용하는 경우가 많습니다. 설정파일이 어느 정도 보안 설정 후 배포되기도 하지만, 많은 설정 파일들은 그렇게 되어 있지 않으며 배포본에 따라서 다를 수도 있기 때문에 자주 사용하는 프로그램의 설정 파일을 확인하고 보안에 취약할 경우 수정을 해 주어야 합니다.

이번 호에서는 SSH 설정파일에 대하여 보안을 강화하는 방법을 알아 보도록 하겠습니다.

배포본은 RedHat 리눅스를 기본으로 하며 RedHat을 제외한 다른 배포본의 경우 다를 수 있습니다. RedHat 제외한 배포본의 경우 배포 홈페이지를 참조하시기 바랍니다.

SSH 설정 파일 위치: /etc/ssh/sshd_config (배포 버전에 따라 다를 수 있습니다.)

Root 로그인 차단
공격자 또는 내부 사용자가 root로 접근 가능할 경우 암호 무작위 입력으로 권한을 획득할 수 있습니다. 따라서, root 로그인을 차단, 일반 계정을 통하여 접근토록 하여야 합니다.
Root 로그인 허용이 yes로 되어 있으면 no로 수정합니다.

PermitRootLogin no

SSH2 사용하기
대부분의 ssh 취약성은 ssh2 보다는 ssh1과 관련된 것들이 많이 있습니다. 공격자로부터 최소한의 안전을 확보하기 위하여 ssh2 사용을 권장합니다.

Protocol 2

권한 분리
권한 분리는 잠재적인 보안 위험을 제한 하는데 여러분에게 도움을 줄 수 있습니다. 이 값은 기본값이 적용으로 되어 있으나, 적용되어 있지 않다면 활성화 시켜 주어야 합니다. 권한 분리는 데몬을 두 개의 파트로 구분하여 root로 실행되는 부분과 상위 권한 없이 chroot로 고립된 형태로 동작을 하게 됩니다. 예를 들어, 셸 명령을 실행하는 동안 버퍼 오버플로 공격이 발생할 경우 권한이 없는 프로세스 내에서 제어되므로 잠재적 보안 위험이 제한됩니다.

UsePrivilegeSeparation yes

Forwarding 막기
만약, TCP 포트와 X11에 대한 포워드 기능을 사용하지 않는다면 비활성화 하시기 바랍니다.

AllowTcpForwarding no
X11Forwarding no


호스트 기반 인증 차단
Rhosts 사용이나 hosts.equiv를 통한 인증을 차단합니다. Rhost는 보안상 취약함으로
비활성화 합니다.

IgnoreRhosts yes
HostbasedAuthentication no
RhostsRSAAuthentication no


[ Reference ]
http://docs.hp.com/ko/5991-6494/ch08s06.html
http://www.openssh.com

[저자] 안랩코코넛 SM사업부 권혁철 대리

[출처] 안랩코코넛 SECU-LETTER 6월호

'Security' 카테고리의 다른 글

Tomcat 보안 개요  (0) 2009.03.12
centos5 geoip patch하기  (0) 2008.07.30
MySQL DB 보안(1)  (0) 2007.06.11
FreeBSD 보안 하드닝 Tip  (0) 2007.06.11
[솔라리스 강좌] 설정 변경과 시스템 보안 설정  (0) 2006.06.11
, .