본문 바로가기
ОКБ (실험 설계국)/IT Project

2. [IDPW Project] - 2차 진행[2019.01.17. ~ 2020.02.02]

by Rosmary 2020. 2. 2.
728x90
반응형

간만의 포스팅이다. 새해 첫 달의 절반이 순삭된 듯한 느낌을 받을 정도로 일이 바빠, 포스팅을 올릴 만한 행위가 거의 없었다. 다행히 바쁜 일이 하나 둘씩 순차적으로 처리되면서 새해 시작 보름만에 저녁 시간을 활용해 무언가를 할 수 있게 되었다. 

 

타고난 성격이 끊임없이 머릿 속에서 무언가를 생각하는 타입이라 그런지, 출퇴근때나 외근 이동길에 종종 이 프로젝트를 어떻게 이어나갈지에 대해 지속적으로 고찰해왔다. 그 고찰 덕분에 보름 정도의 짧은 시간동안, 기본적인 기능이 (완전하지는 않더라도) 무리없이 동작하는 수준의 프로그램이 만들어졌다. 지금까지 만든 프로그램의 대략적인 특징은 다음과 같다.

 

 

1. 다중 사용자를 위한 프로그램이다.

 

말 그대로다. 이 프로그램은 사실 필자 혼자 사용하기 위해 만들었다가, 가족들도 같이 쓰면 어떨까 싶어 갑작스럽게 여러 계정을 등록할 수 있도록 손을 봤다. 이 프로그램은 두 가지 모드로 작동하는데, 하나는 싱글모드, 하나는 그룹 모드다. 싱글 모드는 말 그대로 1인 사용자를 위한 모드이고, 그룹 모드는 여러 사용자가 이 프로그램을 사용할 경우 설정하는 모드라고 보면 된다.

 

 

싱글모드는 단 하나의 관리 계정과 사용자 계정만이 로그인 할 수 있도록 되어 있다. 이 모드는 설치 과정에서 선택하며, 이후 관리자 계정으로 로그인해서 모드를 변경하는 것도 가능하다. 싱글 모드를 그룹모드로 변경하면, 여러 일반 사용자 등록이 가능하며, 반대로 그룹 모드에서 싱글모드로 전환하면, 일반 사용자의 추가 등록이 불가능한 것은 물론, 프로그램 설치 시 만들었던 단 하나의 일반 사용자 계정만 로그인이 가능하다. 

 

 두 계정의 조회 결과. gmail처럼 다중 계정이 사용 가능한 사이트가 존재하기 때문에, 한 사이트에서 여러 계정을 등록할 수 있도록 만들었다.

프로그램을 여러 개 띄워서 서로 다른 계정으로 접속해도 사용에 전혀 지장이 없다. 사용자 계정이 다른 경우, 이들은 지정된 파일 외에 다른 파일에는 접근할 수 있는 권한 자체를 얻지 못하기 때문이다. 각 계정이 접근할 수 있는 파일은 프로그램 계정 생성 시, 최초로 결정되며 변경은 불가능하다. 따라서 위와 같이, 서로 다른 계정으로 동일한 사이트의 계정을 검색하더라도, 타인의 계정이 화면에 나타나는 경우는 발생하지 않는다. 설령 기록 파일을 조작하더라도 말이다. 파일을 조작하는 경우, 아래와 같이 나타난다.

 

 

 

2. 프로그램 설정 및 관리 계정과 사용자 계정이 구분된다.

 

리눅스는 UID가 0번으로 지정된 계정(대부분이 root다)이 리눅스 내의 시스템 관리와 조작은 물론이고 일반 사용자처럼 행동하는 것이 가능하다. 이를 super user 계정이라고 부르는데, 리눅스 시스템을 관리해야하는 특성 때문에, 일반 사용자가 자신 외에는 읽고 쓰는 권한을 가질 수 없도록 만든 파일이라고 할지라도 맘대로 읽고 쓰는 것이 가능하다.

 

하지만 필자의 프로그램은 조금 다르다. 만약 하나의 계정으로 프로그램 설정과 계정 관련 작업이 가능한 경우를 가정해보자. 일반 사용자 계정으로 로그인 후, 이 계정 소유주가 로그아웃 없이 자리를 비웠을 때, 누군가에 의해 프로그램 설정이 변경될 수 있다. 프로그램 설정 내용에는 프로그램 로그인 시도 횟수도 포함되는데, 만약 제 3자가 이 값을 1로 바꿔놓는다면? 한 번의 입력 실수로 이 프로그램을 사용할 수 없게 되는 것이다. 

 

 

설정한 로그인 시도 횟수를 초과하면, 위와 같이 계정이 잠기게 되는데, 이 계정 잠김을 풀 수 있는 유일한 계정이 관리자 계정이다. 즉, 관리자 계정이 잠겨버리면? 프로그램 새로 깔아야된다. 새로 설치하더라도 기록을 복구할 수 있는 프로세스가 있기 때문에 큰 문제는 없지만, 이 과정이 조금 귀찮다.

 

관리 계정으로 접속해야만 잠긴 계정을 풀어줄 수 있다.

따라서, 사용자 계정과 관리 계정이 분리되어 있으며, 사용자 계정에서 프로그램 설정 섹션으로 넘어가려고 하면, 아래처럼 오류가 발생한다. 반대로, 관리 계정은 사용자 계정 섹션을 사용할 수 없다.

 

 

3. 무의식적으로 타인에게 계정 정보가 노출되는 것을 방지한다.

 

계정 조회 화면은 다음과 같이 나타난다.

 

 

