Journal of the Korea Academia-Industrial cooperation Society Vol. 17, No. 7 pp. 623-628, 2016 http://dx.doi.org/10.5762/kais.2016.17.7.623 ISSN 1975-4701 / eissn 2288-4688 파일접근로그를위한 FUSE 기반의 Syslog 에이전트 손태영, 임성락 * 호서대학교컴퓨터공학부 FUSE-based Syslog Agent for File Access Log Tae-Yeong Son, Seong-Rak Rim * Division of Computer Engineering, Hoseo University 요약시스템의로그정보는불법적인시스템접근에대한문제를해결하는데결정적인단서를제공하기때문에로그데이터의수집및분석은시스템관리자에게매우중요하다. 리눅스시스템에서는다양한종류의로그데이터를수집하기위하여 syslog 유틸리티를이용해오고있다. 그러나시스템관리자는 syslog 유틸리티에서지원하는서비스에의존해야하는한계가있다. 이러한한계를극복하기위하여본논문에서는시스템관리자로하여금 syslog 유틸리티에서지원하고있지않는파일접근에대한로그정보를수집할수있도록하는 syslog 에이전트를제시하고자한다. 제시한 syslog 에이전트의기본개념은 FUSE 를생성한후, syslog를이용하여 FUSE 가마운트된디렉토리에존재하는임의의파일에대한접근정보를로그파일에저장하는것이다. 제시한기법의기능적타당성을검토하기위하여리눅스 ( 우분투 14.04) 에서 FUSE 기반의 syslog 에이전트를구현하여임의의파일접근에대한정보를로그파일에저장하고저장된로그파일의정보를확인한다. Abstract Because the log information provides some critical clues for solving the problem of illegal system access, it is very important for a system administrator to gather and analyze the log data. In a Linux system, the syslog utility has been used to gather various kinds of log data. Unfortunately, there is a limitation that a system administrator should rely on the services only provided by the syslog utility. To overcome this limitation, this paper suggests a syslog agent that allows the system administrator to gather log information for file access that is not serviced by syslog utility. The basic concept of the suggested syslog agent is that after creating a FUSE, it stores the accessed information of the files under the directory on which FUSE has been mounted into the log file via syslog utility. To review its functional validity, a FUSE file system was implemented on Linux (Ubunt 14.04), and the log information of a file access was collected and confirmed. Keywords : syslog, FUSE(Filesystem in Userspace), File Access Log 보를수집하고분석하는일은시스템관리자에게매우중요하다 [2]. 그러나시스템관리자는시스템에서지원최근정보시스템의불법적인해킹혹은내부사용자하는서비스의로그정보에만의존해야하기때문에지원에의한개인정보유출등정보화의역기능이사회적인하지않는서비스의로그정보를수집하기위해서는관문제로대두되고있다 [1]. 이러한사건이발생할경우시리자가원하는로그정보를얻기위한기능을추가해야스템로그파일에저장된기록은그문제를해결하는데한다. 결정적인단서를제공하고있다. 따라서로그파일에정리눅스시스템에서는로그정보를수집하고관리하기본논문은 2015년도호서대학교의재원으로학술연구비지원을받아수행된연구임 (2015-0317) * Corresponding Author : Seong-Rak Rim(Hoseo Univ.) Tel: +82-41-540-5708 email: srrim@hoseo.edu Received May 11, 2016 Accepted July 7, 2016 1. 서론 Revised June 13, 2016 Published July 31, 2016 623
한국산학기술학회논문지제 17 권제 7 호, 2016 위해서 syslog 유틸리티를제공한다. syslog 유틸리티는로그정보를받고 syslog.conf( 환경설정파일 ) 에설정된서비스들 (facilities) 의중요도 (level) 에따라전달된로그정보들을화면에출력하거나파일에저장한다. 환경설정파일에서설정가능한서비스들은 Table. 1과같다 [3]. 이서비스들은주로커널메시지와사용자인증이나승인, 네트워크나디바이스를통해발생되는로그정보들이다. 만약사용자가시스템에서사용중인파일을이동이나삭제를하고잊어버릴경우관리자는이동이나삭제된파일에대한어떠한정보도얻을수없다. 따라서파일접근에대한로그정보가필요한경우관련정보를얻을수있는에이전트가필요하다. 파일접근에대한정보를얻기위한에이전트는파일시스템의형태로구현하는것이일반적이다. 하지만파일시스템은커널영역의모듈로구현해야하는데커널영역의모듈프로그래밍은매우어렵다. 이러한어려움을해결하기위하여본논문에서는파일접근정보를얻기위해 FUSE(Filesystem in Userspace) 를기반으로한사용자영역의응용프로그래밍으로동작하는에이전트를제시한다. Table 1. The Syslog Facilities Facility Description auth Authentication activity such as that reported by pam_pwdb. authpriv Authentication activity that may include privileged information, such as usernames. cron Messages associated with cron and at. daemon Messages assoicated with daemos, like inetd. kern Kernel messages. lpr Messages related to printing services. mail Messages related to electronic mail. mark A syslog internal facility used to generate timestamps. news Messages from the Internet news server. syslog Messages generated by syslog. user Any message generated by a user program. (default) local0~ local7 These facilities are for use with customized programs. * Wildcard representing all facilities except mark. 2.1 FUSE 2. 관련연구 FUSE는커널영역의모듈 (FUSE Module) 과라이브러리 (libfuse) 를사용하는응용프로그램이파일시스템역할을한다. FUSE 모듈은리눅스커널 2.6.X 버전이 후부터커널에포함되어있어 libfuse를사용하는응용프로그램만작성하면된다 [4]. 응용프로그램에서 fread() 를호출하여로컬파일시스템과 FUSE의파일데이터를읽는과정은 Fig. 1과같다 [5,6,7]. Fig. 1. fread() Operation Flow 응용프로그램에서 fread() 를호출하면 read 시스템콜을발생시킨다. read 시스템콜은 VFS(Virtual File System) 기능에서실행된다. VFS는읽기를원하는파일을관리하는파일시스템이어느파일시스템인지확인하여관련파일시스템으로읽기를요청한다. 로컬파일시스템의파일인경우, 읽기요청을받은로컬파일시스템은파일의데이터가어느디바이스에있는지확인하고해당디바이스를제어할수있는블록디바이스드라이버로읽기를요청한다. 블록디바이스드라이버는요청에따라하드웨어를제어한다. 하드웨어는요청에따라파일데이터를커널영역에있는캐시영역으로전송하고인터럽트를통해커널에전송완료를통지한다. 하드웨어에서인터럽트가발생하면블록디바이스드라이버는파일시스템으로읽기완료를통지한다. FUSE의파일인경우, 읽기요청을받은 FUSE 모듈은 /dev/fuse 디바이스파일을이용하여읽기요청을 libfuse로보낸다. libfuse는요청에해당하는 FUSE 응용프로그램으로부터파일데이터를받아캐시영역으로전송하고 FUSE 모듈로읽기완료를통지한다. 캐시영역으로파일데이터가전송되어파일시스템으로읽기완료통지가오면파일시스템은캐시영역의파일데이터를라이브러리가관리하는버퍼로데이터를 624
파일접근로그를위한 FUSE 기반의 Syslog 에이전트 복사하고 read 시스템콜처리를완료한다. fread() 는라이브러리가관리하는버퍼에서파일데이터를응용프로그램의버퍼로복사하고파일데이터읽기처리가완료된다. 2.2 기존연구기존의 FUSE를활용한연구들은사용자영역에서파일시스템의기능을구현할수있다는점을이용한네트워크를사용한파일시스템으로주로연구되었다. 기존의 NFS 서버에다수의클라이언트가접속되어병목현상이발생하는것을해결하기위한 pnfs 프로토콜을FUSE에적용시켜메타데이터서버로활용하는방법도연구되었다 [8]. 그리고 FTP, HTTP 등과같은프로토콜데이터도파일시스템에서제공하는일반파일과같이제공할수있다는점을이용하여네트워크를통해데이터를관리할수있는방법도연구되었다 [9]. 기존의연구들은커널영역의파일시스템에서구현하기어려운네트워크를기능을쉽게구현하기위한방법으로 FUSE를활용하였다. 하지만본논문에서는로컬시스템에서사용자의파일접근명령을얻기위해 FUSE 를활용한다. syslog 에이전트는실행될때마운트위치를받고해당위치에연결된다. 사용자는로컬파일시스템과 FUSE 의파일에접근할수있다. 하지만 syslog 에이전트는로컬파일시스템내용을사용자에게제공함으로써사용자는동일한파일에접근하게된다. 로컬파일시스템의파일데이터를읽는경우, 읽기요청은로컬파일시스템으로전달된다 (➀). 로컬파일시스템은블록디바이스드라이버로요청을전달하고 HDD의파일데이터를사용자에게제공한다 (➁). 이와같은경우에는파일접근에대한정보가로그파일에저장되지않는다. 하지만 syslog 에이전트가연결된 FUSE 의파일데이터를읽는경우, 읽기요청이 FUSE 모듈로전달된다 (➂). FUSE 모듈은라이브러리를통해읽기요청명령과읽기를원하는파일의경로를 syslog 에이전트로전달한다 (➃). syslog 에이전트는전달받은파일의경로를통해로컬파일시스템으로파일접근처리를위임하여파일접근을처리한다 (➄). 로컬파일시스템으로부터파일접근처리완료통지가오면 syslog 에이전트는 FUSE 모듈을통해전달된요청명령과파일의경로와같은파일접근에대한정보들을 syslog로전달한다 (➅). syslog는환경설정파일의설정에따라파일접근정보를로그파일에기록한다 (➆). 3. 제안기법 FUSE는다른파일시스템의파일들을제공할수있는가상의파일시스템으로 [10], syslog 에이전트는사용자에게로컬파일시스템의파일을제공하고파일접근정보를로그파일에기록한다. 파일접근로그를위한 FUSE 기반의 syslog 에이전트의기본개념은 Fig. 2와같다. 3.1 main 함수 syslog 에이전트의 main 함수는 Fig. 3과같이구현한다. int main(int argc, char *argv[]){ // connection syslog openlog( NULL, LOG_PID, LOG_LOCAL0 ); // mount fuse return fuse_main(argc, argv, &log_oper, NULL); Fig. 3. Main Function for Syslog Agent Fig. 2. Basic Concept of Syslog Agent openlog() 를호출하여 syslog로파일접근정보를전달할수있도록연결한다. syslog가파일접근정보를로그파일에기록할때 openlog() 의설정에따라정보를전달한프로세스이름 ( 기본설정 ; NULL) 과 PID(LOG_PID) 정보가같이기록되도록설정한다. syslog 에이전트에서수집한파일접근정보는 syslog의서비스중에서 LOG_ LOCAL0을사용하여 syslog로전달되고로그파일에기록된다. 625
한국산학기술학회논문지제 17 권제 7 호, 2016 fuse_main() 는 libfuse의라이브러리함수로내부적으로 fuse_mount() 를호출한다. fuse_mount() 는 FUSE 모듈과 syslog 에이전트를연결시키고, fuse_new() 를호출하여실행인자로받은마운트위치에 syslog 에이전트를파일시스템으로마운트시킨다. 마운트위치에파일접근이발생할경우 syslog 에이전트의 fuse_operations 구조체 (log_oper) 에정의된파일접근처리함수를통해파일접근을처리하도록한다. 3.2 파일접근처리함수 FUSE 에서제공하는 fuse_operation 구조체는 42 개 (FUSE 2.8.0) 의파일접근처리함수를제공한다. 제공되는모든기능을구현해도되지만원하는기능의파일접근처리함수만구현할수도있다. 본논문에서는파일이동과삭제에대한파일접근정보를기록할수있도록 Fig. 4 와같이구현한다. // get attribute for directory and file static int file_attr(){ // process file access by system call return 0; // read directory static int file_readdir(){ // process file access by system call return 0; // open file static int file_open(){ // process file access by system call call_func_log( func, path ); return 0; // fuse based operations structure static struct fuse_operations log_oper = {.getattr = file_attr,.readdir = file_readdir,.open = file_open, ; Fig. 4. Fuse Operations Functions FUSE의파일접근을위해서 getattr과 readdir 명령은반드시구현해야한다. 파일의이동은 open, read, mknod, write 명령이순서대로수행되고파일의삭제는 unlink 명령이수행되어파일접근을처리한다. 파일접근처리는각파일접근요청에맞는시스템콜을사용해로컬파일시스템을통한파일접근을처리 한다. 시스템콜을사용한파일접근처리가완료되면파일접근처리함수는파일접근정보를 syslog로전달하기위한파일접근로그함수를호출한다. getattr과 readdir 명령의함수는파일접근을위해서는반드시수행되고, 파일이동또는삭제와직접적인연관이없기때문에파일접근로그함수를호출하지않는다. 파일접근로그함수를호출할때파일접근요청확인을위한파일접근처리함수이름 ( func ) 과 FUSE 모듈로부터전달받은파일접근경로 (path) 를전달한다. 3.3 파일접근로그함수 파일접근처리함수로부터전달받은파일접근정보를 syslog로전달하여로그파일에기록하는함수는 Fig.5 와같이구현한다. // submit file access log to syslog void call_func_log(){ struct passwd *cur_user; // get request user id cur_user = getpwuid( fuse_get_context()->uid ); // send a file access message to syslog syslog(log_info LOG_LOCAL0, "%s => %s : %s\n", cur_user->pw_name, cmd_name, cmd_path ); Fig. 5. File Access Log Function 파일접근로그함수는파일접근처리함수로부터전달되는정보외의 fuse_get_context() 를이용하여파일접근을요청한사용자의 uid 정보를얻는다. 얻은 uid 정보는 getpwuid() 를통해서 uid 정보에대응되는사용자의정보구조체 (passwd) 포인터를얻는다. syslog() 는 syslog로정보를전달하여이정보를로그파일에기록하도록한다. syslog 로전달되는정보는 main 함수에서설정한서비스 (LOG_LOCAL0) 의 LOG_INFO 중요도로로그파일에기록된다. 로그파일에기록되는파일접근정보는파일접근을요청한사용자의 ID(cur_ user->pw_name) 와사용자가요청한파일접근요청을처리한파일접근처리함수이름 (cmd_name), 파일접근처리함수에서처리한파일의경로 (cmd_path) 를로그파일에기록된다. 파일접근이발생한시간정보는 syslog() 에서파일접근정보를기록할때시스템시간에따라날짜와시간정보가자동으로로그파일에기록된다. 626
파일 접근 로그를 위한 FUSE 기반의 Syslog 에이전트 4. 실험 및 평가 4.1 실험 제시한 syslog 에이전트의 기능적 타당성을 검토하기 위하여 Ubuntu(14.04)에서 Fig. 6과 같은 구조의 디렉터 리 및 파일을 생성한다. (a) local Directory Fig. 6. Initial Directory Structure 우선 syslog 에이전트가 실행되기 전에 fuse 디렉터리 에 파일이 존재하지 않음을 확인한다(➀). FUSE의 마운트 디렉터리를 /home/fuse로, syslog 에 이전트를 통해 접근할 디렉터리를 /home/local로 설정하 여 syslog 에이전트를 실행한다(➁). (b) fuse Directory mount와 ls 명령을 사용하여 FUSE가 /home/fuse에 마운트되어 있고(➂), fuse 디렉터리에 test 파일이 존재 Fig. 8. The Result of File Access Log 함을 확인함으로써 syslog 에이전트의 정상적인 실행을 Fig. 8에서 local 디렉터리의 경우(a), 파일 접근 로그 확인할 수 있다(➃). 정보가 없다. 그러나 fuse 디렉터리의 경우(b), syslog 에 이전트를 통해서 파일 접근 정보가 기록되었음을 확인할 수 있다. 4.2 평가 기존 연구[8]는 pnfs 프로토콜을 지원하는 메타데이 터 서버를 사용자 영역에서 손쉽게 개발하기 위해 FUSE Fig. 7. Execution of Syslog Agent 를 활용하는 방안을 제시하였다. 그리고 기존 연구[9]는 FUSE를 활용하여 데이터 중심의 문제 해결 환경을 구 syslog 에이전트를 통해서 파일 접근 정보가 기록됨 현하기 위해서 시뮬레이션을 지원하는 원격 파일 시스템 을 확인하기 위하여 local과 fuse 디렉터리에서 다음과 인 액티브 폴더를 제시하였다. 같은 파일 접근을 수행한다. 한편, 본 연구에서는 기존 연구들과 성능적인 관점에 ➀ cp 명령으로 test 파일을 복사한다. 서 비교 평가를 할 수 없지만 FUSE를 활용하여 기존의 ➁ rm 명령으로 복사했던 파일을 삭제한다. syslog 유틸리티에서 지원하지 않는 서비스인 파일 접근 ➂ System Log 프로그램을 사용하여 수행한 파일 접 에 대한 로그 정보를 쉽게 수집할 수 있는 기법을 제시 근 로그를 확인한다. 한 것으로 평가된다. local과 fuse 디렉터리에서 수행한 결과는 Fig. 8과 같 다. 627
한국산학기술학회논문지제 17 권제 7 호, 2016 5. 결론최근정보시스템의불법적인해킹혹은내부사용자에의한개인정보유출등의사건이발생할경우문제를해결하는데결정적인단서가되는리눅스시스템의 syslog 을통해파일접근로그를기록하는 syslog 에이전트를제시하였다. 제시한 syslog 에이전트는 FUSE를통해사용자들의파일접근정보를수집하고, syslog를통해로그파일에사용자들의파일접근정보를기록하도록설계하고구현하였다. 리눅스시스템에구현한 FUSE 기반의 syslog 에이전트를적용하여실험을통해사용자들의파일접근로그를확인함으로써기능적타당성을검토하였다. FUSE의모든파일접근처리함수를구현하면일반적으로사용하는파일시스템과동일한기능을수행할수있다. 이러한기능을통해학교에서관리하는수업서버와같이많은사용자가있는서버에사용할경우관리자가사용자들의파일을쉽게관리할수있다는장점이있다. "pnfs Metadata Server Design based on FUSE," KCC 2012, Vol.39, No.1(A), pp. 1-3, 2012. [9] DaeYoung Heo, SunTae Hwang, Cloud Service for Managing Remote Simulation Processes by Fiile System Commands, Journal of KIISE : Computing Practices and Letters, 19(7), pp. 408-412, 2013. [10] JunSup Song, DongKun Shin, "Performance Improvement with Zero Copy Technique on FUSE-based Consumer Devices," 2014 IEEE International Conference on Consumer Electronics(ICCE), pp. 434-435, 2014. DOI: http://dx.doi.org/10.1109/icce.2014.6776074 손태영 (Tea-Yeong Son) [ 정회원 ] 2004 년 2 월 : 호서대학교컴퓨터공학과 ( 학사 ) 2013 년 2 월 : 호서대학교일반대학원컴퓨터공학과 ( 석사 ) 2013 년 3 월 ~ 현재 : 호서대학교컴퓨터공학과박사과정 < 관심분야 > 임베디드시스템, 분산파일시스템, 리눅스커널 References [1] WanJib Kim, HeungYoul Youm, "Integrated Management of Heterogeneous Log and Compliance IT Compliance," KIISC Vol.20 no.5, pp. 65-73, 2010. [2] JooHo Jeon, HoeGun Koo, ByeongSeon Choi, WonGu Lee, JaeGwang Lee, "Design and Implement the Integrate Log Analysis Agent Based on Linux System," Journal of the Korea Society for Internet Information Conference2(2), pp. 350-353, 2001. [3] Scott Mann, Ellen L. Mitchell, Linux System Security: An Administrator's Guide to Open Source Security Tools, 2nd Ed, pp. 162-163, Prentice Hall Professional, 1999. [4] MoonKyung Kim, HyunChul Eom, JaeChun No, SungSun Park, The Design and Implementation of FUSE-Based WORM File System, KIISE, 35(2B), pp. 396-400, 2008. [5] FUSE homepage, http://fuse.sourceforge.net/ [6] Liu Di, Pingchang Bai, Hong Jiang, "Using the User Space File System to Protect File," IEEE international conference on Apperceiving Computing and Intelligence Analysis(ICACIA), pp. 350-353, 2010. DOI: http://dx.doi.org/10.1109/icacia.2010.5709917 [7] Takahasi Hirokazu, Oda Iturou, Yamahata Isaku, Linux Kernel 2.6 structure and principal, HANBIT Media, pp. 47, 2011. [8] SooYoung Kim, HongYeon Kim, YoungKyun Kim, 임성락 (Seong-Rak Rim) [ 정회원 ] < 관심분야 > 임베디드시스템, 리눅스커널 1983 년 2 월 : 서울대학교공과대학원컴퓨터공학과 ( 공학석사 ) 1992 년 8 월 : 서울대학교공과대학원컴퓨터공학과 ( 공학박사 ) 1983 년 3 월 ~ 1990 년 2 월 : 금성반도체연구소선임연구원 1993 년 3 월 ~ 현재 : 호서대학교컴퓨터공학과교수 628