서버시간을 KST로 변경하기

AWS의 ec2 서버를 생성하면 시간대가 UTC로 잡혀 있다.

이를 KST로 변경 하기 위해서는 다음 명령을 이용하면 된다.

ubuntu@ip-0-0-0-0:~/timezone$ date
Wed May 15 09:08:49 UTC 2019
ubuntu@ip-0-0-0-0:~/timezone$  cat /etc/localtime
TZif2UTCTZif2�UTC
UTC0
ubuntu@ip-0-0-0-0:~/timezone$ sudo rm /etc/localtime
ubuntu@ip-0-0-0-0:~/timezone$
ubuntu@ip-0-0-0-0:~/timezone$ sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime
ubuntu@ip-0-0-0-0:~/timezone$
ubuntu@ip-0-0-0-0:~/timezone$ date
Wed May 15 18:09:45 KST 2019

타임존이 다를 경우 발생하는 가장 큰 문제는 다음과 같다.

  1. 배치 시간 문제
  2. 데이터 조회시 서버 시간 사용시 오류

서버 셋팅하고 나면 KST로 변경해야겠다.

Posted by lahuman

댓글을 달아 주세요

Vim과 Neovim 편집기에서 OS 명령어 실행 취약점 발견 2019.06.13

  • 보안 연구원 Armin Razmjou는 최근 리눅스에서 가장 인기 있는 커맨드라인 텍스트 편집 유틸리티인 Vim과 Neovim에서 심각도 높은 임의 OS 명령 실행 취약점(CVE-2019-12735)을 발견
    • Vim 편집기 : 사용자들이 리눅스에서 텍스트, 스크립트, 문서를 포함한 파일을 생성하고, 열람하거나 수정할 수 있는 프로그램
      • Neovim 편집기 : 플러그인, GUI 등이 개선된 Vim 확장 버전 프로그램
  • 이 취약점은 “modlines”를 처리하는 과정에서 발견됨
    + modelines : 문서의 시작과 마지막 라인 근처에 파일의 제작자가 언급한 커스텀 설정 세트를 자동으로 찾아 적용하는 기능으로 기본으로
                          활성화되어 있음
  • 비록 보안상의 이유로 modelines의 서브셋만을 허용하고 샌드박스 보호를 사용할지라도 “:source!” 명령어를 사용하면 샌드박스를
    우회할 수 있음

  • 따라서, Vim이나 Neovim을 사용해 특별히 제작된 파일을 열람하는 것만으로도 공격자가 피해자의 리눅스 시스템에서 명령을 실행하고
    제어권을 탈취할 수 있음

  • Vim(8.1.1365)과 Neovim(v0.3.6)은 해당 취약점 문제 해결을 위해 최근 업데이트를 발표

  • 해결 방안

    • modelines 기능 비활성화
    • modelines의 수식을 비활성화 하기 위한 “modelineexpr” 비활성화
    • Vim modelines의 대한인 “securemodelines plugin” 사용

시사점

  • 리눅스 및 Vim과 Neovim 에디터를 최신 버전으로 업데이트하고, 주기적인 권한 탈취 여부 확인

vim 확인 하기

vim upgrade 하기

sudo apt-get upgrade vim 명령어를 이용해서 업그레이드를 할 수 있다.

만약 업그레이드를 할 내용이 없으면 다음과 같은 결과가 확이 된다.

$> sudo apt-get upgrade vim
Reading package lists... Done
Building dependency tree
Reading state information... Done
vim is already the newest version (2:8.0.1453-1ubuntu1.1).
Calculating upgrade... Done
The following package was automatically installed and is no longer required:
  linux-aws-headers-4.15.0-1035
Use 'sudo apt autoremove' to remove it.
The following packages have been kept back:
  linux-aws linux-headers-aws linux-image-aws
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

vim 최신 버젼으로 강제 업데이트 하기

PPA를 이용해서 최신 버젼으로 업데이트를 한다.

$> sudo add-apt-repository ppa:jonathonf/vim
$> sudo apt update
$> sudo apt install vim

vim upgrade 내역 확인 하기

