데이터 엔지니어( 실습 정리 )
사용자 키보드 로그 수집
세용용용용
2024. 7. 17. 14:29
업데이터 사항
2024-07-17
- 작업 디렉토리 그룹 접근제어 추가
- 사용자 자 생성 스크립트 추가
1) evdev 패키지를 설치
- Linux에서 입력 이벤트를 처리하기 위한 라이브러리 >>> evdev
pip install evdev
apt-get update : 패키지 목록 업데이트
apt-get upgrade : 업데이트된 패키지 목록 최신버전으로 업그레이드
apt-get install python3-evdev : 파이썬 패키지 설치
2) 예제를 위해 사용자 생성 및 그룹 추가
- 그룹 추가 (/data/keyboard_sc 디렉토리 접근 권한 설정 (읽기, 쓰기, 실행 권한)
1. 그룹 생성 명령어
groupadd game_user
2. 그룹 생성 확인
cat /etc/group
3. 디렉토리 권한 설정 (/data/keyboard_sc)
chown -R :game_user /data/keyboard_sc >>> 디렉토리 소유자 변경
chmod -R g+rwx /data/keyboard_sc >>> 디렉토리 권한 변경
chmod g+s /data/keyboard_sc >>> 생성되는 파일이 부모 디렉토리 그룹 소유자 상속 받도록 설정
4. 현재 사용자가 속한 그룹 확인
groups
- 사용자 생성 명령어 (game_user 그룹으로 생성)
1. 사용자 생성 명령어
useradd [사용자 이름] , -g 옵션 그룹, -m 홈 디렉토리 자동 생성
ex) useradd -m -g game_user sy0218
2. 사용자 삭제 명령어
userdel -r [사용자 이름]
ex) userdel -r sy0218
3. 사용자 확인 명령어
cat /etc/passwd
4. 사용자 로그인(원하는)
su - [사용자명]
ex) su - sy0218
5. 사용자에 그룹을 추가
usermod -aG [그룹명] [사용자명]
ex) usermod -aG input sy0218
6. 사용자 생성하는 스크립트 ( 필요 인자 : 생성할 사용자 명 )
#!/usr/bin/bash
# 인자 개수 확인
if [ "$#" -ne 1 ]; then
echo "Usage: $0 <command>"
exit 1
fi
user_name=$1
echo "사용자 생성중: $user_name"
useradd -m -g game_user $user_name
usermod -aG input $user_name
echo "사용자 생성 완료: $user_name"
3) 키보드 로그 수집 py
#!/usr/bin/python3
from evdev import InputDevice, categorize, ecodes, list_devices
import os
import subprocess
import time
from datetime import datetime
def input_events(log_file, username):
dev = InputDevice('/dev/input/event2')
with open(log_file, 'a') as f:
for event in dev.read_loop():
event_str = str(categorize(event))
if ("key event at" in event_str) and ("down" in event_str):
f.write(event_str + '\t' + str(username) + '\n')
if __name__ == "__main__":
username=os.getenv('USER')
today=datetime.now().strftime('%Y%m%d')
log_file=f"/data/keyboard_sc/{today}_key_log.txt"
if not os.path.exists(log_file):
open(log_file,'a').close()
os.chmod(log_file, 0o660)
input_events(log_file,username)
4) 사용자가 play.sh 실행시 play_get_log.py 실행되고 종료시 키보드 로그 수집 프로그램 종료
#!/usr/bin/bash
/data/keyboard_sc/play_get_log.py &
PID=$(ps aux | grep 'play_get_log.py' | grep -v grep | awk '{print $2}')
# trap는 특정 시그널시 지정 명령어 실행하는 기능
trap "kill $PID" TERM
tail -f /dev/null
- 어떠한 프로그램 실행시 키보드로그 수집을 가정하기 위해 이 처럼 구현 하였습니다 ㅎㅎ
5) 원시 로그 데이터
- 저장 파일

- 키보드 로그와 사용자명 저장

앞으로 해볼거
- 수집 데이터 hive에 웨어하우징 해보자
추후
- 사용자는 분산서버일것!! 카프카로 수집해보고싶다!!
- 카프카 공부하기!!!
- 수집된 원시 데이터 배치처리로 hive를 사용해 웨어하우징하고 서비스 해보고싶다!!!!
(해당 과정에서 데이터 변환 필수 너무 로그 데이터라 ㅋㅋ 어지러움)
- 수집된 키보드 로그 hive 웨어하우징
사용자 키보드 로그 hive 웨어하우징 (tistory.com)
사용자 키보드 로그 hive 웨어하우징
사용자 키보드 로그 수집 (tistory.com) 사용자 키보드 로그 수집1) evdev 패키지를 설치- Linux에서 입력 이벤트를 처리하기 위한 라이브러리 pip install evdev 2) 예제를 위해 사용자 생성 및 그룹 추가1
sy02229.tistory.com

감사합니다~ 항상 정답이 없는것을 도전하고 배우고 싶은 신입 엔지니어 입니다 많은 조언 부탁드립니다!!!!