무의식적으로 타인에게 계정이 노출되는 것을 막기 위해, 삼중 조치를 취해보았다. 우선, 계정의 조회, 삭제, 변경은 진행 전에 비밀번호를 한 번 더 입력하는 과정을 거침으로써, 타인에게 노출될 확률을 현저하게 줄였다. 일차적으로 비밀번호를 통해 사용자 인증을 받으면, 사용자가 등록한 모든 계정을 보여주는 것이 아니라, 특정 사이트 계정만 찾을 수 있도록 설계해 놓았다. 마지막으로, 출력되는 계정 정보가 무방비로 노출되는 것을 막기 위해, * 문자로 계정과 비밀번호의 가운데를 처리했다. 앞, 뒤로 두 글자만 보이게 설계했는데, 대부분의 사람들이 비밀번호의 뒷자리만 변경해서 사용하는 경우가 많고, 완전히 다른 비밀번호를 쓰는 경우, 앞의 두 글자로 판별할 수 있기 때문이다. 정 판별이 안되는 경우를 방지하기 위해, description 영역도 설정했는데, 이 곳에는 비밀번호에 관한 간단한 힌트를 적어도 좋다.

 

 

4. 프로그램 관련 모든 파일은 암호화되어 있다.

 

설령, 누군가가 악의를 가지고, 프로그램의 설정 파일과 사용자 기록 파일을, 프로그램을 거치지 않고 조회하는 것은 불가능하다. 예시를 위해, 프로그램 설정파일 하나를 열어보면, 다음과 같이 나타난다.

 

 

알 수 없는 문자로 암호화된 내용만이 고스란히 나타난다. 이 내용을 프로그램을 통해서 보면 다음과 같이 나타난다.

 

 

파일 암호화를 위한 키가 프로그램 내에 내장되어 있는데, 이 키가 시간이 조금이라도 달라지면 랜덤한 패턴으로 변하기 때문에, 일반인들이 복호화하기에는 매우 시간이 많이 걸린다(늘상 말하는 것이지만, 암호학 전문가라면 필자의 암호 패턴은 금방 풀린다...). 

 

 

5. 프로그램 내의 사용자 행동을 기록할 수 있다.

 

관리자 계정으로, 이 프로그램을 사용하는 모든 사용자가 행한 행위를 확인하는 것이 가능하다. 관리자 계정으로 로그인 후, 그냥 엔터를 치게 되면, 다음과 같이 프로그램이 기록한 사용자의 모든 행위를 낱낱히 볼 수 있다.

 

 

계정 등록과 삭제, 방금전에 실행했던 로그인 실패 및, 계정 잠금과 해제까지도 모두 표시된다. 이를 만든 이유는, 프로그램에 이상이 발생하는 경우, 어디에서 잘못되었는지 확인하기 위한 용도로 만든 것이다. 따라서, 단순히 계정 조회를 하는, 프로그램에 큰 영향을 미치지 않는 행위는 기록이 되지 않는다.


다행히 빠른 시간 안에, 기본적인 동작이 가능한 프로그램을 제작할 수 있었다. 하지만 첫 operative qualification에서 보완 또는 추가해야 할 점이 몇 가지 있다.

 

1. 프로그램 계정의 비밀번호 변경을 가능하도록 제작하고, 프로그램 계정 비밀번호 변경 주기를 3개월로 할 것.

 

-  사실, 3개월마다 프로그램 계정 비밀번호를 변경할 수 있도록 선수 작업은 진행해 놓았다. 다만, 원체 시간이 부족한 탓에 비밀번호 변경 주기까지 크게 신경쓰지 못했다. 3차 프로젝트 수행 시에 반드시 완결해놓아야 하는 사항이다.

 

2. 계정 조회, 변경, 삭제 시, 비밀번호 외에 인증키를 사용할 수 있도록 제작할 것.

 

-  마찬가지다... 첫 설계 단계에서 적어놓았던 내용인데 마찬가지로 시간 부족으로....

 

3. 백업 서버로 백업 파일 자동 전송 기능을 포함할 것.

 

-  마찬가지로 첫 설계 단계에서 작성한 내용이다. 하지만, 자동 전송의 경우, 파이썬에서 ssh 자동 접속을 할 수 있는 코드를 다운받아 실행해 보았지만 아직까지 제대로 동작하는 것을 접하지 못했다(당연히 필자의 실력 부족이다). 해당 내용은 필자도 더 자료를 찾아봐야할 내용이라, 3차 진행 시에도 완료되지 못할 가능성이 크다.

 

4. 프로그램 자체에서 저장된 계정을 사이트 로그인 창에 자동으로 작성할 수 있도록 할 것.

 

-  대부분의 사이트에서, 파이썬에서 작성한 코드로 로그인 페이지를 파싱하여 ID와 비밀번호를 입력하는 것은 가능하다(작년에 필자가 많이 해 본 것이다). 하지만, 캡챠같은 프로그램으로 인해, 해당 정보를 입력해도 로그인 버튼이 파이썬에 의해 동작하지 않도록 막아놓은 곳이 99.9%라, 자동 로그인까지는 불가능하다(그런 거 있지 않은가... 로그인 할 때, "나는 로봇이 아닙니다"와 같은 문구가 뜨거나 "주제에 알맞는 그림을 고르세요" 같은 것...). 이는 사실 첫 설계 당시 계획에 없다가, 최근 들어서 떠올린 아이디어라 3차 진행 시에 완료할 수 있을 듯 하다.

 

 

이제 필자는 올해 목표로 한 시험이 얼마 남지 않아 당분간 이 프로젝트는 중지한다. 시험 이후에, 추후 진전 사항이 있다면, 다시 이 프로젝트에 대한 내용을 포스팅하려고 한다.

 

FIN.

반응형

댓글