CentOS 서비스 등록하기.

자꾸만 자꾸만 까먹는 그것.

 

예를 들어서 Apache 를 컴파일해서 새로 설치했다.

실행을 하려면 /apps/apache/bin/apachectl start  라고 매번 귀찮게 입력하고,

서버를 재실행 하면 직접 실행을 해줘야 해서 번거롭다. 

 

이제부터 이걸 자동실행 되게 서비스에 등록해 주겠다.

 

1. 아파치 실행 파일을 /etc/rc.d/init.d 에 심볼링크로 만들어 준다.

   (본문의 아파치 경로는 컴파일 위치에 따라 다를 수 있다)

1
$ ln -s /apps/httpd-2.4.41/bin/apachectl /etc/rc.d/init.d/httpd
cs

 

2. apachectl 파일을 수정하도록 한다.

    3~4줄쯤에 추가하면 된다.

1
2
3
4
5
6
$ vim /apps/apache-2.4.41/bin/apachectl
 
#!/bin/sh
#
# chkconfig: 345 85 15
# description: Apache-2.4.41 Server Daemon
cs

    - (수정하는 김에) 아파치 start 명령어를 날려도 아무런 메세지가 없어서 찜찜하다면 대략 85줄 쯤에 아래와 같이 추가한다.

       적당히 변수명과 앞의 텍스트는 바꿔도 무관

1
echo Apache-2.4.41 Server ... $ACMD
cs

3. 2번의 작업을 완료 후에 아래와 같이 메세지를 날려준다.

1
2
3
4
$ chmod +x /etc/rc.d/init.d/httpd
$ chkconfig --add httpd
$ chkconfig --level 345 httpd on
$ service httpd restart
cs

위 작업 까지 완료했다면 아파치는 service 명령어로 시작 / 종료 등을 할 수 있다.

이쯤했음 되겠지 뭘....

 

'기억할것들 > CentOS' 카테고리의 다른 글

서비스 자동실행 등록하기  (0) 2019.08.22
SSH root 원격 접속 제한 하기  (0) 2019.07.01
증분백업. rsnapshot 사용하기.  (0) 2019.01.11
PEM Key 로 public Key 생성하기  (0) 2018.08.13
Apache HTTPD/2 설정  (0) 2018.05.24
Apache Log 가상호스트 별로 쌓기  (0) 2017.11.28

리눅스 개발자 또는 SE 라면 원격으로 항상 터미널에 붙어서 살아야 한다.

그리고 슈퍼유저! root권한으로 참 많은 일을 한다.

 

그런데 말 그래도 이 root 란, 굉장히 많은 권한을 가진 만큼

적(?) 에게 노출되면 굉장히 피를 볼수도 있는 양날의 검 같은 존재이다.

 

root 의 비밀번호를 복잡하게 만들수도 있을 것이고, 

SSH 를 특정 IP 에서만 접속하게 만들수도 있을것이고,

root 를 key 로만 접속하게 만들수도 있겠지만,

 

나는 2차 보안의 갬성으로 ssh 는 사용자 id 로 key 로만 접속하고,

root 는 그후에 접속되도록 하고 싶다.

 

사실 방법은 매우 간단하니까.

 

1) 사용자 계정을 key 로 접속하게 하는 방법은 요기로

 

SSH 공개키 등록하기.

SSH 공개키 등록하기는. client -> server 로 엑세스 할 때 비밀번호를 묻지 않게 할 경우 보통 사용된다. 주로, git/svn 의 Remote Repository 연결, RSync 등의 작업을 SSH 포트를 사용 때, ssh 로 자주 접근해..

www.smarthink.co.kr

 

2) 사용자 계정을 하나 만들고 1)의 진행이 완료 되었다면 아래와 같이 입력하자,
    (ssh_config 가 아니다 sshd_config 다. 두개는 다르다!)

1
$ vim /etc/ssh/sshd_config
cs

 

3) sshd_config 파일 안에서 49번 라인을 보면 PermitRootLogin 이라는 부분 이 있다 이 부분을 no로 바꾼다.
   (:set nu 는 라인 번호는 보는 셋팅이다)

