우분투 환경에서  XE(XpressEngine)  설치하려면 사전에 필요한 패키지들이 몇 있습니다.


관련한 명령들만 간결하게 준비 정리해봅니다.



1)먼저 관리자용 사용자 id생성 (예 xeadmin),  그리고 원하는 유저를 admin그룹에 추가하면됨


#useradd xeadmin


2) 해당 관리자용 id를 sudo가능 사용자로 등록


#visudo

위 이용해 /etc/sudoers 파일에  다음 줄 추가(이미 넣어져 있을 수 있음)

#==================
%admin ALL=(ALL) ALL
#==================

 그리고 원하는 유저를 admin그룹에 추가.

#usermod -G admin  <userid>  



이제 부터는 앞서 만든 관리자아이디(xeadmin) 로 로그인 후 작업

3) apache2 설치

$sudo apt-get install apache2 

# 아래 모듈이 설치되지 않으면  XE DB 설정화면이 넘어가지 않은 현상 발생.
$sudo apt-get install libapache2-mod-auth-mysql

4) php5 설치

$sudo apt-get install php5
$sudo apt-get install libapache2-mod-php5
$sudo apt-get install php5-mysql

4-1) php5 용 GD 라이브러리 설치 (XE에서 이미지 변환용)
$ sudo apt-get install php5-gd

5) mysql 설치  (여기서  mysql root의 비밀번호 설정한다)
$ sudo apt-get install mysql-server




6) XE를 위한 mysql DATABASE 준비

$mysql -u root -p 


DB 생성

 

mysql> create database <db명> default character set utf8 default collate utf8_general_ci;


 User 생성및 권한 부여 

mysql> create USER '<유저id>'@'localhost' IDENTIFIED BY '<암호>';

mysql> GRANT ALL PRIVILEGES ON *.* TO '<유저id>'@'localhost' WITH GRANT OPTION;

mysql> use mysql

mysql> INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv) VALUES('localhost','<db명>','<유저id>','Y','Y','Y','Y','Y','Y');

mysql> FLUSH PRIVILEGES; 


http://www.xpressengine.com/download  에  최신 XECore.zip 파일 다운로드 후 압축해제

필요시 XECore 압축해제 경로에 권한 부여 

$chmod -R 777  xe


 /etc/apache2/sites-available/default   파일에서  DocumentRoot 에  XE 압축해제 경로 지정 
 
그리고 apahce2 재시작 

$sudo service apache2 restart


웹브라우져로 접속 후 XECore Setup 진행




    요즘은 리눅스에서도  다양한 파일전송수단이 있어서 FTP 를 사용하는 경우가 많이 줄어들기는 했는데, 웹서버를 운영하는 경우에는 FTP가 필요하더군요.


여기서는 vsftpd 를 이용해서 가상유저기반 FTP 서버를 구성하는 방법을 정리해보려고 합니다.

설치환경은 우분투 리눅스를 기준으로 합니다.



설치하기


vsftpd  데몬 설치 

$sudo apt-get install vsftpd


패스워드체크 모듈 설치 

$sudo apt-get install libpam-pwdfile



이제 관련 설정파일 생성 및 수정/추가 작업입니다.


아래 그림에서 번호 순서대로 진행합니다.


(설정파일들 관계도)



1) /etc/vsftpd.conf 설정파일 작성(수정)

$sudo vi /etc/vsftpd.conf


  vsftpd.conf 파일 하단에 아래의 내용으로 추가합니다.


#가상유저 사용가능하도록 하기

guest_enable=YES


#가상유저 로그인시 실제 유저 매핑

guest_username=vsftpuser


#가상유저의 사용자권한을 로컬유저의 권한과 동일하게

virtual_user_local_privs=YES


# user id를 매핑할 문자열,  local_root 에서 사용자 매핑에 사용할 문자열값을 지정합니다.

user_sub_token=$ID


# 사용자가 ftp용 홈디렉토리를 설정합니다.

local_root=/home/vsftpuser/$ID


# 유저의 가상루트 영역 제한 여부 

chroot_local_user=YES


#

chroot_list_enable=YES


# ftp통신내역 로깅하기 

log_ftp_protocol=YES


# 사용자 인증방법 설정

pam_service_name=vsftpd.pam.conf



2. pam 설정을 해야합니다.  

이는 passwd 파일을 이용해서 인증이 되도록 하기 위함입니다.

/etc/pam.d/vsftpd 파일을 vsftp.pam.conf로 복사합니다. 해당 파일을 수정합니다. 


$cd  /etc/pam.d

$sudo cp vsftpd vsftp.pam.conf

$sudo vi vsftp.pam.conf


아래 내용을 파일 상단에 삽입

auth sufficient pam_pwdfile.so pwdfile /etc/vsftpd/passwd

account required pam_permit.so



3. /etc/vsftpd/passwd 파일에 사용자(user1)추가 


$sudo mkdir /etc/vsftpd

$sudo htpasswd -c /etc/vsftpd/passwd user1



설정에 대한 상세한 도움말 링크

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


4. /etc/vsftpd/users/[사용자] 설정파일 만들기

$sudo mkdir /etc/vsftpd/users

$sudo vi /etc/vsftpd/users/user1


아래 내용을 파일에 추가

guest_username=vsftpuser




설정이 끝나면 서비스를 시작합니다.(데몬모드)


$sudo service vsftpd start


또는 어플리케이션모드 실행하기

$sudo /usr/sbin/vsftpd



문제가 있을경우 아래 로그확인 방법으로 진행 상황을 확인합니다.



vsftpd 실행상태를 로그로 확인합니다.


$sudo tail -f /var/log/vsftpd.log


인증 처리 로그를 확인합니다


$sudo tail -f /var/log/auth.log