changelog를 확인하면 업데이트 기록이 확인 된다. 다음과 같인 로그가 있다면, CVE-2019-12735.patch에 대한 패치가 되어 있는 것이다.

$> apt changelog vim
vim (2:8.0.1453-1ubuntu1.1) bionic-security; urgency=medium

  * SECURITY UPDATE: Arbitrary code execution
    - debian/patches/CVE-2019-12735.patch: disallow
      sourcing a file in the sandbox in src/getchar.c
    - CVE-2019-12735

 -- Leonidas S. Barbosa <leo.barbosa@canonical.com>  Thu, 06 Jun 2019 14:31:41 -0300

대부분 서비스를 확인하니 이미 패치가 되어 있었다.

참고자료

Posted by lahuman

댓글을 달아 주세요

vim upgrade or 업그레이드 내역 확인 하기!

Vim과 Neovim 편집기에서 OS 명령어 실행 취약점 발견 2019.06.13

  • 보안 연구원 Armin Razmjou는 최근 리눅스에서 가장 인기 있는 커맨드라인 텍스트 편집 유틸리티인 Vim과 Neovim에서 심각도 높은 임의 OS 명령 실행 취약점(CVE-2019-12735)을 발견
    • Vim 편집기 : 사용자들이 리눅스에서 텍스트, 스크립트, 문서를 포함한 파일을 생성하고, 열람하거나 수정할 수 있는 프로그램
      • Neovim 편집기 : 플러그인, GUI 등이 개선된 Vim 확장 버전 프로그램
  • 이 취약점은 “modlines”를 처리하는 과정에서 발견됨
    + modelines : 문서의 시작과 마지막 라인 근처에 파일의 제작자가 언급한 커스텀 설정 세트를 자동으로 찾아 적용하는 기능으로 기본으로
                          활성화되어 있음
  • 비록 보안상의 이유로 modelines의 서브셋만을 허용하고 샌드박스 보호를 사용할지라도 “:source!” 명령어를 사용하면 샌드박스를
    우회할 수 있음

  • 따라서, Vim이나 Neovim을 사용해 특별히 제작된 파일을 열람하는 것만으로도 공격자가 피해자의 리눅스 시스템에서 명령을 실행하고
    제어권을 탈취할 수 있음

  • Vim(8.1.1365)과 Neovim(v0.3.6)은 해당 취약점 문제 해결을 위해 최근 업데이트를 발표

  • 해결 방안

    • modelines 기능 비활성화
    • modelines의 수식을 비활성화 하기 위한 “modelineexpr” 비활성화
    • Vim modelines의 대한인 “securemodelines plugin” 사용

시사점

  • 리눅스 및 Vim과 Neovim 에디터를 최신 버전으로 업데이트하고, 주기적인 권한 탈취 여부 확인

vim 확인 하기

vim upgrade 하기

sudo apt-get upgrade vim 명령어를 이용해서 업그레이드를 할 수 있다.

만약 업그레이드를 할 내용이 없으면 다음과 같은 결과가 확이 된다.

$> sudo apt-get upgrade vim
Reading package lists... Done
Building dependency tree
Reading state information... Done
vim is already the newest version (2:8.0.1453-1ubuntu1.1).
Calculating upgrade... Done
The following package was automatically installed and is no longer required:
  linux-aws-headers-4.15.0-1035
Use 'sudo apt autoremove' to remove it.
The following packages have been kept back:
  linux-aws linux-headers-aws linux-image-aws
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

vim 최신 버젼으로 강제 업데이트 하기

PPA를 이용해서 최신 버젼으로 업데이트를 한다.

$> sudo add-apt-repository ppa:jonathonf/vim
$> sudo apt update
$> sudo apt install vim

vim upgrade 내역 확인 하기

changelog를 확인하면 업데이트 기록이 확인 된다. 다음과 같인 로그가 있다면, CVE-2019-12735.patch에 대한 패치가 되어 있는 것이다.