1
2
:set nu
PermitRootLogin    no
cs

 

위와 같이 하고 원격지에서 root 로 접속해 보면 비밀번호로는 절대 접속 할수 없다.

혹시 모르니 새로운 터미널 창을 띄우고 원격지에서 접속을 시도해보자

IDC 센터로 뛰어가는 불상사는 일어나선 안된다!

'기억할것들 > CentOS' 카테고리의 다른 글

서비스 자동실행 등록하기  (0) 2019.08.22
SSH root 원격 접속 제한 하기  (0) 2019.07.01
증분백업. rsnapshot 사용하기.  (0) 2019.01.11
PEM Key 로 public Key 생성하기  (0) 2018.08.13
Apache HTTPD/2 설정  (0) 2018.05.24
Apache Log 가상호스트 별로 쌓기  (0) 2017.11.28

오늘의 포스팅은 증분백업이다.

서버관리를 하다보면 백업이 중요하니까, 하지만 풀백업을 하면, 전날의 자료가 없고,

그렇다고 매일매일 풀백업을 하면 디스크가 견디질 못한다.

이럴때 사용하는게 증분백업, 전날 소스와 비교해서 변한 자료만 동기화 한다. 

당연히 용량의 증가도 많지 않다. 


돈주고 솔루션 사 쓸거면 포스팅도 안하겠지. 무료다.

rsync 를 사용한 솔루션 rsnapshot 이다.


1. 리눅스에 rsnapshot 을 yum으로 설치해보자

   아주 간단하게 설치가 된다.


1
$ yum install rsnapshot
cs


2. rnsapshot 설정파일을 간단하게 보도록 한다.


1
$ vim /etc/rsnapshot.conf
cs


   - 23번째 줄, rsnapshot_root : 백업 파일이 저장될 경로

   - 93 ~ 95줄 백업 주기를 설정

      alpha -> beta -> gamma 순으로 동작하며 각각 daliy, weekly, monthly 정도로 생각하면 된다. 

      맨 뒤의 숫자는 보관할 파일의 갯수, 숫자만큼 저장하며 오래된 것부터 삭제한다.

   - 보통 위의 두개 정도만 신경쓰면 된다. 추가적으로 할건 logfile 이나 loglevel 정도..?

   - 설정 파일에 있지만 가장 중요한 backup 경로 설정 방법은 새로 번호를 찍겠다.


3. 백업 스크립트 작성

    conf 파일 내의 225줄 #LOCALHOST 아래 부분부터 보면 된다.


    1) 서버내에서 파일을 백업할때 사용한다. conf 파일 내의 소스가 매우 잘 되어있다.


1
backup    /home/    localhost/
cs


        /home/ 하위에 있는 모든 파일을 /{rsnapshot_root}/localhost 폴더에 저장하겠다는 뜻이다.

        여기서 중요한 점은 저 공백은 꼭 탭으로 해야 한다. 스페이스로 하면 에러가 발생한다.

   

   2) rsync로 외부 서버의 파일 가져오기


1
backup    root@example.com:/home    example.com/    {rsync_option}
cs


rsync 로 example.com 서버의 /home 폴더를  {rsnaphost_root}/example.com/ 하위에 저장한다.

3번째 인자로 rsync 옵션을 지정할 수 있다.

example.com 서버의 rsync 접속 보안에 약간 신경을 써줘야 할 것으로 보인다.


   3) backup 스크립트 실행하기

 

1
backup_script    /usr/local/bin/backup_pgsql.sh    localhost/postgres/
cs


sqldump 를 위해 미리 생성해 둔 스크립트를 실행한다. 



대충 이정도만 알아도 증분백업을 돌리는데는 문제가 없다.

설정을 완료 했으면 테스트를 해본다


1
2
$ rsnaphost configtest
Syntax OK
cs


위와 같이 뜨면 매우 아름답게 설정은 완료 되었다.


실제로 실행을 하기 위해선 다음과 같이 한다.


1
$ rsnapshot alpha

cs


위 명령어를 실행하고 기다리면 백업 폴더에 백업 파일이 똭 있다.

그럼 이걸 주기적으로 백업하는 방법은 ???