이글은  Apache2 설치 후  기본적인 설정파일에 대한 설명을 합니다. 


  (리눅스 환경은 우분투를 기준으로하지만 다른 배포본들도 설치경로에 차이가 좀 있을 수 있고 아파치2 설정방식은 동일 합니다.)





1. 설치하기


우분투에서 아파치 설치는 간단합니다.


아래처럼 apt-get 을 이용해서 설치명령을 주면 주르륵 설치는 끝납니다.


$sudo apt-get install apache2

패키지 목록을 읽는 중입니다... 완료

의존성 트리를 만드는 중입니다

상태 정보를 읽는 중입니다... 완료

다음 패키지가 자동으로 설치되었지만 더 이상 필요하지 않습니다:

  linux-headers-3.2.0-29 linux-headers-3.2.0-29-generic-pae

이들을 지우려면 'apt-get autoremove'를 사용하십시오.

다음 패키지를 더 설치할 것입니다:

  apache2-mpm-worker apache2-utils apache2.2-bin apache2.2-common libapr1

  libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap

제안하는 패키지:

  apache2-doc apache2-suexec apache2-suexec-custom

다음 새 패키지를 설치할 것입니다:

  apache2 apache2-mpm-worker apache2-utils apache2.2-bin apache2.2-common

  libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap

0개 업그레이드, 9개 새로 설치, 0개 제거 및 88개 업그레이드 안 함.

1,833 k바이트 아카이브를 받아야 합니다.

이 작업 후 5,220 k바이트의 디스크 공간을 더 사용하게 됩니다.

계속 하시겠습니까 [Y/n]?y

.....  


디렉토리설치까지는 끝나고 이후 실제 Apache2를 원하는데로 구동하기 위한 설정이 필요합니다.


설치 후  /etc/apache2  디렉토리를 살펴보면 아래와 같은 파일들을 볼 수 있습니다.


총 5개의 디렉토리와 5개의 설정파일이 보입니다.



2. 설정파일 설명


구동시적용 되는 순서대로 파일을 설명합니다.


envvars : 환경변수 설정파일  

기본적으로 아파치는 구동이 될때  /etc/init.d/apache2  스크립트를 통해 데몬으로 띄워지게 됩니다.

이 스크립트에서 envars 파일을 환경 변수 적용파일로 사용하게 됩니다.  apache2에 적용이 필요한 환경변수 값이 있다면 envvars 파일에 적용하면됩니다.


apache2.conf : Apache2 설정 파일

아파치2가 실행될때 가장먼저 읽어드리게 되는 파일이며 여기에서 다른 설정파일들을 Include 명령으로 (아래예 처럼)포함하고 있습니다.


# ------------------ 다른 설정 파일들을  Include 명령으로 포함하고 있음 ----

# Include module configuration:

