[완료]<모니위키> 개인전용 사용목적으로 인증을 걸려면?

venture24의 이미지

안녕하세요.

모니위키를 개인전용으로 사용하기 위해 인증을 걸고자 합니다.
쓰기나 지우기를 차단하는 것이 아닌, 저 이외의 다른사람의 접속 자체를 차단하려 합니다.

1. 아파치 디렉토리 인증
여기 저기 찾아보니 아파치 디렉토리 인증을 하면 된다고 하는데요,
두가지 문제점에 봉착했습니다.

질문1> 아파치 디렉토리 인증을 쓰면 서버 성능이 저하된다고 나와있네요?
(참고 : http://httpd.apache.org/docs/2.2/howto/htaccess.html)
회사의 업무용 서버에 설치해 사용하는것인데 디렉토리 인증을 해도 되나 모르겠네요?

질문2> 더 큰 문제는 위의 문서나 여기저기 서핑, 구글링을 해봐도 디렉토리 인증을 하기가 어렵네요.
왕 초보도 이해갈만한 디렉토리 인증방법이 안내된 페이지가 어디 없을까요?

2. 모니위키 자체 혹은 플러그인으로?

질문3> 모니위키 자체에 최초 접속시부터 사용자 인증을 하여 인증되지 않은 사용자를 차단하는 기능이 있을까요?

질문4> 아니라면 혹시 이런 기능이 있는 플러그인이 있을까요?

<참고>제가 설치한 모니위키의 버전이 이거인지는 모르겠습니다만, 파일명이 이렇습니다 : moniwiki-1[1].1.2.tgz 1.1.2 버전이라고 해야하나요?

비 전문가가 모니위키를 사용하기가 정말 쉽지 않군요 ^^;;
아시는 내용 한가지라도 답변해주신다면 정말 감사하겠습니다.

slomo의 이미지


쓰기나 지우기를 차단하는 것이 아닌, 저 이외의 다른사람의 접속 자체를 차단하려 합니다.

라는 것이 정확히 무슨 의미인지 약간 혼동이 됩니다.
아예 아무 내용도 뜨지 않게 하는 것은 모니 위키의
보안 플러그인으로는 불가능할 겁니다.

하지만 위키 사이트 제목 정도와 메뉴는 노출이 되지만
페이지의 내용은 전혀 읽을 수 없게는 할 수 있습니다.

그러니까, 다른 사람의 접속을 차단한다는 의미를 쓰기,
지우기와 더불어 읽기 까지 차단한다는 의미라면
그것은 모니위키에서 제공되는 보안 플러그인으로
가능합니다. 다음 페이지도 한번 참조하시구요.

* http://moniwiki.sourceforge.net/wiki.php/Ko%7ESecurityPlugin

우선 읽기를 막으려면 기본적으로 config.php 파일에 다음
라인을 추가해 주어야 합니다.

$control_read=1;

위 옵션이 읽기를 막아주는 것은 아닙니다. 읽기를 콘트롤 하는 것이
가능하게 해주는 것 뿐입니다. 이 옵션이 있어야 읽기를 허가하거나
금지하거나 하는 것이 가능해집니다.

모니위키 기본 설정이 읽기에는 아무런 제약도 가할 수 없게 되어
있기 때문에 위 옵션을 넣지 않으면 아무리 보안 설정을 읽기 금지로
해도 다 공개됩니다. 위 옵션을 넣어 주면 읽기에 대한 콘트롤이
가능해집니다.

이제 보안 설정을 해야 하는데, 여러가지가 있지만 제가 해 본 것으로는
다음 두가지가 있습니다.

* 버전 1.1.2 부터 시험적으로 제공되기 시작한 ACL 모듈을 이용
* 이전 버전에도 제공되는 authbasic 모듈을 약간 수정하여 사용

A. authbasic 모듈을 이용하는 경우:

authbasic을 고쳐서 사용해 본 것은 아주 간단한 대신에 뭔가 좀
깔끔하지 못한 느낌이 늘고 이상하게 로그인이 된 상태인데도
익명인 것처럼 처리가 됩니다. 혼자서만 사용하는 위키라면 뭐
문제가 없겠지요.

1. config.php 파일에 다음 라인을 추가합니다.

$security_class='authbasic';

2. plugin/security/authbasic.php 을 열어서 다음처럼 원래 코드를
주석 처리하고 새로운 코드로 바꿔줍니다.

 #       $allowed_actions=array("savepage","read","raw","info",
 #           "likepages","uploadedfiles",
 #           "css","theme","userform","fixmoin");
        $allowed_actions=array();

array 안에 나열된 것은 익명사용자가 사용할 수 있는 허가된
action들입니다. 그것을 전부 없애 버리면 익명사용자는 아무
것도 할 수 없게 되죠.

이제 사이트를 열어 보시면 아무 페이지도 볼 수 없는 것을
알 수 있습니다. 아마도 편집 버튼 같은 것을 클릭하시면
로그인 팝업창이 뜰 겁니다. 물론, 로그인하고 나면 모든
기능을 쓸 수 있습니다.

B. ACL 모듈을 이용하는 경우:

1. config.php 파일에 다음 라인 추가

$security_class='acl';

2. config/acl.default.php 파일에 보안 설정. 예를 들어

*                         @User              allow   *
UserPreferences   Anonymous       allow   read,userform
*                         Anonymous       deny    *

첫 컬럼은 페이지 두번째 컬럼은 사용자 네번째 컬럼은 action입니다.
첫 줄은 모든 페이지에 대해서 계정 사용자에게 모든 action을
허락한다는 뜻입니다. 세번째 줄은 모든 페이지에 대해서
익명 사용자에게 모든 action을 거부한다는 뜻이구요.

두번째 줄에서 UserPreferences를 익명사용자에게도 열어 놓았습니다.
로그인을 하기 위해서입니다. 이것을 막으면 아무리 계정이 있다고
해도 로그인할 방법이 없어지지요.

이제 문제가 생깁니다. 누구나 마음대로 UserPreferences에서 가입
신청을 한 후에 로그인하면 되니까요. 마지막으로 할 일은
새로운 사용자 등록을 막는 것입니다.

3. 사용자 가입 제한하기

방법은 여러 가지가 있습니다. 다음과 같은 방법이 있다고 들었습니다.

(1) 사용자 파일이 저장되는 data/user 디렉토리를 쓰기가 불가능
하도록 바꿉니다. 이미 등록된 사용자는 로그인할 수 있고 사용자
정보 수정도 가능하지만 새로 가입하려고 하면 에러가 납니다.
가장 쉬운 방법입니다.

(2) userform.php을 수정해서 로그인만 할 수 있게 하고 사용자
가입은 안 되게 한다. (사용자 가입 form만 뜨지 않게 하는 것은
쉬운데 그래봤자 가입할 수 있다고 들은 것 같습니다.)

저는 wikilib.php와 userform.php의 일부를 수정하며 새로운
사용자가 등록을 하면 계정은 생기지만 로그인은 할 수 없도록 하고
관리자가 허가를 한 후에 로그인을 할 수 있도록 바꾸어 보았습니다.
방법은 이렇습니다.

3.1. wikilib.php의 saveUser 함수의 뒷부분에 다음과 같은 내용 추가

  function saveUser($user) {
 
   ...
 
 
   $user_exists = file_exists($this->user_dir."/wu-".$user->id); #추가
 
   $fp=fopen($this->user_dir."/wu-".$user->id,"w+");
   fwrite($fp,$data);
   fclose($fp);
 
   if (!$user_exists)     #추가
        chmod($this->user_dir."/wu-".$user->id, 0);  # 추가
 
  }

새로운 사용자 계정이 만들어지면 사용자 파일의 퍼미션을 000으로
합니다. 따라서, 읽을 수도 없으므로 로그인이 되지 않습니다.
이것만으로도 충분합니다. 뒤 이어지는 부분은 단순히 메시지를
달리 내보내기 위한 목적입니다.

3.2. wikilib.php의 getUser 함수에 다음 내용을 추가합니다.

function getUser($id) {
    if ($this->_exists($id)) {
        # 추가 시작------------------------
        if ( substr(sprintf('%o', fileperms("$this->user_dir/wu-$id")), -4) == 0) {
                $user=new User('Unapproved');
                return $user;
        }
        # ------------------------추가 끝
       $data=file("$this->user_dir/wu-$id");
    } else {
       $user=new User('Anonymous');
       return $user;
    }

3.3. userform.php에 다음 내용 추가

    if ($login_ok or $user->checkPasswd($options['password'])=== true) {
        $options['msg'] = sprintf(_("Successfully login as '%s'"),$id);
        $options['id']=$user->id;
        $formatter->header($user->setCookie());
 
        $userdb->saveUser($user); # XXX
      } else {
          if ($user->id == 'Unapproved') {                   #추가
            $title = sprintf(_("Unapproved user !"));        #추가
          } else {                                                            #추가
            $title = sprintf(_("Invalid password !"));
         }                                                                       #추가
      }

3.4. 새로운 사용자 계정을 사용할 수 있도록 허가하려면 data/user/ 파일의
퍼미션을 666으로 바꾸어 주면 됩니다.

====
No one asks you for change or directions.
-- Slo-Mo, J. Krokidas

====
No one asks you for change or directions.
-- Slo-Mo, J. Krokidas

venture24의 이미지

아직 테스트는 못해봤지만 우선 감사드립니다.
내일 시도해보겠습니다.
감사합니다.

익명 사용자의 이미지

config.php에 $no_register=1;을 넣어주시면 가입이 제한됩니다. :>

slomo의 이미지

좋은 정보 감사합니다. 그런 옵션이 있는 줄은 몰랐네요.

원래 질문하신 분이 원하시는 대로 접근 자체를 막는 것은 $no_register=1 옵션으로 해결하는 것이 좋겠습니다.

그런데, 제가 원하던 것은 가입, 그러니까 계정 생성은 되는데
즉시 사용이 불가능하고 관리자 허가 후 사용할 수 있는 그런
방식이었는데요. 혹시 그것도 간단하게 옵션으로 해결할 수
있는 방법이 있을까요?



그리고, 원래 질문에 대해서 다시 답변을 정리해 보면:

읽는 것을 막고 가입도 안 되게 막아 개인용 위키를 만들려면 다음과 같이 간단하게 해결됩니다.

1. config.php 파일에 다음 라인 추가

$control_read=1;
$security_class='acl';
$no_register=1;

2. config/acl.default.php 파일에 보안 설정. 예를 들어

*                         @User              allow   *
UserPreferences   Anonymous       allow   read,userform
*                         Anonymous       deny    *

====
No one asks you for change or directions.
-- Slo-Mo, J. Krokidas

====
No one asks you for change or directions.
-- Slo-Mo, J. Krokidas

sephiron의 이미지

order allow,deny
allow my ip
deny from all

로는 안되나요?

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.