정답은 크론이다


1
2
3
4
5
$ crontab -e
 
00    01    *    *    *    /usr/bin/rsnapshot alpha
00    01    *    *    1    /usr/bin/rsnapshot beta
00    01    1    *    *    /usr/bin/rsnapshot gamma
cs


크론에 대한 사용법은 대충 알거라 생각하지만... 가볍게 설명하면

인자별로 분, 시, 일, 월, 요일 이다


3번줄은 매일 AM 1:00 에 실행하라

4번줄은 월요일마다 실행하라 (0:일요일 ~ 6:토요일)

5번줄은 1일마다 실행하라 


라는 뜻이다


끝.!


===================================================================================================================================


참고사이트는 아래와 같다.


https://github.com/php79/backup
https://github.com/php79/backup/blob/master/docs/local-incremental-backup.md
https://github.com/php79/backup/blob/master/docs/remote-incremental-backup.md
https://github.com/php79/backup/blob/master/docs/rsnapshot-result.md

'기억할것들 > CentOS' 카테고리의 다른 글

서비스 자동실행 등록하기  (0) 2019.08.22
SSH root 원격 접속 제한 하기  (0) 2019.07.01
증분백업. rsnapshot 사용하기.  (0) 2019.01.11
PEM Key 로 public Key 생성하기  (0) 2018.08.13
Apache HTTPD/2 설정  (0) 2018.05.24
Apache Log 가상호스트 별로 쌓기  (0) 2017.11.28

사실 보안상 그러면 안되지만, 여러개의 키를 관리하기 귀찮아서 하나의 PEM 키로 모든 서버에 로그인 하고 싶었다.

그러기 위해선 각 서버의 Authorized_keys 에 내 public key의 내용물들이 저장되어 있어야 하는데 PEM 만 가지곤 알수 없지 않은가 ?!


그래서 찾아봤다. PEM 키를 가지고 public Key 를 생성하는 방법을 

생각보다 간단하더라


콘솔에 로그인 후 PEM 키를 서버로 올린다.

그리고 입력한다.


$ ssh-keygen -y -f private_key.pem > public_key.pub


끝.

1. 관련 모듈 설치

1
$ yum install lua-devel libxml2-devel gcc gcc-c++ flex compat-gcc-34-g77 libjpeg-devel libpng-devel freetype-devel gd-devel expat-devel
cs

2. libnghttpd2 설치

1
2
$ yum install epel-release
$ yum install libnghttp2 libnghttp2-devel
cs

 

3. openssl 설치 (1.0.1e 버전 이상만 되면 된다) 

1
2
3
4
5
$ ./config --prefix=/usr/local/openssl shared zlib
$ make && make install
$ ln -/usr/local/openssl/bin/openssl /usr/bin/openssl
( 이 작업 전에 기존에 등록되어 있는 파일이 있다면 백업정돈 하자)
$ openssl version
cs

마지막 명령줄을 실행하면 openssl 의 버전이 나오면서 내가 설치한 버전이 잘 설치 되었는지 확인할 수 있다.

하지만,! 설치고 에러가 날 수 있는데, libssl.so.1.1 / libcrypto.so.1.1 이 없다는 ...

위 에러 발생시 openssl 의 압축을 해제 한 폴더를 보면 두 파일이 있다.

/usr/lib64 로 복사하면 정상 실행 된다.

 

4. apr 설치

1
2
$ ./configure
$ make && make install
cs

만약 configure 하는 도중 libtoolT 가 없다고 하면, ln -s libtool libtoolT 를 한다

 

5. apr-util 설치

1
2
$ ./configure --with-apr=/usr/local/apr --with-expat=builtin
$ make && make install
cs

 

6. pcre 설치 (pcre2를 해선 안된다. pcre2 는 컴파일 시 아파치가 인식하지 못한다)

1
2
$ ./configure --prefix=/usr/local/pcre
$ make && make install
cs

 