Include mods-enabled/*.load

Include mods-enabled/*.conf


# Include all the user configurations:

Include httpd.conf


# Include ports listing

Include ports.conf

#...


# Include generic snippets of statements

Include conf.d/


# Include the virtual host configurations:

Include sites-enabled/


 즉, 모든 설정은 apache2.conf 파일을 통해서 이루어지게 되나. 설정관리를 좀더 편리하게 하기위해 각각 별도의 파일이나 디렉토리에 나누어 저장하고 이를 실행시점에 Include 로 하나의 파일로 포함되게 하는 것입니다.  그래서 보통은 apache2.conf 파일을 직접수정하기 보다 각각의 설정 내용에 맞는 파일을 찾아 수정하게 됩니다.


mods-enabled/ :  이 서브디렉토리 경로는 Apache2 가 구동될때 사용할 추가 모듈에 대한 정의를 저장하게 되는 곳입니다.   *.load 파일에서는 모듈을 읽어드리는 LoadModule 명령을 포함하고 있게 되고 *.conf 파일에서는 해당 모듈에 대한 설정 정보를 포함하고 있습니다.


mods-available/ : 이 서브디렉토리는  Apahce2를 처음 설치를 하게 되면 기본적으로 사용가능한 모듈들을 포함하고 있습니다.  여기한 포함된 모듈중 실제사용할 모듈은 mods-enabled/ 경로에서 링크를 하고 있게 됩니다.



  관리자는 사용을 원하는 모듈에 대해서는 a2enmod 명령을 이용해서 mods-enabled/ 경로에 링크를 만들어주면 됩니다.


$a2enmod <모듈명>



아래의 예는  alias 모듈을 활성화 하는 예입니다.

아래 처럼 ln 명령으로 심볼릭 링크를 만들어 주어도 결과는 같습니다.


$ln -s /etc/apache2/mods-available/alias.load /etc/apache2/mods-enabled/

$ln -s /etc/apache2/mods-available/alias.conf /etc/apache2/mods-enabled/


특정 모듈을 비활성화 하려면  a2dismod  명령을 사용합니다.

$a2dismod <모듈명>




httpd.conf : 아파치 사용자 임의 설정들을 넣는 용도로 사용합니다.

  Apache2처음 설치시 이파일에는 아무내용도 없습니다. 0바이트 이죠.   모듈설정이나 가상도메인들은 별개의 디렉토리에 별도 파일로 작성하게 되기때문에,  이런용도외에  특별히 추가할 사항들에 대해서만 httpd.conf에 추가하면 적절할것 같습니다.


ports.conf : 리스닝 포트를 설정합니다.

처음에는 아래내용이 채워져 있습니다.


#도메인 네임기반 가상호스트를 설정하는데 80포트에 대해서 한다는 의미

NameVirtualHost *:80


#80 포트로 리스닝을 합니다.

Listen 80


#mod_ssl.c 모듈이 있을때는 443 포트로 리스닝을 합니다.

<IfModule mod_ssl.c>

    # If you add NameVirtualHost *:443 here, you will also have to change

    # the VirtualHost statement in /etc/apache2/sites-available/default-ssl

    # to <VirtualHost *:443>

    # Server Name Indication for SSL named virtual hosts is currently not

    # supported by MSIE on Windows XP.

    Listen 443

</IfModule>


#  mod_gnutls 가 있을때는 443포트로 리스닝을 합니다.

<IfModule mod_gnutls.c>

    Listen 443

</IfModule>




sites-available/: 하나의 Apache2 서버에 여러 (가상)사이트를 운영하는 경우 여기에 해당 사이트 별로 추가를 합니다.  사이트는 도메인네임기반(Name Based)일수도, 포트기반, 또는 IP기반으로도 할 수 있습니다.


sites-enabled/: 실제활성화할 사이트파일에 대한 링크를 생성하는경로 입니다. sites-available/ 디렉토리에서 대상사이트 파일을 생성한뒤 a2ensite  명령을 이용해서 활성화(심볼릭링크 생성)합니다.  반대로 비활성화를 하려면 a2dissite 명령을 사용합니다. 


예를 들어  www.funnylog.com  이란 사이트를 운영하고자 한다면 다음과 같이 됩니다.



먼저 default 라는 이미 있는 파일을 템플릿으로 하여 www.funnylog.kr이라는 사이트용 파일을 만듭니다.


/etc/apache2/sites-available$ cp default www.funnylog.kr


그리고 아래 파일처럼 수정합니다.  앞서 ports.conf 파일에서 NameVirtualHost *:80 으로 도메인네임기반 가상호스팅이 설정된 상태이므로  각 사이트 설정파일에  ServerName 에 따라서 홈페이지 경로가 적용되게 됩니다.


<VirtualHost *:80>

        ServerAdmin webmaster@funnylog.kr

#가상 호스트 도메인명 

        ServerName www.funnylog.kr

        ServerAlias *.funnylog.kr


#홈페이지 경로 index.html 파일이 저장된곳 

        DocumentRoot /var/sites/funnylog.kr

        <Directory />

                Options FollowSymLinks

                AllowOverride None

        </Directory>

        <Directory /var/sites/funnylog.kr/>

                Options Indexes FollowSymLinks MultiViews

                AllowOverride None

                Order allow,deny

                allow from all

        </Directory>


        ErrorLog ${APACHE_LOG_DIR}/error_weheo.log


        # Possible values include: debug, info, notice, warn, error, crit,

        # alert, emerg.

        LogLevel warn


        CustomLog ${APACHE_LOG_DIR}/access_weheo.log combined


</VirtualHost>


만들어진 사이트를 a2ensite 명령어로 활성화합니다. (앞서 모듈과 같은 방식입니다.)


/etc/apache2/sites-available$ a2ensite  www.funnylog.kr


비활성화를 할때는 a2dissite 명령어를 사용합니다. 


/etc/apache2/sites-available$ a2dissite  www.funnylog.kr


Apache2 서비스에 설정파일을 리로드 하도록 합니다.


/etc/apache2/sites-available$ sudo service apache2 reload



   다끝났으면  해당 사이트 경로(/var/sites/funnylog.kr)에 보여질 웹페이지를 만들고 적용이 끝났으면 웹브라우저로 해당 사이트에 접속하여 원하는 페이지가 보이는지 확인합니다.


마치겠습니다.




지난 번 강좌에서는 rsync를 이용하여 자동 백업 방법을 정리해 보았습니다.



이번강좌에서는 Dynamic DNS 구성 이를 이용한 원격접속입니다. 

환경은 우분투 리눅스 환경입니다. (강좌1 참고)


이번글 순서는 크게  


 - www.dnsdynamic.org 에서 무료 도메인을 받고,  ddclient로 공인IP자동 반영하기

 - 공유기 포트포워딩 설정하기


요약 될 수 있습니다.





1. Dynamic DNS 개요


 가정집에서 사용하는 인터넷 회선의 경우 보통 아파트광랜이거나 단독주택의 경우 VDSL(ADSL) 같은 비교적 월요금이 저렴한 서비스를 사용하고 있습니다. 소규모 사무실인 경우에도 비슷할 것 이라고 봅니다.


  이러한 환경에서 구축한 서버를 외부에서 접속을 하고자 하는 경우에는 현재 부여된 공인IP를 알아내야 합니다. 그런데 이때  대부분의 경우  인터넷 서비스 공급자로부터 동적 공인IP를 받게 됩니다.  


   즉 내가 사용하고 있는 회선을 위해서 IP를 고정해주지 않습니다. (일부 업체에서 부가 이용료를 내면 고정IP서비스를하기도 합니다).  그래서 보통 접속 중인 공유기를 다시 시작하는 경우, 또는 여러가지 이유로 회선연결이 순간  단절되었다 다시 연결되는 경우에는 IP가 바뀌어 있게 됩니다.   따라서 외부에서 이렇게 수시로 변경되는 IP를 알아내서 접속하기에는 여러모로 불편합니다. 


그래서 이 경우 활용할 수 있는 것이 Dynamic DNS 입니다.


   본래 DNS(Domain Name System)은 IP를 대신해 도메인 네임을 이용하여 컴퓨터서비스(자원_에 접속할 수 있도록 하는 시스템입니다.  예를 들어 PC에서 http://funnylog.kr(도메인네임) 를  웹브라우져에 입력해서  접속을 시도하게 되면 접속과정에서 DNS 서버로 부터 도메인에 해당하는 IP를 넘겨받아 접속하게 됩니다. 그런데 이러한 질의 과정은 하나의 웹페이지를 접속한다고 했을때 최소 수차례에서 수십차례까지 요청(각 이미지, 스크립트 마다 매번)을 하게 됩니다.  따라서  DNS서버까지의 질의 과정을 최소화하기 캐쉬를 하게 되는데  각각의 도메인 네임은 저마다의 캐쉬시간을 지정하게 됩니다. 이를 TTL(Time To Live)라 하고 통상 24시간(86,400초) 정도를 지정하게 됩니다.  즉 한번 질의를 하고 나면  이시간 동안은 재질의가 필요없다는 뜻입니다. 


   따라서 이사이에  도메인네임과 IP매핑이 바뀌게 되면 변경이 반영되지 못할 수 있는데, Dynamic DNS는 이 시간을 최소로(3~5분정도) 줄인 것을 말합니다.  그렇게 해서  수시로 변경 될수있는 고정IP에 대해서   캐쉬시간을  최소로 줄여주거나  아예 매번 서버에 확인을 하도록 하여 IP가 바뀌더라도 금세 반영이 되도록 한것이죠. 이를 이용해서 가정용회선과 같은 고정IP가 아닌곳에도 사용하게 되는것입니다.  (다만 그만큼 서버에 대한 부담은 커지게 됩니다.)



2. Dynamic DNS적용하기 


그럼 Dynamic DNS (이하 DDNS)를 어떻게 적용할 수 있을까요?


 개인이 DDNS를 이용하려면 해당 서버를 제공하는  업체를 이용하면 됩니다. 유명한 업체로 www.dyndns.org가 있는데. 최근에는 유료로(.com) 전환되면서 더이상 무료로는 사용할 수 가 없게 되었습니다. (다만 기존에 등록된 도메인네임에 대해서는 계속 사용 가능합니다.)


지금 현재 시점에 dyndns.org 대신해서 사용할 만한  서비스로는 www.dnsdynamic.org 이 있습니다.


적용 순서

2.1 www.dnsdynamic.org 가입

- 가입은 이메일 주소와 사용할 비밀번호만 입력하면 됩니다.

- 그리고 입력한 이메일로 수신한 confirm메일을 확인하면 로그인이 가능합니다.





2.2 사용할 도메인 네임추가 

- 가입이 끝나고 나면 해당 이메일과 비밀번호로 로그인을 한뒤 [Add a new domain]으로 원하는 도메인을 추가합니다.



위 예에서는 fun2.dnsd.me  라는 도메인네임을 생성한 경우 입니다.


웹상에서 이후에도 현재 접속중인 회선의 공인IP 를 보여주고 설정하도록 해줍니다.  


하지만 이렇게 매번 공인IP 가 바뀔때마다 서버에 접속하여 변경을 하는 것은 번거럽습니다. 그래서 이를 대신해주는 프로그램  ddclient를 사용하면 편리합니다.


2.3 Dynamic DNS 자동갱신 스크립트 적용하기


ddclient를 이용하면 일정시간단위로 외부에서 바라보는 현재 공인 IP를 찾아서 업데이트를 할 수 있습니다.


그럼 우분투환경에서 적용해보겠습니다.


먼저 설치방법입니다.



$sudo apt-get  install ddclient


  

  이렇게 하면 ddclient를 자동으로 내려받아 설치하게 되고 설치과정에서 설정정보를 묻게 되는데

차례대로 입력을 해주거나,  빈칸으로 넘어간뒤(또는 ESC) 수동으로 설정파일을 만들어주거나 수정하면 됩니다.

설정 파일은  /etc/ddclient.conf 파일을 수정해서 다음과 같이 설정하면 됩니다.



# /etc/ddclient.conf

daemon=60           # 갱신 주기 60초

protocol=dyndns2    #  통신 방식 (고정)

use=web, web=myip.dnsdynamic.com     # 나의 공인 IP 알아내기  (고정)

server=www.dnsdynamic.org    #   서비스 업체 서버 (고정)

login=메일주소        #  로그인 ID

password='qlalfqjsgh'                # 비밀번호

fun2.dnsd.me                    #반영할 내 서버의 도메인네임


/etc/ddclient.conf 파일의 수정이 끝났으면  ddclient 를 다시 시작해주어야 합니다.



$sudo service restart ddclient



이렇게 한뒤   www.dnsdynamic.org  접속해서 임의이 다른 IP로 적용한뒤  ddclient.conf정한  갱신시간이 흐른뒤  실제 공인 IP로 맞게 바뀌는 지 확인을 합니다. 


 제대로 바뀐다면 정상설치된 것 입니다.


만일 동작이 안되는것 같으면 아래 명령순서대로 다시 시작해보고 


$sudo service ddclient stop

$pgrep -f ddclient   # 실행중인 pid 가 있으면

$sudo pkill ddclient     #종료

$sudo rm /var/cache/ddclient/ddclient.cache   #캐쉬제거

$sudo service ddclient start 


그래도 안되면  ddclient 종료 후  아래 명령으로 실행해서 



$sudo ddclient -daemon=0 -noquiet -debug -verbose



어떻게 동작하는지 세부적으로 확인 합니다.


여기까지 마쳤으면  나만의 도메인네임을 갖게 된것입니다. 



   이렇게 설정한  해당 도메인네임으로 특정 서비스를 사용하려면  실제 외부에 노출된 공유기에서 포트포워딩 설정을 해주어야 합니다.


   외부에서 공인IP로 접속을 시도하더라도 내부에 있는 서버는 이를 알 수 없기 때문입니다.  공유기(또는 라우터)에서 적절한 포워딩을 해주어야 합니다.


3. 공유기에서 포트포워딩 설정 하기


   여기에서는  현재 제가 사용중인 ipTime 공유기를 가지고 설명하겠습니다.  대부분의 다른 공유기들도 포트포워딩을 지원하고 있으며 설정방법역시 유사하기때문에 이글과 공유기 도움말을 참고하시면 충분히 설정이가능할것입니다.


3.1  서비스 포트 알기 

  서비스 포트라는 것은 외부에서 내부서버로 접속하는 프로그램이 사용하는 통신 포트를 말합니다.

  

 일반적으로 서비스 별로 사전에 약속된 포트 번호가 있고, 경우에 따라서는 이를 변경할 수 가 있습니다.


통상 다음과 같은 예를 볼 수 있습니다.


HTTP  80

SSH 22

TELNET  23


3.2 공유기에 포트포워딩 추가


그럼 공유기에 적용해보겠습니다.  아래 그림을 참고하세요


공유기설정하는 웹으로 접속합니다. (보통 192.168.1.1 일겁니다.)


접속을 하면 공유기 메뉴에서 고급설정에 포트포워딩이라고 있습니다.


클릭하면 아래 그림과 같은 화면에 나옵니다. 


여기에서는 SSH 22번포트를 적용하는 예 입니다.  


규칙이름 : 어떤 용도 명인지 넣습니다.

내부IP주소 : 해당 포트 연결시도시 넘겨받을 내부서버 ip입니다.

프토토콜 : SSH는 TCP 접속입니다.

외부포트 :  외부에서 SSH 접속시 사용할 포트 입니다. 

내부포트 : 내부 서버가 SSH용으로 사용하고 있는 포트 번호 입니다.


              

이렇게 입력이 끝나면 [추가]버튼을 누르고 저장하면 됩니다.


반영되었는지 확인을 하려면  


SSH 클라이언트 (Putty)에서  앞서 정한  Dynamic 도메인네임(예 fun2.dnsd.me)로 접속하면 됩니다.                          




이렇게 해서 접속이 되면 모든 적용이 완료 되었습니다.


마치겠습니다.



지난 번 강좌에서는 (우분투) 리눅스의  SAMBA를 이용하여 공유폴더 환경을 만들었습니다. 




이번에는 두번째 강좌인 rsync 백업 입니다.


  저장공간을 만들었으면 그 다음 우선적으로 할일을 백업입니다.  (단순 개인적인 용도로 영화파일이나 음악파일정도 보관하는 용도라면 백업에 대한 부담이 덜하겠지만,  중요한파일도 같이 보관하거나, 여럿이 사용할 파일 서버라면 백업은 필수 입니다.  


 컴퓨터로 자료를 보관하는 입장이라면 , 일단 기본적으로 저장매체는 믿지 마십시오, 언제든 파괴될 수 있고, 장애를 일으킬 수 있습니다. 저장매체가  무엇(HDD, SSD, CD, DVD, 테이프 등) 이든 말입니다. 믿을 수 있는것은 이중화 뿐입니다.




위 그림에서 보면 1~3 가지 정도로 자동백업 상황을 고려 해볼 수 있습니다. 자료의 중요도에 따라 백업은 이중, 삼중으로 되어야 하고, 필요시에는 원격지 다른장소에 구성하여 서버의 장애는 물론, 화재나, 해킹, 지진등에 도 대비를 해야 겠죠.  심지어 국가를 넘어서 자료를 백업하기도 합니다. 사실 개인도 그러한 구성도 얼마든지 가능합니다.


어째든 최소한 다른미디어에 백업하는 정도라도 구성하기를 권장합니다.


여기서 다루게될 백업(동기화)도구인 rsync 는 위 그림에서나오는 모든 경우에 대해 적용이 가능합니다.


 rsync 는 Unix-like 환경을 유틸리티로  한곳의 파일이나 디렉토리를 다른 곳에 동일하게 동기화 할 수 있도록 합니다.  처음 발표된건 1996년도입니다. 당시는 지금과 같은 네트워크 대역폭이 넓지 않은 상태인 만큼, 네트워크를 통한 파일 전송을 최소화 하는것이 중요했을 것입니다.(물론 지금도 그렇지만) 그래서 delta 인코딩이라는 기술로 변경내용만 빠르게  추려내어  전송량을 최소화 하도록 하였습니다. 이렇게 해서 잘만들어진 rsync는  지금도 유용하고 편리한 백업/미러링 도구입니다.


 rsync는 필수 유틸리티 이기 때문에 대부분의 유닉스 시스템(맥북에도)을 설치하게 되면 기본적으로 설치되어있어 바로 사용이 가능합니다. 그리고 무료이구요.


그럼 rsync   기본 사용법입니다.


rsync [OPTION]...  원본경로   사본생성경로

rsync [OPTION]... 원본경로    USER@호스트:사본생성경로

rsync [OPTION]...  USER@호스트:원본경로    사본생성경로     


rsync사용법은 파일 복사 명령어와 비슷합니다.  다만 같은 서버내에서는 물론 네트워크를 이용한 서버간에도 복사 동기화가 가능합니다.  이때는 접속 USER ID와 호스트 명(IP or DOMAIN NAME)이 들어가게 됩니다.



그럼 실제 예를 보겠습니다.


1) 먼저 동일 서버에서 디렉토리간 동기화 방법입니다.  


$rsync -avz /home/user1/one   /home/user1/two



옵션(-avz) 설명


 - a : archive mode동작지시,  -rlptgoD 라는 여러개의 옵션을 -a로 표현한것입니다.  이것은 (-r)지정된 원본디렉토리 이하의 모든 디렉토리와 파일, 심볼릭 링크(-l), 장치파일(-D)까지 모두 사본생성경로로 원래 권한(-p), 시간(-t),그룹(-g), 소유자(-o) 권한을 유지한채 복사하란 뜻입니다.  

즉, 아래와 같다고 보면 됩니다.

rsync -r -l -p -t -g -o -D

-v : verbose 실행과정 내용을 가능한 상세히 보여 달라는 뜻입니다.

-z : 전송데이터 량을 줄이기 위해 전송중 압축을 하라는 내용입니다. 최종 복사된 파일이 압축되는 것은 아닙니다.


이렇게 해서 실행하는 예를 보면 

 

$ ls -l one

합계 4

-rw-rw-r-- 1 user1 user1 10  2  2 19:17 test01.txt


$rsync -avz /home/user1/one   /home/user1/two

sending incremental file list

one/

one/test01.txt


sent 128 bytes  received 35 bytes  326.00 bytes/sec

total size is 10  speedup is 0.06


$ ls -l two

합계 4

drwxrwxr-x 2 user1 user1 4096  2월  2 19:17 one


   one 디렉토리 통째로 two안으로 들어간 것을 볼 수 있습니다. 테스트 상황에서는 파일이 한개(test01.txt)만 있어서 금방 끝납니다. 


2) 다음은  다른 서버로 부터 동기화 하는 예 입니다.


 사실 rsync에서  리모트로 부터 파일을 전송하는 방법에는 크게 2가지가 있습니다. 


- rsync 데몬을 이용하는 방법  (HOSTIP::/path 형식사용 또는  rsync:://  형식사용 )

(또는  rsync 데몬을 이용하되 ssh 컨넥션 이용하는 방법)


- 리모트 쉘 ( ssh,  rsh )  를 이용하는 방법   (  HOSTIP:/path  형식사용)


  rsync 데몬을 명령줄에서의 두가지 방법차이는 콜론(:) 개수 차이 입니다. 콜론 개수에 따라 rsync는 리모트 쉘을 이용할지 리모트 rsync 데몬을 이용할지를 결정합니다. 


  첫번째 원격 접근 방법인 rsync데몬을 이용하게 되면 대상 호스트에 inetd (873포트) 에 설정을 하여 항상 데몬이 뜰 수 있도록  해주어야 하며 기본적으로 전송간 암호화는 되지 않습니다. (여기에 ssh 컨넥션을 이용하는 방법을 추가해서 암호화가 되도록 해줄 수 도 있긴 합니다.)  


 두번째 원격접근 방법인 리모트쉘을 이용하는 방법을 사용하게 되면 통상 ssh (22번포트)를 사용하게 되고 더불어 자동으로 암호화된 세션안에서 통신을 하게 됩니다. 별도로 데몬 설정도 불필요합니다.


여기에서는 두번째 방법인 리모트쉘을 이용하는 방법을 사용하게 될 것 입니다.


  리모트쉘(ssh) 를 이용하는 전제는 ssh 패키지가 설치 되어있어야합니다. 만일 설치전이라면 ssh부터 설치하시기 바랍니다. (리모트,로컬 양쪽에 설치 되어있어야 합니다.)


$sudo apt-get install ssh



그럼 준비가 되었으면 rsync 를 이용한 리모트 원본을 동기화예를 보겠습니다.


$rsync -avz user2@192.168.1.51:/home/user2/three two


  51번 호스트의 /home/user2/three 원본 경로전체를 two 로 동기화 한다는 뜻입니다.  이때 51번 호스트로 접속할때  사용자는 user2입니다.  콜론이 한개(:)이기때문에 ssh접속을 하게 됩니다.


그럼 실행해 봅니다.

$rsync -avz user2@192.168.1.51:/home/user2/three two

user2@192.168.1.51's password: 

receiving incremental file list

three/

three/test02.txt


sent 34 bytes  received 141 bytes  50.00 bytes/sec

total size is 19  speedup is 0.11


$ls -l two

합계 8

drwxrwxr-x 2 user1 user1 4096  2월  2 19:17 one

drwxr-xr-x 2 user1 user1 4096  2월  2 19:56 three


51번 호스트의 three디렉토리 통째로 two로 동기화(복사) 됩니다.


 파일서버를 개인적인 용도로 쓰고 별도의 리모트 서버 구성을 하지 않는다면 1)번의 디렉토리간 동기화방법을 사용하면 됩니다.



정기적 백업의 자동화


  rsync를 이용하면 앞서 설명한것처럼 간편하게 명령 한줄로 (동기화)백업을 해낼 수 있습니다만.  이왕이면 정기적을 자동 백업을 해줄 수 있다면 더욱 좋을 것 입니다.


 리눅스와 같은 (Unix-like) OS에서는 cron 이라는 주기적 작업을 쉽게 설정할 수 있는 도구가 있습니다. 이를 이용하면 rsync를 자동화 백업이 가능해 집니다.


cron 의 실행하는 스케쥴표는 crontab  명령으로 작성할 수 있습니다.


실행 명령 입니다.


$crontab -e


아마도 처음 crontab을 실행한다면 어떤 에디터를 사용할지 물어 볼겁니다. 익숙한 에디터를 선택하시면 됩니다.  그러면  crontab은 하나의 설정파일을 열어 줍니다.


해당 파일에 작업 command 를 추가 해주면 되는 데 형식은 다음과 같습니다.


#분 시 일 달 요일  command

#30 1 2 3 *   rsync ...  # 3월 2일 1시 30분에  rsync ...를 실행한다. (특정일 실행)

#10 2 * * 1  rsync ...     #  매주 첫날 2시 10분에 rsync...를 실행한다. (주 단위 실행)

#0 3 *  * *   rsync ...    # 매일 3시 정각에 rsync... 를 실행한다.  (매일 실행)


즉 위처럼 원하는 스케쥴에 rsync 실행줄을 넣어 주면 되는 겁니다.   (맨앞 # 코멘트 표시는 제거해야죠 ^^)


여기에 좀더 세련된 관리 방법을 넣어 보겠습니다.


7일 단위 증분 백업하면서 동기화하기


위 말이좀 헷갈리죠?


  이 말뜻은  매일 동기화를 해서 원본과 맞추되.  만약에 특정 변경된 파일이 문제가 있어 복원 필요한 경우 해당 파일을 적어도 일주일 전까지는 되돌릴 수 있도록 따로 변경분만 별도 백업 한다는 뜻입니다.


어떻게?


--backup   이란 옵션을 사용하면 됩니다.

 

 이 옵션을 사용하게 되면 원본에 동기화를 할때 변경이 발생해서 덮어쓰이게 되는 경우 이전파일을 다른 이름으로 바꾸거나(--suffix 옵션)  다른 디렉토리로(--backup-dir)로 옮겨 놓을 수 있도록 하는 명령 입니다.


즉, 바뀌게 되는 파일만 또 다른 공간으로 살려두게 되는 것이죠. 


그런데 이 옵션만으로는 좀 세련되게 하기가 안되므로 간단히 스크립트를 만들고 이 스크립트를 실행하는 명령을  crontab 으로 등록하겠습니다.


아래 스크립트입니다.   http://rsync.samba.org/examples.html  있는 예제를 좀더 간단하게 바꾸었습니다.


#!/bin/sh


SRCPATH=/src


BACKUPHOME=/backup


#동기화 제외 대상 목록을 넣을 파일

EXCLUDES=$BACKUPHOME/exclude_files.txt


# 일요일, 월요일, 화요일 ... 토요일 또는 영문으로 (sunday ... )

BACKUPSUB=`date +%A`     


OPTS="--force --ignore-errors --delete-excluded --exclude-from=$EXCLUDES  

          --delete --backup --backup-dir=$BACKUPHOME/$BACKUPSUB -a"


export PATH=$PATH:/bin:/usr/bin:/usr/local/bin


rm -rf  $BACKUPHOME/$BACKUPSUB/*


# 동기화 실행 진행

rsync $OPTS $SRCPATH  $BACKUPHOME/current


이 파일을  /backup/runrsync.sh  실행가능한 파일로 저장합니다.


그리고  요일별로 변경분만 백업될 디렉토리를 미리 만들어 주어야 합니다.


$mkdir /backup/일요일  /backup/월요일 /backup/화요일 /backup/수요일  /backup/목요일 /backup/금요일  /backup/토요일



$crontab -e 


실행 후 아래 처럼 추가해줍니다.

#0 2 *  * *   /backup/runrsync.sh


그럼 매일 새벽 2시에 동기화를 하게 되고 이때  바뀌는 파일은 /backup 밑에 요일별로 옮겨지면서 전체 동기화된 파일은   /backup/current 에 있게 됩니다.



  여기까지 rsync를 이용한 자동 동기화 방법에 대한 설명을 마치겠습니다.  각자 필요한 환경에 맞게 적절히 변경하여 활용하시기 바랍니다.  감사합니다.

 




  리눅스를 가지고 할 수 있는 것은 수도 없이 많지만 그중에서도 가장 유용하게 쓰일 수 있는 분야가 파일서버(NAS: Network-attached storage) 인것 같습니다.  요즘은 조그마한 네모박스형태의 NAS 제품이 많이 나와 간편하게 활용하는 방법도 있지만.  PC를 이용한 전통(?)적인 파일 서버만의 강점이 있기에 이부분을 다뤄 보려고 합니다.


(대상은 리눅스를 잘 모르시는 분들도 가능한데, 다만 중간중간 나오는 명령어들이 이해가 안될때는 따로 조금씩 공부하면서 따라오는걸 전제로 하겠습니다.)


일단 강좌 순서는 아래 대로 진행하려고 합니다.  상황을 봐서 여기에 좀더 추가적으로 활용할 만한 내용이 있으면 좀더 길어 질 수  있을 지 모르겠습니다.


 순서대로 강좌를 끝나고 나면 대략 아래 그림과 같은 구성을 할 수 있게 됩니다.



  구성도에서 보여주는 것은 집이나 소규모 사무실 내부에서 공유폴더로 사용가능하고 외부에서도 인터넷을 통해 접근 가능한 구조 입니다.

 

오늘은 첫번째로 SAMBA를 이용한 공유폴더 만들기 입니다.

우분투 설치 PC 준비하기

   SAMBA 사용은 아주 간단하게 할 수 도 혹은 복잡하게 할 수 도 있지만. 여기서는 최소한의 설정으로 금방 공유 폴더가 될 수 있도록 하는 정도 만 다루게 됩니다. (강좌 전반에 최대한 간결 하는 방향으로 할 생각입니다.)

  우선 우분투가 설치된 PC 가 있어야 하는데 여기서는 현재 시점의 최신 LTS 버전인 12.04 를 기준으로 합니다.  LTS (Long Term Support)는 말그대로 오래 지원이 가능한 배포본으로 몇년동안은 OS 업데이트 유지가 비교적 용이합니다.

  우분투를 설치전이라면 http://www.ubuntu.com/download/desktop  에서 다운로드 하여 설치합니다.
우분투 서버버전도 있지만 네트워크 보안설정이나  XWindows 환경이 편한 데스크탑(32bit)  버전으로 합니다.  (서버버전도 물론 가능합니다만. 처음에는 데스크탑 버전으로 해보시길 권장합니다.)

다운 받은 .iso 를 CD 로 구워 부팅 설치 하면 됩니다. 하드디스크 파티션은 기본추천하는데로 하셔도 무방합니다. (우분투 설치는 "계속" 버튼을 누르면서 쭈욱 진행하면 되지만 혹 중간에 잘 모르겠으면 설치방법을 검색하면 글이 많이 있습니다.)


삼바(SAMBA) ?


   SAMBA는 윈도우용 네트워크 파일시스템을 리눅스와 같은 Unix-like OS에서 지원하도록 만들어진 서버 프로그램입니다. 즉, 리눅스에 디렉토리를 윈도우에서 공유폴더로 접근하여 쓸 수 있도록 해주는 소프트웨어 프로그램이라는 뜻입니다.  물론 MS윈도우를 파일서버로 사용가능 하나 그만큼 OS를 추가 구매 해야 하나 리눅스는 무료입니다. 그리고 다양한 리눅스의 백업 솔루션을 활용 할 수 있고,  단순히 공유폴더 서버로만 쓰더라도  최근의 복잡해진 윈도우 공유폴더 보다 (아이러니하게도 오히려) 더 간단하게 설정이 가능합니다.

프로그램 설치하기

우분투에 SAMBA를 설정하려면 먼저 패키지를 설치해야 합니다.

설치는 간단합니다.


$sudo apt-get  install samba



이렇게 하면 일단 프로그램 자체는 설치가 끝났습니다.


다음에 접속할 사용자를 추가합니다.


먼저 리눅스 사용자를 추가합니다.




$sudo adduser user1

$sudo adduser user2




그리고 SAMBA 접속 가능 사용자로 등록및 패스워드 설정합니다.


$sudo smbpasswd -a user1

$sudo smbpasswd -a user2



이때 설정하는 패스워드는 윈도우에서 공유폴더로 접속할때 인증할 패스워드가 됩니다. 


그리고 설정파일 입니다.   vi 에디터나 nano 에디터 등으로  /etc/samba/smb.conf 파일을 열어 맨아래에
아래 내용을 추가합니다.


$sudo nano /etc/samba/smb.conf


# 아래 내용 추가

[user1_home]

        comment= My  Folder

        path = /home/user1

        read only = no

        browseabale = yes

        guest ok = no

        create mask = 0666

        valid users = user1


[pub]

        comment=public                           # 폴더설명

        path = /sharefolder/pub                # 공유 대상 경로

        read only = no                              # 읽기 전용 여부

        browseable = yes                         # 해당 폴더가 보일지 여부

        guest ok = no                               # 누구나 접근 가능여부

        create mask = 0666                  # 1. 파일 생성시 권한 비트

        force create mode = 0                   # 2. OR masking

        security mask = 0777                     # 3. AND masking

        force security mode = 0                 # 4. OR masking with security mask

        directory mask = 0777                    # 5. 디렉토리 생성시 권한 비트 

        force directory mode = 0                # 6. OR masking

        directory security mask = 0777        # 7. AND masking

        force directory security mode = 0    # 8. OR masking with directory security mask



 
각각 항목별로 옆에 코멘트를 달아 드렸는데  크게 어려운 것은 없을 것(?) 입니다.

  다만 기본적으로 알아두면 좋을 것은  valid users create mask 입니다.  
아래 [pub] 폴더처럼 valid users 에 지정된 사용자가 없으면 누구나 접근 가능한 폴더가 되고, [user1_home] 폴더 처럼 user1을 지정한 경우에는 user1만 접근 가능하게됩니다.

  그리고 create mask 는  리눅스에서 파일에 대한 접근권한 부분입니다.  윈도우에서 해당 폴더를 공유해서 파일을 생성하게 되었을때 어떠한 파일권한을 갖게 할것인지를 설정하는 것이죠.

그런데 이것만으로는 파일 생성권한이 잘 먹히지 않습니다. 왜냐면  security mask 에서 허용이 되어있어야 하기 때문 입니다.   

            관련해서 SAMBA에서는 최종 권한을 적용할때 다음과 같은 로직으로 설정됩니다.


 create permission =  

( create mask  OR force create mode ) AND (security mask OR force security mode)



즉 security mask 에서 허가되지 않은 부분은 create mask 로 설정이 되어있더라도 적용이 안됩니다. 만일 create mask에서 설정하는데로 되게 하고 싶으면 security mask를 0777로 해두면 됩니다. 위에 예처럼 말이죠.

현재 우리가 적용하는 상황은 보안보다는 편의성이 중요한 상황이라고 보고 일단 접근 가능한 사용자라면 누구나 생성/삭제가 가능하도록 적용하였습니다.

이렇게 해서 파일을 추가하고 나면 SAMBA 데몬(서버프로그램)을 다시 시작해야 합니다.


$sudo  /etc/init.d/smbd restart



다시 시작하면 이제 윈도우에서 접근해봅니다.  

접근 방법은 리눅스의 IP를 조회하면 됩니다.  ifconfig 명령을 이용하면 조회가 가능합니다.
보통 eth0 또는 eth1 랜카드에 ip가있을 겁니다. 아래의 예는 랜포트가 2개 있는 PC인 경우이고 현재 eth1에 연결되어있습니다.


$ ifconfig

eth0      Link encap:Ethernet  HWaddr 00:1b:1b:0a:8f:f7

          UP BROADCAST MULTICAST  MTU:1500  Metric:1

          RX packets:0 errors:0 dropped:0 overruns:0 frame:0

          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

          Interrupt:16 Memory:96400000-96420000


eth1      Link encap:Ethernet  HWaddr 00:1b:1b:40:a9:c5

          inet addr:192.168.1.109  Bcast:192.168.1.255  Mask:255.255.255.0

          inet6 addr: fe80::21b:1bff:fe40:a9c5/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:592504491 errors:0 dropped:0 overruns:0 frame:0

          TX packets:218177502 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:895777159784 (895.7 GB)  TX bytes:16078571519 (16.0 GB)

          Interrupt:17 Memory:94400000-94420000




위에 보면 노랗게 되어있는 부분이 주소 입니다.  이 주소를 이용해서 윈도우폴더에서
\\192.168.1.109 를 입력하면 됩니다.

아래 윈도우 7 에서 접근 한 그림을 참고하세요.


위처럼 2개의 폴더가 조회됩니다.


그러면 접근해서 파일을 보관사용하면 되겠습니다.


이렇게해서 첫번째 리눅스를 이용한 파일서버(NAS)구축하기 강좌를 마치겠습니다. 


혹시나 가능한 필요한 부분만 쓴다고 불친절한 글이 됐는지 모르겠습니다.  감사합니다.






+ Recent posts