일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- C언어
- 리눅스 커널
- pwn.college
- 시스템프로그래밍
- kernel
- 취약점
- 워게임
- 리버싱
- 커널
- Pwnable.kr
- 어셈블리어
- px4
- 프로그래밍
- 리눅스커널
- 시스템 프로그래밍
- write up
- wargame
- 시그널
- 시스템해킹
- 시스템
- css
- Bandit
- radare2
- Leviathan
- pwncollege
- C++
- 드론
- 컴퓨터구조
- 알고리즘
- 리눅스
- Today
- Total
Computer Security
#22 파일 이벤트 본문
inotify
특정 파일/디렉토리에서 발생하는 이벤트를 감시하는 기능
inotify기능을 사용하기 위한 조건
1. inotify object를 하나 생성 해야한다.
2. watch 를 생성한다.(어떤 한 디렉토리를 감시 할 것인지 나타내는 서브객체)
inotify
int inotify_init (void)
int inotify_init1 (int flags)
파라미터
- flags
- IN_NON_BLOCK : set non-blocking mode
- IN_CLOEXEC : set close-on-exec
반환 값
- 성공 시 inotify 객체 ( file descriptor)
- 실패 시 -1
inotify_add_watch
생성해 놓은 inotify 객체 에다가 watch를 추가하기 위한 API
int inotify_add_watch (int fd, const char* pathname, int mask)
파라미터
- fd : inotify 객체
- pathname : 감시 대상 경로
- mask : 어떤 이벤트에 대해 어떻게 감시할 것인지 명시
반환 값
- 성공 시 watch descriptor
- 실패 시 -1
add watch 시 & event read 시 mask에 설정 가능
IN_ACCESS - 파일 엑세스
IN_MODIFY - 파일의 마지막 수정
IN_ATTRIB - 메타데이터 변경
IN_OPEN - 열림
IN_MOVED_FROM - 이름 변경 시 예전 이름
IN_MOVED_TO - 이름 변경 시 새로운 이름
IN_DELETE - 파일/디렉터리의 삭제
IN_CREATE - 파일/디렉터리의 생성
IN_DELETE_SELF - 감시중인 경로 자체가 삭제됨
IN_CLOSE_WRITE - 쓰기 권한 파일이 닫힘
IN_CLOSE_NONWRITE - 쓰기외 권한 파일이 닫힘
add watch시 mask에 설정 가능
IN_DONT_FOLLOW - symbolic link인 경우 추적 하지 않도록 함
IN_EXCL_UNLINK - WD에서 unlink된 파일에 대해 이벤트를 발생하지 않도록 함
IN_MASK_ADD - 이미 추가된 경로인 경우 기존 mask에 ORing
IN_ONESHOT - 이벤트 1회 발생 후 자동으로 WD를 삭제함
IN_ONLYDIR - 감시 경로가 디렉토리인 경우만 허용
event read 시 mask에 설정 가능
IN_IGNORED - 감시가 제거되었거나 감시경로가 제거된 경우
IN_ISDIR - 디렉토리인 경우
IN_Q_OVERFLOW - event queue가 overflow
IN_UNMOUNT - 감시 경로가 unmounted
watch descriptor를 제거하는 API
int inotify_rm_watch (int fd, int wd)
파라미터
- fd : inotify 객체
- wd : 삭제할 watch descriptor
반환 값
- 성공 시 0
- 실패 시 -1
inotify 객체에 대해 read를 하면 어떤 이벤트가 발생했는지 알려주는 구조체
struct inotify_event{
int wd; /* Watch descriptor */
uint32_t mask; /* Mask describing event */
uint32_t cookie; /* Unique cookie associating
related events (for rename(2)) */
uint32_t len; /* Size of name field */
char name[]; /* Optional null-terminated name */
};
wd | 감시 서술자(watch descriptor ) |
mask | 이벤트 태그(event tag) |
cookie | IN_MOVED_FROM 및 IN_MOVED_TO 사이 동기화(일치)를 위한 쿠키(cookie) |
len | 이름 필드의 길이 |
name | (부가요소) 이 이벤트와 관계된 파일 이름 (상위 디렉터리에 대해서 로컬 이름임.) |
'리눅스 시스템 프로그래밍' 카테고리의 다른 글
#24 I/O Multiplexing(select) (0) | 2022.09.29 |
---|---|
#23 파일 이벤트 (실습) (0) | 2022.09.28 |
#21 파일 속성 제어 (실습) (2) | 2022.09.26 |
#20 파일 속성 제어 (0) | 2022.09.25 |
#19 파일을 이용한 동기화 (실습) (2) | 2022.09.24 |