7. Apache 설치 (run.sh 와 같은 파일에 작성 후 실행시키면 편하다)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
./configure \
    --prefix=/apps/httpd-2.4.33 \
    --enable-module=most \
    --enable-mods-shared=all \
    --enable-so \
    --with-mpm=event \
    --enable-cache \
    --enable-deflate \
    --enable-expires \
    --enable-cgi \
    --enable-vhost-alias \
    --enable-rewrite \
    --enable-mime-magic \
    --enable-ssl \
    --enable-http2 \
    --with-ssl=/usr/local/openssl \
    --with-apr=/usr/local/apr \
    --with-apr-util=/usr/local/apr \
    --with-pcre=/usr/local/pcre/bin/pcre-config
cs

 

8. httpd.conf 수정 (HTTP2 사용을 위해서 추가작업이 필요하다)

 

1
2
3
4
5
LoadModule http2_module modules/mod_http2.so
<IfModule http2_module>
    ProtocolsHonorOrder    On
    Protocols h2 h2c http/1.1
</IfModule>
cs

 

9. HTTP2 는 SSL 환경에서만 동작이 가능하기 때문에 http-ssl.conf 파일도 수정하도록 한다.

1
2
SSLProtocol    ALL -SSLv2 -SSLv3
SSLCipherSuite    ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK
cs

 

10. 서비스 등록하기

1
2
3
$ cp {설치폴더}/bin/apachectl /etc/init.d/httpd
$ service httpd start
$ service httpd stop
cs

 

위 설정까지만 해도 충분히 아파치는 잘 동작한다.

단, PHP 와 연결을 위한 설정 몇개를 더 쓴다

 

11. httpd.conf 에서

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>
 
<IfModule mime_module>
    AddType application/x-httpd-php .php .phtml
    AddType application/x-httpd-php-source .phps
</IfModule>
 
<Directory "/home/*">
    Options FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from All
    Require all granted
</Directory>
cs

 

서비스 자동 실행 등록 등의 작업이 필요하다면 #여기로

아파치의 기본설정대로 라면 아파치 로그는 한 파일에 모두 다 쌓이게 된다.

하나의 사이트를 운영한다면 괜찮겠지만, 한 서버에서 여러개의 사이트를 운영할 경우
로그를 분석할 상황이 발생했을 때 꽤나 불편하게 되는데,
이런 경우를 위해 VirtualHost 별로 로그를 설정할 수 있는 방법이 있다.


$ vim /etc/httpd/conf/http.conf

<VirtualHost *:80>
DocumentRoot /home/
ServerName Smarthink.co.kr
CustomLog    /home/Service/logs/smarthink/access_log combined
ErrorLog    /home/Service/logs/smarthink/error_log
</VirtualHost>


로그형식
형식문자열설명
%a원격IP-주소
%A서버IP-주소
%f파일명
%h원격 호스트
%l원격 로그인명(값이있을경우)
%s상태
%bHTTP 헤더를 제외한 전송 파이트수
[Foobar]%i서버가 수신한 요청에서 [Foobar: 헤더의 내용]


fdisk 는 2TB까지만 지원하므로 parted 를 사용


1. parted /dev/sda (드라이브주소  fdisk -l 로 확인)

2. mklabel gpt

3. unit tb - TB로 단위를 바꿈

4. mkpart primary 0 최대용량

5. print (설정값 확인)

6. quit

7. vim /etc/mke2fs.conf

8. ext4 부분에 auto_64-bit_support = 1 추가 후 종료

9. yum -y --enablerepo=extras install xfsprogs

10. mkfs -t xfs -f /dev/sda


RSYNC.

생각보다 많은 곳에 사용하는 기능이다.


백업, 배포, 등등등 생각보다 많은 장소에서 쓰인다.

LINUX 에서 파일을 복사하는 등의 작업을 하는 경우,

이어받기와 비슷한 느낌의 기능도 되어있기 때문에

(RSYNC 는 Server 와 Client 간 서로 다른 자료만 전달한다)

서버 개발자 또는 관리자라면 굉장히 긴밀하게 사용할 것이다.


RSYNC 를 사용하기 위해선 먼저 xinetd 와 rsync 가 설치되어 있어야 한다.

RSYNC는 굳이 버전에 큰 차이가 없으니 귀찮으니까 yum 으로 설치하려 한다.