$> apt changelog vim
vim (2:8.0.1453-1ubuntu1.1) bionic-security; urgency=medium

  * SECURITY UPDATE: Arbitrary code execution
    - debian/patches/CVE-2019-12735.patch: disallow
      sourcing a file in the sandbox in src/getchar.c
    - CVE-2019-12735

 -- Leonidas S. Barbosa <leo.barbosa@canonical.com>  Thu, 06 Jun 2019 14:31:41 -0300

대부분 서비스를 확인하니 이미 패치가 되어 있었다.

참고자료

Posted by lahuman

댓글을 달아 주세요

서버 시작시 서비스 시작 하기

사용하는 웹 서비스를 서버가 재시작 되었을때, 자동으로 시작하고 싶을때 사용하는 방법이다.

간단하가 스크립트를 /etc/rc.d/rc.local에 등록하면 서버가 재기동 되었을때, 해당 스크립트가 1회 동작을 한다.

# 최초 한번은 rc.local에 실행권한을 줘야 한다.
$> chmod +x /etc/rc.d/rc.local

# 이후 rc.local 파일의 하단에 원하는 스크립트를 삽입 한다.
$> vi /etc/rc.d/rc.local
... rc.local 파일
# 스크립트 추가
nohup java -jar /home/lahuman/hello.jar & > /dev/null
... 종료

# 재기동 후 테스트
$> reboot now
... 재기동 후

# 서비스 확인
$> ps -ef | grep hello

추가로 실행이 root 계정으로 실행이 된다.

만약 다른 계정으로 실행을 하고 싶으면/rc.local에 스크립트를 su 계정 -c ‘명령어’ 로 추가 한다.

$> vi /etc/rc.d/rc.local
... rc.local 파일
# 스크립트 추가
su lahuman -c 'nohup java -jar /home/lahuman/hello.jar & > /dev/null'
... 종료

참고 자료


Posted by lahuman

댓글을 달아 주세요

특정 디렉토리에서 구조를 출력 하는 방법

디렉토리의 구조를 출력 하는 방법은 2가지가 있다.

  1. Tree 모듈을 설치 한다.

tree 명령어는 많은 옵션을 제공하고 널리 사용되는 모듈이다.

다만 쉬운 설치를 위해서 인터넷이 되어야 한다.

  1. Command 를 이용한 출력
find . -type d | sed -e "s/[^-][^\/]*\//  |/g" -e "s/|\([^ ]\)/|-\1/"

설치가 필요 없고 단순하게 철력이 가능하다. 다만, 옵션이 없기 때문에 COMMAND를 조합 해야 한다. 예를 들어 abc 디렉토리를 제외 하고 싶다면 다음과 같은 명령어를 실행 해야 한다.

find . -type d | grep -v abc | sed -e "s/[^-][^\/]*\//  |/g" -e "s/|\([^ ]\)/|-\1/"

일회성으로 쓰기 좋다!

참고 자료


Posted by lahuman

댓글을 달아 주세요

Tor Proxy 포트 9050을 원격에서 접속 하는 방법

netstat 로 특정 포트를 확인 하면 2개의 IP:PORT가 표출 되는데, 첫번째 IP가 127.0.0.1 일 경우, 오직 로컬(localhost-loopback interface)에서만 접근 이 가능하다.

$ sudo netstat -ntlup | grep 9050
tcp        0      0 127.0.0.1:9050          0.0.0.0:*               LISTEN      683/tor

Tor에서 제공되는 Proxy 9050 port는 socks5 protocol로 로컬에서만 서비스 된다. 

DeleGate 설정

일본에서 제작된 것으로 보이며, 2014년 10월에 9.9.13으로 마지막 UPDATE 된 프로그램이다. 

기초 사용법은 Delegate 사이트에 잘 나와있다. 

설치는 BINARY 형식을 다운받아 압축을 풀면 추가 설치할 필요는 없다. 

# download 9.9.13
$ wget ftp://delegate.hpcc.jp/pub/DeleGate/bin/linux/latest/linux2.6-dg9_9_13.tar.gz
# 압축 해제
$ tar xvzf linux2.6-dg9_9_13.tar.gz

실행은 설치된 디렉터리의 bin/dg9_9_13 을 실행 하면된다.

