Postgre SQL 설치
DB 설치를 한다. 여기에서는 Postgre SQL을 기준으로 한다. yum
으로 postgresql
패키지와 확장 패키지들을 설치한다.
# yum --disablerepo=\* --enablerepo=c7-media install postgresql postgresql-server postgresql-contrib postgresql-devel
/usr/bin
디렉터리에 가면 Postgre SQL 관련 파일들이 생성되어 있을 것이다. 이 중 postgresql-setup
파일을 실행하여 데이터베이스를 초기 설정한다.
# ./postgresql-setup initdb
데몬을 실행시킨다. 재부팅 시 자동 실행되게 하려면 같은 명령을 /etc/rc.local
파일에 추가한다.
# systemctl start postgresql.service
설치 후 Postgre SQL은 서버의 보안을 위해 root 계정을 요구하지 않고 자신만의 별도의 계정을 서버에 추가시킨다. /etc/passwd
파일을 vi로 열면 postgres 라는 이름의 계정이 추가된 것을 확인할 수 있다.
이 계정에 대한 암호를 설정한다. 암호 설정은 passwd 명령으로 한다.
# passwd postgres_
데이터베이스에 로그인 할 때 인증 방식을 수정한다.
vi
로 /var/lib/pgsql/data/pg_hba.conf
또는 이에 준하는 경로의 pg_hba.conf
를 열고 host all all 127.0.0.1/32 ident이라고 된 것을 host all all 127.0.0.1/32 md5으로 고쳐준다. 하단의 IPv6 부분도 마찬가지로 ident으로 된 부분을 md5으로 고쳐준다. 이렇게 하지 않으면 perl에서 데이터베이스에 로그인 할 때 "FATAL: Ident authentication failed for user '...'" 류의 오류를 볼 수 있기 때문이다.
수정 후 저장했으면 Postgres SQL 데몬을 다시 시작한다.
# systemctl restart postgresql.service
Postgre SQL 사용자 조회/생성/삭제
Postgre SQL을 사용하기 위해 root 계정을 로그아웃한다. ID는 postgres, 암호는 passwd
에서 설정한 암호로 로그인하면 다른 형태의 shell이 뜨는 것을 확인할 수 있다.
psql을 실행한다. SQL을 입력할 수 있는 또 다른 형태의 shell이 뜰 것이다.
$ psql_
먼저 \du
지시어를 사용해 데이터베이스 사용자를 조회해 본다. 기본 사용자로 모든 권한을 소유한 postgres
가 있을 것이다. 여기에 testuser
라는 사용자를 추가해 본다. 단, 명령의 끝에는 항상 세미콜론(;)이 붙어야 한다.
\du
CREATE USER testuser;
\du_
\password
지시어를 사용해 이 계정에 암호를 부여한다.
\password testuser
다음은 권한 부여이다. 이와 관련된 구문은 CREATE ROLE
(https://www.postgresql.org/docs/8.1/static/sql-createrole.html), ALTER ROLE
(https://www.postgresql.org/docs/8.1/static/sql-alterrole.html), DROP ROLE
(https://www.postgresql.org/docs/8.1/static/sql-droprole.html)의 3가지이며, 이미 생성된 사용자의 권한을 변경하기 위해서는 ALTER ROLE
을 사용한다.
이 사용자에게 DB를 생성할 수 있는 권한을 부여하려면 다음과 같이 한다.
ALTER ROLE testuser CREATEDB;
\du
지시어로 다음과 같이 Create DB가 추가되었음을 확인할 수 있다.
사용자를 삭제하는 구문은 DROP USER
이다.
DROP USER testuser;
참고로 Postgre SQL에서는 사용자 생성/수정/삭제와 권한 생성/수정/삭제가 동일하게 작동된다. 즉,
CREATE USER = CREATE ROLE
CREATE USER: https://www.postgresql.org/docs/8.1/static/sql-createuser.html
CREATE ROLE: https://www.postgresql.org/docs/8.1/static/sql-createrole.htmlALTER USER = ALTER ROLE
ALTER USER: https://www.postgresql.org/docs/8.1/static/sql-alteruser.html
ALTER ROLE: https://www.postgresql.org/docs/8.1/static/sql-alterrole.htmlDROP USER = DROP ROLE
DROP USER: https://www.postgresql.org/docs/8.1/static/sql-dropuser.html
DROP ROLE: https://www.postgresql.org/docs/8.1/static/sql-droprole.html
이다.
Postgre SQL 데이터베이스 조회/생성/삭제
데이터베이스는 보통의 데이터 조작 언어와 똑같다. CREATE DATABASE
, ALTER DATABASE
, DROP DATABASE
의 3가지가 있으며 각 레퍼런스는 다음과 같다.
- CREATE DATABASE: https://www.postgresql.org/docs/8.1/static/sql-createdatabase.html
- ALTER DATABASE: https://www.postgresql.org/docs/8.1/static/sql-alterdatabase.html
- DROP DATABASE: https://www.postgresql.org/docs/8.1/static/sql-dropdatabase.html
여기에서는 DB 생성만 해 보겠다.
CREATE DATABASE testdb01;
DB를 조회하는 방법은 다음과 같다.
SELECT * FROM pg_database;
Perl에 Postgre SQL 연동하기
인터페이스 설치
CentOS에서 Perl-PostgreSQL간 인터페이스의 패키지명은 perl-DBD-Pg
(대/소문자 주의)이다. yum으로 이를 설치한다.
# yum --disablerepo=\* --enablerepo=c7-media install perl-DBD-Pg
다음, Postgre SQL을 재시작한다.
# systemctl restart postgresql.service
Perl 실행
이제 Perl 소스로 DB에 접근해 본다.
#!/usr/bin/perl
use DBI;
use strict;
my $driver = "Pg";
my $database = "testdb01";
my $host="127.0.0.1";
my $connstr = "DBI:$driver:dbname=$database;host=$host";
my $userid = "testuser";
my $userpw = "(testuser의 암호)";
my $dbconn = DBI->connect($constr, $userid, $userpw, { RaiseError => 1 }) or die $DBI::errstr;
print "Content-type: text/html\n\n";
print <<EOHTML;
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>DB Test</title>
</head>
<body>
<p>Database Opened.</p>
<p>HT = $host, DB = $database, ID = $userid</p>
</body>
</html>
EOHTML
$dbconn->disconnect();
위 예시 코드를 /var/www/cgi-bin
디렉터리에 저장한다. 해당 파일에 chmod
명령으로 a+x 속성을 부여하고 lynx로 접속해본다. 아래와 같이 뜨면 정상이다.
# lynx http://127.0.0.1/cgi-bin/dbtest.cgi
그러나 거의 100% 오류가 뜰 것이다. HTTP 403 오류가 뜬다는 얘기다. 내부 서버 오류라고만 할 뿐, 다른 얘기는 나오지 않는다. 아파치에서는 작동중 발생하는 각종 메시지들에 대해 로그파일을 저장해 두고 있다. 특별히 설정을 건드린 것이 없다면, /var/log/httpd/error_log
파일에 저장되어 있다. 다음과 같이 Permission Denied 메시지가 뜰 것이다.
아파치가 DB 접속을 하지 못한다는 뜻이다. 이를 가능하게 하도록 터미널에서 다음 명령을 입력한다.
SELinux에서 아파치의 DB 접근 허용하기
# setsebool -P httpd_can_network_connect_db on
# systemctl restart httpd.service_
뭔가 잘 되지 않는다면 다음과 같이 해 본다.
# setenforce 0
# setsebool -P httpd_can_network_connect_db on
# systemctl restart httpd.service
# setenforce 1_
SELinux
는 보안 정책을 관리하는 일종의 도구이다. 데몬들이 할 수 있는 일과 할 수 없는 일에 제한을 주는 것이 가능한데, httpd와 관련해서는 데이터베이스 접속 권한을 끄는 것이 기본값으로 설정되어 있다. 이를 명시적으로 켜 두는 과정이다. 윈도우의 사용자 계정 컨트롤(UAC)에 비교할 수 있지만 더욱 정교한 설정이 가능하다.
SELinux
관련 주요 명령어는 다음과 같다.
- setenforce
SELinux
의 작동 상태를 전환한다.SELinux
의 작동 모드는 enforce(정상 작동), permissive(정책 위반해도 audit log만 남기고 계속 실행 가능), disable(비활성화)의 3가지가 있는데 0을 지정하면 permissive, 1을 지정하면 enforce가 된다. disable로 설정하고자 할 때는/etc/sysconfig/selinux
파일을 열어서SELINUX=enforcing
이라 된 것을SELINUX=disabled
로 고친 뒤 재부팅하면 되지만 보안상 권장되지 않는다.- sestatus
SELinux
의 현재 상태를 조회할 수 있다.- getsebool
- 데몬의 각 작동에 대해 허용 여부를 가져온다. 데몬이 가질 수 있는 작동에 대한 정의는
getsebool -a
를 실행하면 알 수 있다. - setsebool
- 데몬의 각 작동에 대해 허용 여부를 설정한다.
setsebool -P [daemon] on/off
로서 켜기/끄기를 지정할 수 있으며 [daemon]에 들어갈 값의 목록은getsebool -a
를 통해 확인한다.
여기까지 해서 CentOS 7 minimum install로부터 Apache
+Perl
+Postgre SQL
를 설치하고 연동시켜보았다. 다음에는 Apache
-PHP
-Maria DB
를 구성해보겠다.
'Operating System Theme > Unix/Linux' 카테고리의 다른 글
Perl에 HTTP, CGI 모듈 설치하기 (0) | 2018.07.09 |
---|---|
CentOS Minimal Intallation으로부터 서버 구축 방법 #5 (PHP 설정) (0) | 2017.08.18 |
CentOS Minimal Intallation으로부터 서버 구축 방법 #3 (Perl 설치 및 Apache 연동) (0) | 2017.07.22 |
CentOS Minimal Intallation으로부터 서버 구축 방법 #2 (Apache 설치와 부팅시 자동 실행 설정) (0) | 2017.07.22 |
CentOS Minimal Intallation으로부터 서버 구축 방법 #1 (장치 마운트, yum, lynx, wget 설치) (0) | 2017.07.19 |