Trac 설치가 거의 완료되었다고 안심한 순간!
역시나 다를까?! 또 문제가 발생하였다. 새로운 Framework이 적용된 OS는 항상 사용자를 당황케 한다.
역시나 SELinux에서 문제가 발생하였다.

SELinux가 문제가 되는지 가장 빨리 확인하는 방법은 setenforce 0 를 수행하여 SELinux를 비 활성화 시킨다음 문제가 되는 기능을 수행해 보는 방법이다.

예상했던대로 비활성화 시에는 아무런 문제없이 잘 수행되는 기능이 setenforce 1 로 SELinux를 활성화 시키면 다음의 에러를 발생하였다.

사용자 삽입 이미지

처음엔 간단한 문제로 생각하였다. home/svn/publicsvn/test2 이하를 chcon -t httpd_sys_content_t 로 바꾸어주면 문제가 모두 해결되겠거니 하고 생각하였다. ㅠ.ㅠ 그러나 오산이었다.

이때 부터 헤매임이 시작되었다. 구글 신공도 신통치 않았다.
대략 찾아본 페이지들은 다음과 같았다.
  • http://trac.edgewall.org/wiki/TracOnRhel5

    그중 너무나 고맙게도 영감을 주는 글이 있었다.(역시 뭐든지 원리 이해가 필요했다. 조만간 SELinux의 내부 원리를 탐독할 필요가 있을 것으로 생각된다.)
    http://lists.edgewall.com/archive/trac/2006-June/008191.html

    SELinux는 고맙게도 자신이 거부한 것에 대한 안내를 /var/log/audit/audit.log에 친절히 남겨주고 있었다. 이것을 보기좋게 보여주는 audit2allow -a 명령은 불행하게도 별 도움이 되지 못했다.
    다음은 /var/log/audit/audit.log를 직접 분석하여 위의 문제를 해결하는 일련의 과정이다.

    사용자 삽입 이미지

    음... 이 고비는 일단 넘겼지만 Apache 웹 데몬에서 실행되는 mod_python의 디렉토리, 파일 I/O에 대해 그 대상이 httpd_sys_script_rw_t 를 가지고 있어야 한다니, 벌써부터 예상되는 문제가 떠오른다.
    아마 산너머 산이 될까? 다행히 type 부여후 새로 생성되는 것들은 부모의 속성을 이어 받는듯 하다. 정말 다행 스런 일이다.

    PHP는 httpd_sys_content_t로 만사 오케이 이건만 ^^;

    여하튼 그동안 정확한 원인을 몰라 쩔쩔매던 것이 이렇게 SELinux가 자신이 거부한 것에 대해 친절이 로그를 남기고 있다니 천만 다행이다.
  • 크리에이티브 커먼즈 라이센스
    Creative Commons License
    2007/12/31 18:30 2007/12/31 18:30
    Tags: ,

    예전 회사에서 보안 Kernel을 위해 PKI 알고리즘을 사용하여 실행화일 수행시 서명이 통과된 실행화일만 수행 가능하도록 했던 프로젝트라던지,  ETRI 프로젝트를 진행하면서 역할 기반한 인증서 발급 시스템의 Framework을 개발했던 기억이 난다.
    모두 보안 이슈로서 허가받지 않은 행동이 이루어지는 것을 막고자 하는 열망에서 기인한 프로젝트 들이었다.

    Linux의 Kernel에도 드디어 보다 진보된 보안 시스템이 도입되어 실용화 되었다. 그것이 바로 SELinux이다.
    일단은 사용자, 프로그램, 프로세서 들의 주체와 파일, 디렉토리, 디바이스 등의 대상 리소스를 분리하여 각각의 범주를 정의하고 개별 리소스에 대해 각 범주를 설정한다는 측면에서 기존의 사용자 소유권에 기반한 보안 시스템보다 훨씬 안전한 보안을 보증해 주길 기대해 본다.

    하지만, 덕분에 SELinux에 대한 이해 없이는 매 문제가 발생할 때 마다 구글 신공을 발휘해야할 처지에 놓였있다.

    Http 데몬의 Listen 포트(8888)를 하나 추가하였는데 컥 커널에서 Bind시 에러가 발생하였다.
    결국 문제는 SELinux와 결부되어 있었다.

    [root@ProjectS conf.d]# service httpd restart
    httpd 를 정지 중:                                          [  OK  ]
    httpd: Could not reliably determine the server's fully qualified domain name, using 218.158.45.145 for ServerName
    (13)Permission denied: make_sock: could not bind to address [::]:8888
    (13)Permission denied: make_sock: could not bind to address 0.0.0.0:8888
    no listening sockets available, shutting down
    Unable to open logs
                                                               [실패]
    [root@ProjectS conf.d]#

    semanage 명령을 사용하여 8888 포트를 http에 대해 접근을 허가한 후에 정상적으로 bind 될 수 있었다.
    조만간 SELinux에 대한 이해가 필요할 듯 하다.

    참고문서 :
      http://centos.pe.kr/owiki/index.php?url=centos&no=11
      http://www-128.ibm.com/developerworks/kr/library/l-selinux/index.html
      http://www.nsa.gov/selinux/

    크리에이티브 커먼즈 라이센스
    Creative Commons License
    2007/12/30 18:06 2007/12/30 18:06
    Tags:
    사용자 삽입 이미지

    Microsoft Press 무료 E-Book : http://csna01.libredigital.com/

    크리에이티브 커먼즈 라이센스
    Creative Commons License
    2007/12/29 01:44 2007/12/29 01:44
    Tags:
    Google Code Pretty 프로젝트의 prettify.js 파일을 분석하다. 뇌가 폭발해 버렸다.

    변태 자바스크립트 소스파일 - 필요없는 공백(개행포함)문자가 제거된 엽기적 한줄짜리 소스
    어떤 놈이 이딴걸 생각해 냈는지... 참...
     
    http://mygony.com/archives/886
     (BTCode)
    http://www.phpclasses.org/browse/package/3158.html (PHP Javascript Compressor Class)
    http://www.crockford.com/javascript/jsmin.html (The JavaScript Minifier)
    MemTronic's FREEWARE HTML/JavaScript Cruncher-Compressor v1.0k
    http://hometown.aol.de/_ht_a/memtronic/MemTronic_CruncherCompressor.html
    http://javascriptcompressor.com/ (javascript compressor)

    등등

    Ajax 때문에 수많은 javascript 파일을 어떻게 압축해야 할지가 성능 이슈가 되고 있다고 한다. 그래서 수 많은 Compressor 들이 등장하고 있다.

    Javascript Compress and Minify Skill - 1

    압축을 풀어주는 것은 없나? 긴 함수이름을 짧은문자로 변형해 버리니 원본 복원은 안되더라더 적어도 띄워 쓰기 및 줄바꿈 정도만 어떻게라도

    ㅠ.ㅠ 이거 소스 분석 최악이다. 정말 울고 싶당!
    크리에이티브 커먼즈 라이센스
    Creative Commons License
    2007/12/28 02:14 2007/12/28 02:14

    DokuWiki의 플러그인들이 좋기는 하나 조금씩 버그를 가지고 있는 듯하다.
    버그라기 보다는 여러 플러그인들이 혼용하여 쓰일 때 충돌로 인해 생기는 문제...

    버그 수정을 위해 급기야 css를 수정하기에 이르렇다.
    문제를 해결하기 위해 다음의 keyword들을 주의하며 살펴보았다.

    1. width
    2. overflow
    3. float

    floating에 관한 좋은 글이다.
    xhtml & css - float에 관하여

    float과 overflow를 적당히 조절해보다가 결국 width로 문제를 해결하였다.
    덕분에 css와 javascript, html 코드간의 역학 관계에 대해 조금 이해할 수 있었다.

    이번에 수정한 코드는 TextCube의 SyntaxHighlighter에도 충분히 응용될 수 있을 것으로 보인다.
    TextCube의 SyntaxHighlighter를 확장해 보아야 겠다.

    크리에이티브 커먼즈 라이센스
    Creative Commons License
    2007/12/27 23:21 2007/12/27 23:21