# 설치된 디렉터리로 이동
$ cd DGROOT/bin/
# 메일 정보를 작성하지 않을 경우 다음의 오류 발생
# ERROR! ADMIN="your_mail_address" must be specified.
$ vim dg9_9_13.conf
# ADMIN 찾아 주석 제거후, 메일 주소 작성
ADMIN=Email.address
# 저장 후 종료
# 실행 -P제공PORT SERVER=서버타입(HTTP,FTP,SSH ETC..) SOCKS=포워딩대상정보
./dg9_9_13 -P8890 SERVER=socks5 SOCKS=localhost:9050

처리된 결과를 확인하면 다음과 같다.

tcp        0      0 0.0.0.0:8890            0.0.0.0:*               LISTEN      6069/./dg9_9_13

외부에서 8890 포트로 Proxy요청을 보내면 tor proxy를 사용 할 수 있다.

참고 자료


Posted by lahuman

댓글을 달아 주세요

1. LOG 삭제 


옵션 설명 : 검색된 파일을 삭제 하라

find 명령어를 이용하여  .log 로 시작하고 14일(2주) 넘은 파일 찾기를 실행 하고  결과를 삭제 처리


$ find /was/apache-tomcat-8.0.33/logs   -mtime  +14   -name " *.log"  -exec rm {} \;




2. 웹 서비스 상태 확인 (wasStatus.sh)


옵션 설명 : WEBPING 의 값이 200일때 까지 반복하라

curl 명령을 이용하여 http://localhost:8080/login 페이지에서 response_code 가 200(성공) 이 표출 될때 까지 10초에 한번식 반복 한다.


#!/bin/bash


WEBPING=0

until [ $WEBPING == "200" ];

do

  echo $WEBPING 

  WEBPING=$( curl -sL -w "%{http_code}\\n" "http://localhost:8080/login" -o /dev/null)

  echo --- sleeping for 10 seconds

  sleep 10

done

echo $WEBPING

echo Was is running!



출처 :

1. http://unix.stackexchange.com/questions/13605/how-to-find-files-in-subdirs-and-sort-them-by-filename-in-a-single-command

2. http://stackoverflow.com/questions/12747929/linux-script-with-curl-to-check-webservice-is-up


Posted by lahuman

댓글을 달아 주세요

참고 주소 :

https://github.com/lahuman/docker-pure-ftpd
https://github.com/stilliard/docker-pure-ftpd/issues/5

FTP 서버 구축

  • 우선 해당 git에서 파일을 가지고 옵니다.

    git clone https://github.com/lahuman/docker-pure-ftpd.git
    
  • docker를 이용한 빌드를 진행합니다.

    docker build -rm -t pure-ftpd .
    
    • Dockerfile에서 Passvie Mode에 대한 설정되지 않으면, 추후 서버에서 수정을 하여도 재대로 반영이 되지 않습니다. 이것 때문에 하루 종일 삽질하였습니다.
  • FTP 서버를 실행 합니다.

    docker run -d -it -p 30000-30009:30000-30009 -p 21:21 -p 20:20 -v /n001/ftp_data:/home --name ftpd_server pure-ftpd
    
    • Dockerfile에서 30000 ~ 30009 포트를 passvie 모드로 열어 두었기 때문에 해당 포트를 추가로 오픈 하는 것이고, 20번 포트는 active모드일 경우 데이터를 주고 받을 때 사용 하기 때문에 함께 열어 줍니다.
    • -v 로는 파일 업로드할 위치를 잡아 주면 됩니다. 예제에서는 /n001/ftp_data 로 연결 하였습니다.
  • 사용자 추가

    • 우선 /bin/bash모드로 docker에 접속을 하여 사용자를 추가 합니다.
      docker exec -it ftpd_server /bin/bash
      
    • 사용자 추가는 pure-pw를 이용하여 진행합니다.
      pure-pw useradd useId -u ftpuser -d /home/ftpusers/usePath
      #패스워드를 2회 입력하도록 유도 합니다.
      pure-pw mkdb
      
    • 사용자 변경시 서버에 재기동이 필요 없습니다. 자세한 내용은 여기를 참조 하셔요.
  • 테스트

    • 다른 PC 에서 다음과 같이 진행 합니다.
      ftp SERVER_IP
      