$ rpm -qa | grep rsync
$ rpm -qa | grep xinetd


위 명령어로 설치 여부를 확인 후 없으면 없는 것만 설치하자.

$ yum install rsync
$ yum install xinetd


xinetd 와 rsync 가 설치되었다면, rsync 설치 화면 으로 넘어간다.

$ vim /etc/xinetd.d/rsync


service rsync
{
disable = yes
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}

위 파일에 들어가면 아랫줄과 같은 부분이 있는데, disable 부분을 no 로 바꾸고 저장한다.



- SERVER 설정


rsync 는 rsync 포트 (기본 873) 를 사용해 전송하는 방식이 있고,

ssh 포트 (기본 22) 를 사용해 전송하는 방식이 있다.


873 포트를 이용한 전송방식은 아래와 같은 셋팅이 필요하다

$ vim /etc/rsync.conf

max connection = 10
log file = /var/log/rsync.log
timeout = 300

[test]
comment = rsync server test
path = /home/Service/test
read only = no
uid = root
gid = root
hosts allow = 127.0.0.1


맨 위 대괄호로 되어 있는 부분이 rsync 의 프로젝트 명이다.

host allow 는 보안을 위해 있는 부분인데, 입력하지 않으면 전체 오픈된다.

위 셋팅을 완료 후 rsync  서비스를 재시작 한다.


$ /etc/init.d/xinetd restart


위와 같이 생성했으면, client 에서 테스트를 해보자.


$ rsync -avz --progress --delete --exclude 'file_backup.sh' /home/Service/source/ 127.0.0.1::test

위 명령어 중 avz 는

a = archive 모드로 심볼링크, 퍼미션, 소유권 등을 보존

v = 진행상황을 상세히 보여줌

z = 전송 시 압축하여 전송


progress 는 진행상태를 보여주라는 뜻


delete 는 송신측과 수신측을 동일하게 유지 하기 위해 송신측에 없는 정보는 지우라는 명령어

누적 전송을 위해서는 delete 는 빼준다


exclude 는 전송 을 제외하고자 하는 폴더 또는 파일이다.



SSH 를 통해 전송하고자 하는 경우


$ rsync -avz --progress --delete --exclude 'file_backup.sh' /home/Service/source/ 127.0.0.1:/home/Service/backup

과 같이 맨 뒷부분을 수정해 준다.


끝.


혹시나 open failed : permission denied 과 같은 에러가 발생하면

selinux 쪽을 확인해 보자.


윈도우용으로도 cwrsync 라는 프로그램도 있으나, 현재 해당 프로그램이 유료화 된 상태인지라...

저작권이 두려워 차마 업로드는 못하고.......관심있으신 분은 댓글로 달아주세요

리눅스를 설치하고 터미널을 들어가서


ls -al 을해보자.


아름답게도 눈이 정말 너무 아플정도로 색이 너무 시퍼렇다.

짜증나서 일을 못하면 안되니까,

색상을 바꾸자


$ vim /etc/DIR_COLORS


/DIR 로 겁색하면 기본값으로 0;34 로 되어있다.

개인적으로 내가 맘에 들어하는색은


38;5;27 이다.


저장하고 터미널을 재접속하면,

음 잘보인다. 대만족.


====================================================================================================================================


우분투는 .bashrc 에 추가한다.


$ sudo vim ~/.bashrc


LS_COLORS='dl=38;5;27';
export LS_COLORS




set ts=4
set sw=4
au Bufenter *.\(py\) set et
au Bufenter *.\(html\) set ts=2 sw=2
set magic
set wrap
set ruler
set showmode
set visualbell
set backupdir=~/.backup
set backup
set writebackup
set incsearch
set background=dark
set title
set fdm=marker
set cindent
au BufRead,BufNewFile *.pc  setf esqlc
syntax on
if &term =~ "xterm"
  if has("terminfo")
    set t_Co=8
    set t_Sf=^[[3%p1%dm
    set t_Sb=^[[4%p1%dm
  else
    set t_Co=8
    set t_Sf=^[[3%dm
    set t_Sb=^[[4%dm
  endif
endif

map <F1> :vs./<CR>


set number

+ Recent posts