RoundCube - Plugins 「persistent login」 로그인 유지 적용

    ◆ Plugin 「Persistent Login」

    「Persistent login」RoundCube 1.6.7 버전에 기본적으로 없는 Plugin입니다. 「autologon」라는 Plugin이 있긴 하나 소스단에 직접 ID/PASSWORD 정보를 적어야 하는 취약점이 있습니다. 그래서 RoundCube 사용 관리자들은 대부분 DB에 직접 「AuthTokens(토큰 기반 인증)」 정보를 저장할 수 있는 「Persistent login」 플러그인을 따로 설치하여 사용한다고 합니다. 「Persistent」 단어는 한국어로 끈질긴, 집요한, 끊임없이 지속되는 것을 의미합니다. 라운드큐브 메일서비스에서는 쿠키초기화나 세션만료에 의해 로그아웃되지 않고 계속 로그인을 유지시켜 주는 기능을 뜻합니다. ※ 로그인 ID/PASSWORD를 저장하는 것과는 별개의 기능. 웹메일서비스를 제공하는 솔루션이라면 편의상 많이 채용하는 기술이지만 이것도 보안팀에서는 취약점으로 볼 수도 있는 기능이기도 합니다.


    ① Persistent Login 설치하기「수동」 및 환경 설정

    Roundcube 관련 자료를 찾다가 아주 좋은 노트를 발견하여 공유합니다. 개인사이트인 것 같은데 리눅스 관련 노트를 아주 정성스럽게 정리를 해놓았습니다. 특히 RoundCube 노트 부분에 제가 필요하다 싶은 기능을 다 메모를 해놓았네요. 그 외에도 유용한 자료가 많아 필자도 즐겨찾기를 하였습니다. 조금 더 빨리 발견했더라면... 편했을 텐데 T^T

    Roberto Puzzanghera 사용자 블로그 참고

    플러그인 공급자 GitHub-mfreiholz/persistent_login 참고 

     

    ※ 필자는 처음에  Roundcube# 검색해서 나온 공급자 「texxasrulez/persistent_login」 플러그인을 「Composer」로 설치를 진행했었으나 마지막 릴리즈 버전「2020-08-04」으로 현재 Roundcube 1.6.7에서는 제대로 작동되지 않는 것을 알게 되었습니다.

     

    ◈ 수동 설치 진행

    [root@mail~]# cd /var/www/html/roundcube/plugins    [플러그인 경로 이동]

    [root@mail~]# wget -O persistent_login-5.3.0.tar.gz https://github.com/mfreiholz/persistent_login/archive/refs/tags/version-5.3.0.tar.gz    [전체한 줄, 최신버전 소스다운]

    ※ 버전 5.3.0 최신 마지막 버전 2022년 1월 30일

     

    [root@mail~]# tar xzf persistent_login-5.3.0.tar.gz    [압축 해제]

    [root@mail~]# mv persistent_login-version-5.3.0 persistent_login    [이름 변경]

    [root@mail~]# chown -R apache:apache persistent_login    [권한 설정]

     

    [root@mail~]# ll | grep login    [폴더 확인]
    drwxrwxr-x 5 apache apache  4096 Jan 30  2022 persistent_login

     

    ◈ 환경 설정 파일 복사 및 DB 구성

    [root@mail ~]# cd /var/www/html/roundcube/plugins/persistent_login/    [경로 이동]

     

    [root@mail persistent_login]# cp -arp config.inc.php.dist config.inc.php    [샘플 파일 복사]

    ※ config.inc.php.dist  「환경 설정 샘플 파일」

     

    [root@mail persistent_login]# vim config.inc.php    [환경 설정 열기]

    ◈ PHP 코드 중 [전부 기본값으로 하고 특정 값만 변경]

    12 // ----------------------------------

    13 // TOKEN BASED (MORE SECURE!) - OPTIONAL

    14 // Installation of database scripts required. (see "./sql/" folder)

    15 // ----------------------------------

     

    17 // Turn on feature to use tokens.

    18 $config['ifpl_use_auth_tokens'] = true;    [※ 인증 토큰, false → true 활성화]

     

    ※ 환경 설정 파일만 복사해도 바로 적용됩니다. 기본설정은 사용자 클라이언트에 쿠키를 저장, 다만 보안적으로 좀 더 안전하게 사용하실 경우는 선택사항으로 토큰 기반 인증을 활성화하는 게 좋습니다. 사용하기 위해서는 데이터베이스 스크립트 설치가 필요합니다.

     

    ※ 기본 값 「$rcmail_config」은 사용하지 않으므로 → 「$config」으로 변경이 필요합니다. vi/vim 명령 프롬프트에서 「:%s/rcmail_config/config/g」 입력하면 자동으로 치환됩니다.

     

    [root@mail persistent_login]# mysql -u root -p    [MariaDB 접근]

     

    MariaDB [(none)]> use roundcube;    [RoundCube DB 선택]

     

    ※ 하단 SQL 명령어 전체 한 줄 복사하여 테이블 및 컬럼 생성

    MariaDB [(none)]> CREATE TABLE IF NOT EXISTS `auth_tokens` (
    `token` varchar(128) NOT NULL,
    `expires` datetime NOT NULL,
    `user_id` int(10) UNSIGNED NOT NULL,
    `user_name` varchar(128) NOT NULL,
    `user_pass` varchar(128) NOT NULL,
    `host` varchar(255) NOT NULL,
    PRIMARY KEY (`token`),
    KEY `user_id_fk_auth_tokens` (`user_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    MariaDB [(none)]> ALTER TABLE `auth_tokens` ADD CONSTRAINT `auth_tokens_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE;

     

    ※ 해당 값 정보는 「~플러그인 설치경로/persistent_login/sql」에서 「mysql.sql / postgres.sql / sqlite.sql」파일을 통해 확인가능하며 DB 양식에 맞게 밀어 넣거나 직접 명령어 입력


    ② Persistent Login 플러그인 활성화 하기

    [root@mail~]# vim /var/www/html/roundcube/config/config.inc.php    [설정 파일 열기]

    ※ DocumentRoot 본인 RoundCube 설치 경로 ~/roundcube/config/config.inc.php

    ◈ PHP 코드 중

    // ----------------------------------
    // PLUGINS
    // ----------------------------------
    // List of active plugins (in plugins/ directory)
    $config['plugins'] = array('virtuser_query', 'persistent_login');    [추가]

    ※ 해당 설정 라인에 「persistent_login」 플러그인 추가 / 구분자 쉼표 콤마 「 , 」와 양쪽 따옴표 「 ' ' 」 사용으로 문법에 문제만 없다면 띄어쓰기는 문제없습니다.

     

    ◈ 한글화

    [root@mail~]# ~/roundcube/plugins/persistent_login/localization/    [경로 이동]

    [root@mail~]# cp -arp en_US.inc ko_KR.inc    [아무 파일 복사]

     

    [root@mail~]# vim ko_KR.inc    [설정 파일 열기 및 한국어로 수정]

     

    <?php
    $labels['ifpl_rememberme'] = '로그인 유지';
    $labels['ifpl_rememberme_hint'] = '보안상의 이유로 공용 컴퓨터에서는 이 기능을 사용하지 마십시오';
    ?>


    ③ 로그인 테스트 「DB Token 생성 확인」

     

    ◈ 조건

    1. 로그인 후 물리적으로 사용자가 직접 로그 아웃을 하지 않으면 「Expires(만료)」 시간까지 3일 동안 재 로그인 할 필요 없이 유지, 브라우저 창만 닫는다고 해서 DB의 토큰이 삭제되지 않음

     

    2. 단, 같은 브라우저 일 것

    예를 들어 마이크로소프트 엣지「Edge」로 로그인했으면 이후에도 같은 브라우저로 메일 URL 접근할 것, 다른 브라우저 구글 크롬「Chrome」으로 로그인하면 새로운 세션으로 접근하므로 다시 로그인해야 합니다.

     

    3. 「User-Data」 쿠키, 「AuthToken」 쿠키 기반 둘 다 사용자가 브라우저 쿠키를 초기화하면 재 로그인을 해야 한다.

     

    4. 「 config.inc.php」 설정에서 「// List of allowed IP masks」 특정 IP에서만 허용을 하면 그 외 클라이언트는 로그인 유지를 사용하지 못하도록 할 수 있다. 보안적으로 사용하는 것을 권고

     

    하나의 IP(호스트)만 등록 : '192.168.0.1/32'

    C클래스 범위 IP(호스트) 등록  : '192.168.10.0/24' (192.168.10.0 ~ 192.168.10.255)


    사용자 편의성으로 적용하면 좋은 기능이지만 메일 보안 검사에서 위배될 수 있는 기능입니다. 만료일을 적당히 조정하거나 특정 IP에서만 '로그인 유지' 기능을 사용할 수 있도록 적용하는 것을 권고합니다. ※ 모든 내용은 직접 테스트 및 확인한 내용만 업로드합니다. 오타나 잘못된 정보가 포함되어 있다면 지적 및 정보 공유 감사합니다.

    Designed by JB FACTORY