추가 : Active Mode 와 Passive Mode

참고 : https://documentation.cpanel.net/display/CKB/How+to+Enable+FTP+Passive+Mode

  • Active Mode
    • 명령어와 데이터 전송을 특정 포트를 이용하셔 전송 됩니다.
      • 명령어 21
      • 데이터 20
  • Passvie Mode
    • 데이터 전송을 다른 포트를 이용하셔 전송 됩니다.
      • 명령어 21
      • 데이터 1501 ~ 2345 또는 사용자 지정 범위

NAT(방화벽) 설정시 Active모드는 데이터 전송이 막힐수 있으나, Passive 모드는 가능할 수 있습니다.


MD FILE : 

FTP_SERVER.md



Posted by lahuman

댓글을 달아 주세요

1. Korean(Hangul) setting

  - 한글 설정  : 기본 Korean 키보드에서는 한글을 사용할 수 없다.

    다음과 같은 명령어를 이용하여 설치 필요

sudo apt-get install ibus-hangul

* 설치 이후 꼭 재기동 필요

참고 URL : http://askubuntu.com/questions/409528/how-do-i-install-the-korean-hangul-keyboard-on-ubuntu-13-10


2. Vmware Player Install

  - 우선 다음 URL에서 다운로드를 진행 한다.

    다운로드 URL : https://my.vmware.com/web/vmware/free#desktop_end_user_computing/vmware_workstation_player/12_0


  - 다운로드 이후, 설치는 다음의 명령어로 진행 한다.

cd ~/Downloads
chmod +x VMWare*.bundle
sudo ./VMWare*.bundle

* 설치시 약 1~2 시간 이상이 걸립니다. 

  또한 설치 진행중에 PC가 멈춘는 현상이 발생 합니다. 

  그냥 기다리시면 설치 완료 됩니다.(이걸 몰라서 계속 강제 재기동 했었습니다...)

참고 URL : https://xpressubuntu.wordpress.com/2014/09/24/how-to-install-vmware-player-in-ubuntu-14-04/


* VirtualBox는 쉽게 설치는 되지만 커널 관련 crash가 있다는 이야기가 있고, 실제로 Ubuntu가 비정상상태가 되는 현상이 있었습니다.

  설치 전에 해당 내역에 대해 검색 하시고 확인후 진행 하셔요.

* VirtualBox 5.0에서 개선 되었다고 했으나, 제가 설치한(2015.09.30 기준)  Ubuntu 14.04.3 LTS 버젼에서는 5.0에서 오류가 발생했습니다.


실제 Ubuntu 설치는 30분 정도가 걸렸으나, 상위 설정을 찾는데 오랜 시간이 걸렸습니다.

(검색하면 금방나오는 거긴 한데... 잘 몰라서 그러네요..)


3. JDK 설치하기

다음의 명령어를 이용할 경우 해당 패키지를 찾을 수 없다는 메시지를 보게 된다.

sudo apt-get install openjdk-8-jdk
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package openjdk-8-jdk

다른 방법으로 직접 Oracle사이트에서 jdk-[version]-linux-x64.tar.gz 파일을 받아서 압출을 풀고, /usr/local/java 밑으로 이동 후 해당 위치를 JAVA_PATH로 추가 하여 처리 

#after download
tar -xvf /path/to/file.tar.gz

#after uncompress
vi ~/.bashrc

#Move last line Add this
JAVA_HOME=/path/to/unpacked/archive
export PATH=$PATH:$JAVA_HOME/bin

참고 URL : http://askubuntu.com/questions/673633/installing-java-on-ubuntu


4. Ubuntu를 사용해본 첫 느낌은.. 

일단 무겁다 입니다. 생각보다 무겁습니다. 많이....


기본 GUI 인 Ubuntu Desktop가 무거운건지, 많이 버벅입니다. 

GUI는 변경이 가능하다고 하니, 가벼운게 무엇인지 검색을 해봐야겠네요.

참고 URL : http://www.htpcbeginner.com/lightweight-desktop-environment-for-ubuntu-server/

Posted by lahuman

댓글을 달아 주세요

Centos 또는 fadora 등에서 NGINX를 yum으로 설치할 경우 버젼은 1.6.3 입니다.(2015년 7월 6일 기준)

최신 1.9.2 버젼에서 몇가지 오류(1.9.1 버젼의) 수정과 stream moudle 의 성능관련 많은 변화가 있어, 설치를 해보았습니다.

(현재 안정화된 버젼은 1.8.0 입니다. 혹시 서비스를 하실 분은 안정화 버젼 사용을 추천 드립니다.)


다음 내역은 여기 에서 해당 파일을 다운 받을 수 있습니다.


우선 nginx.org 사이트에서 최신 버젼을 다운 받습니다.


TIP : 만약 Docker를 이용하지 않으실 분은 다운로드 이후, run.sh만 따라서 진행하시면 설치가 가능합니다.


Dockerfile을 생성합니다.

# lahuman@daum.net 

FROM centos:centos7
MAINTAINER The CentOS Project 

RUN yum -y update; yum clean all
RUN yum -y install epel-release tar ; yum clean all
#RUN yum -y install gcc-c++ zip unzip wget openssl pcre-dev pcre-devel zlib-devel make ; yum clean all
RUN yum -y install gcc gcc-c++ make zlib-devel pcre-devel openssl-devel

# 다운 로드 진행 혹시 동작 하지 않을 경우, 수동으로 처리 하셔요.
RUN  wget http://nginx.org/download/nginx-1.9.2.tar.gz
RUN tar -xvzf nginx-1.9.2.tar.gz


# Dokcerfile에서 설정을 진행 하였을 경우 오류 발생 하여 멈추는 현상 있습니다. Shell 파일로 처리 하셔요.
ADD run.sh /run.sh
RUN /run.sh

EXPOSE 80

CMD [ "/usr/sbin/nginx" ]


run.sh 파일을 생성합니다.

#!/bin/sh

cd /nginx-1.9.2
./configure \
--user=nobody                          \
--group=nobody                         \
--prefix=/etc/nginx                   \
--sbin-path=/usr/sbin/nginx           \
--conf-path=/etc/nginx/nginx.conf     \
--pid-path=/var/run/nginx.pid         \
--lock-path=/var/run/nginx.lock       \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module        \
--with-http_stub_status_module        \
--with-http_ssl_module                \
--with-pcre                           \
--with-file-aio                       \
--with-http_realip_module             \
--without-http_scgi_module            \
--without-http_uwsgi_module           \
--without-http_fastcgi_module

make

make install

/usr/sbin/nginx



우선 Docker 에서 이미지를 생성 합니다. 이미지 생성 명령은 다음과 같습니다.

docker build --rm -t lahuman/nginx1.9.2 .


이후, Container를 생성 및 기동 합니다.

(/bin/bash로 실행 후, 다시 nginx를 기동 해야 합니다. 아마, nginx만 실행후 바로 컨테이너가 종료 되는 듯 하네요.)

docker run --name=nginx -d -it -p 8800:80 lahuman/nginx1.9.2 /bin/bash


마지막으로 해당 컨테이너에 접근 후 nginx를 기동 합니다.

docker exec -it nginx /bin/bash
/usr/sbin/nginx


이렇게 설치를 하고 화면을 확인 하면, 다음과 같습니다.





추가 nginx기초 명령어 (참고)

#기본 시작 명령어
/usr/sbin/nbinx

#중지 명령어
/usr/sbin/nginx -s stop



추가적으로 SSL 설치 관련 내용 참고 : 

https://haandol.wordpress.com/2014/03/12/nginx-ssl-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0startssl-com%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC/



설치 참고 :

https://www.digitalocean.com/community/tutorials/how-to-compile-nginx-from-source-on-a-centos-6-4-x64-vps

Posted by lahuman

댓글을 달아 주세요