fanotify_mark(2) - wariua/manpages-ko GitHub Wiki

NAME

fanotify_mark - 파일 μ‹œμŠ€ν…œ 객체에 λŒ€ν•œ fanotify ν‘œμ‹œ μΆ”κ°€, 제거, λ³€κ²½ν•˜κΈ°

SYNOPSIS

#include <sys/fanotify.h>

int fanotify_mark(int fanotify_fd, unsigned int flags,
                  uint64_t mask, int dirfd, const char *pathname);

DESCRIPTION

fanotify API에 λŒ€ν•œ μ†Œκ°œλŠ” fanotify(7)λ₯Ό 보라.

fanotify_mark()λŠ” 파일 μ‹œμŠ€ν…œ 객체에 fanotify ν‘œμ‹œλ₯Ό μΆ”κ°€ν•˜κ±°λ‚˜ μ œκ±°ν•˜κ±°λ‚˜ λ³€κ²½ν•œλ‹€. ν‘œμ‹œλ₯Ό ν•˜λŠ” 파일 μ‹œμŠ€ν…œ 객체에 λŒ€ν•΄ ν˜ΈμΆœμžκ°€ 읽기 κΆŒν•œμ„ κ°€μ§€κ³  μžˆμ–΄μ•Ό ν•œλ‹€.

fanotify_fd μΈμžλŠ” fanotify_init(2)이 λ°˜ν™˜ν•œ 파일 λ””μŠ€ν¬λ¦½ν„°μ΄λ‹€.

flagsλŠ” μˆ˜ν–‰ν•  λ³€κ²½ λ™μž‘μ„ κΈ°μˆ ν•˜λŠ” λΉ„νŠΈ λ§ˆμŠ€ν¬μ΄λ‹€. λ‹€μŒ κ°’λ“€ 쀑 μ •ν™•νžˆ ν•˜λ‚˜λ₯Ό 포함해야 ν•œλ‹€.

FAN_MARK_ADD
ν‘œμ‹œ λ§ˆμŠ€ν¬μ— (λ˜λŠ” λ¬΄μ‹œ λ§ˆμŠ€ν¬μ—) mask의 μ΄λ²€νŠΈλ“€μ„ μΆ”κ°€ν•œλ‹€. maskκ°€ λΉ„μ–΄ μžˆμ§€ μ•Šμ•„μ•Ό ν•˜λ©°, μ•ˆ 그러면 EINVAL 였λ₯˜κ°€ λ°œμƒν•œλ‹€.
FAN_MARK_REMOVE
ν‘œμ‹œ λ§ˆμŠ€ν¬μ—μ„œ (λ˜λŠ” λ¬΄μ‹œ λ§ˆμŠ€ν¬μ—μ„œ) mask 인자의 μ΄λ²€νŠΈλ“€μ„ μ œκ±°ν•œλ‹€. maskκ°€ λΉ„μ–΄ μžˆμ§€ μ•Šμ•„μ•Ό ν•˜λ©°, μ•ˆ 그러면 EINVAL 였λ₯˜κ°€ λ°œμƒν•œλ‹€.
FAN_MARK_FLUSH
fanotify κ·Έλ£Ήμ—μ„œ λͺ¨λ“  파일 μ‹œμŠ€ν…œ ν‘œμ‹œ, λ˜λŠ” λͺ¨λ“  마운트 ν‘œμ‹œ, λ˜λŠ” λͺ¨λ“  디렉터리 및 파일 ν‘œμ‹œλ₯Ό μ œκ±°ν•œλ‹€. flags에 FAN_MARK_MOUNTκ°€ 있으면 κ·Έλ£Ήμ—μ„œ λ§ˆμš΄νŠΈμ— λŒ€ν•œ ν‘œμ‹œλ“€μ„ λͺ¨λ‘ μ œκ±°ν•œλ‹€. flags에 FAN_MARK_FILESYSTEM이 있으면 κ·Έλ£Ήμ—μ„œ 파일 μ‹œμŠ€ν…œμ— λŒ€ν•œ ν‘œμ‹œλ“€μ„ λͺ¨λ‘ μ œκ±°ν•œλ‹€. κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ 디렉터리 및 νŒŒμΌμ— λŒ€ν•œ ν‘œμ‹œλ“€μ„ λͺ¨λ‘ μ œκ±°ν•œλ‹€. FAN_MARK_MOUNT와 FAN_MARK_FILESYSTEM μ™Έμ˜ ν”Œλž˜κ·Έλ‚˜ 두 ν”Œλž˜κ·Έ λͺ¨λ‘λ₯Ό FAN_MARK_FLUSH와 ν•¨κ»˜ μ‚¬μš©ν•  수 μ—†λ‹€. maskλŠ” λ¬΄μ‹œν•œλ‹€.

μœ„ κ°’λ“€ 쀑 아무것도 μ§€μ •ν•˜μ§€ μ•Šκ±°λ‚˜ μ—¬λŸ¬ κ°€μ§€λ₯Ό μ§€μ •ν•˜λ©΄ 호좜이 EINVAL 였λ₯˜λ‘œ μ‹€νŒ¨ν•œλ‹€.

μΆ”κ°€λ‘œ flags에 λ‹€μŒ 값듀을 0개 이상 OR ν•  수 μžˆλ‹€.

FAN_MARK_DONT_FOLLOW
pathname이 심볼릭 링크이면 κ°€λ¦¬ν‚€λŠ” 파일이 μ•„λ‹ˆλΌ 링크 μžμ²΄μ— ν‘œμ‹œλ₯Ό ν•œλ‹€. (기본적으둜 fanotify_mark()λŠ” pathname이 심볼릭 링크이면 μ—­μ°Έμ‘°λ₯Ό ν•œλ‹€.)
FAN_MARK_ONLYDIR
ν‘œμ‹œν•  파일 μ‹œμŠ€ν…œ 객체가 디렉터리가 μ•„λ‹ˆλ©΄ ENOTDIR 였λ₯˜λ₯Ό μ œκΈ°ν•œλ‹€.
FAN_MARK_MOUNT
pathname으둜 μ§€μ •ν•œ 마운트 지점에 ν‘œμ‹œλ₯Ό ν•œλ‹€. pathname μžμ²΄κ°€ 마운트 지점이 μ•„λ‹ˆλ©΄ pathname을 담은 마운트 지점에 ν‘œμ‹œλ₯Ό ν•˜κ²Œ λœλ‹€. 마운트 μ§€μ μ˜ λͺ¨λ“  디렉터리와 μ„œλΈŒλ””λ ‰ν„°λ¦¬, 그리고 κ±°κΈ° λ‹΄κΈ΄ νŒŒμΌλ“€μ„ κ°μ‹œν•œλ‹€. 파일 λ””μŠ€ν¬λ¦½ν„° fanotify_fdλ₯Ό FAN_REPORT_FID ν”Œλž˜κ·Έλ‘œ μ΄ˆκΈ°ν™” ν–ˆκ±°λ‚˜ mask에 μƒˆ 디렉터리 λ³€κ²½ 이벀트λ₯Ό ν•˜λ‚˜λΌλ„ μ€€ κ²½μš°μ—λŠ” 이 값을 μ“Έ 수 μ—†λ‹€. κ·Έλ ‡κ²Œ ν•΄μ„œ μ‹œλ„ν•˜λ©΄ 였λ₯˜ EINVAL이 λ°˜ν™˜λœλ‹€.
FAN_MARK_FILESYSTEM (λ¦¬λˆ…μŠ€ 4.20λΆ€ν„°)
pathname으둜 μ§€μ •ν•œ 파일 μ‹œμŠ€ν…œμ— ν‘œμ‹œλ₯Ό ν•œλ‹€. pathname을 담은 파일 μ‹œμŠ€ν…œμ— ν‘œμ‹œλ₯Ό ν•˜κ²Œ λœλ‹€. 마운트 지점이 μ–΄λ””λ“  κ·Έ 파일 μ‹œμŠ€ν…œμ— λ‹΄κΈ΄ λͺ¨λ“  파일과 디렉터리λ₯Ό κ°μ‹œν•œλ‹€.
FAN_MARK_IGNORED_MASK
λ¬΄μ‹œ λ§ˆμŠ€ν¬μ—μ„œ mask의 μ΄λ²€νŠΈλ“€μ„ μΆ”κ°€ν•˜κ±°λ‚˜ μ œκ±°ν•œλ‹€.
FAN_MARK_IGNORED_SURV_MODIFY
λ¬΄μ‹œ λ§ˆμŠ€ν¬κ°€ λ³€κ²½ 이벀트λ₯Ό 거치며 μœ μ§€λœλ‹€. 이 ν”Œλž˜κ·Έκ°€ 섀정돼 μžˆμ§€ μ•ŠμœΌλ©΄ λ¬΄μ‹œν•˜λŠ” νŒŒμΌμ΄λ‚˜ 디렉터리에 λ³€κ²½ μ΄λ²€νŠΈκ°€ λ°œμƒν•  λ•Œ κ·Έ λ¬΄μ‹œ 마슀크λ₯Ό μ—†μ•€λ‹€.

maskλŠ” μ–΄λ–€ 이벀트λ₯Ό μ²­μ·¨ν• μ§€ (λ˜λŠ” λ¬΄μ‹œν• μ§€) μ§€μ •ν•œλ‹€. λ‹€μŒ κ°’λ“€λ‘œ 이뀄진 λΉ„νŠΈ λ§ˆμŠ€ν¬μ΄λ‹€.

FAN_ACCESS
νŒŒμΌμ΄λ‚˜ 디렉터리에 (BUGS μ°Έκ³ ) μ ‘κ·Ό(읽기)이 이뀄지면 이벀트 생성.
FAN_MODIFY
파일이 λ³€κ²½(μ“°κΈ°)되면 이벀트 생성.
FAN_CLOSE_WRITE
μ“°κΈ° κ°€λŠ₯ 파일이 λ‹«νžˆλ©΄ 이벀트 생성.
FAN_CLOSE_NOWRITE
읽기 μ „μš© νŒŒμΌμ΄λ‚˜ 디렉터리가 λ‹«νžˆλ©΄ 이벀트 생성.
FAN_OPEN
νŒŒμΌμ΄λ‚˜ 디렉터리가 열리면 이벀트 생성.
FAN_OPEN_EXEC (λ¦¬λˆ…μŠ€ 5.0λΆ€ν„°)
파일이 μ‹€ν–‰ν•˜λ €λŠ” μ˜λ„λ‘œ 열리면 이벀트 생성. NOTES의 μΆ”κ°€ μ„€λͺ… μ°Έκ³ .
FAN_ATTRIB
νŒŒμΌμ΄λ‚˜ λ””λ ‰ν„°λ¦¬μ˜ 메타데이터가 λ°”λ€Œμ—ˆμ„ λ•Œ 이벀트 생성.
FAN_CREATE
ν‘œμ‹œλœ λΆ€λͺ¨ 디렉터리 λ‚΄μ—μ„œ νŒŒμΌμ΄λ‚˜ 디렉터리가 생성됐을 λ•Œ 이벀트 생성.
FAN_DELETE
ν‘œμ‹œλœ λΆ€λͺ¨ 디렉터리 λ‚΄μ—μ„œ νŒŒμΌμ΄λ‚˜ 디렉터리가 μ‚­μ œλμ„ λ•Œ 이벀트 생성.
FAN_DELETE_SELF
ν‘œμ‹œλœ νŒŒμΌμ΄λ‚˜ 디렉터리 μžμ²΄κ°€ μ‚­μ œλμ„ λ•Œ 이벀트 생성.
FAN_MOVED_FROM
ν‘œμ‹œλœ λΆ€λͺ¨ 디렉터리에 있던 νŒŒμΌμ΄λ‚˜ 디렉터리가 이동됐을 λ•Œ 이벀트 생성.
FAN_MOVED_TO
ν‘œμ‹œλœ λΆ€λͺ¨ λ””λ ‰ν„°λ¦¬λ‘œ νŒŒμΌμ΄λ‚˜ 디렉터리가 이동됐을 λ•Œ 이벀트 생성.
FAN_Q_OVERFLOW
이벀트 큐 λ„˜μΉ¨μ΄ λ°œμƒν•˜λ©΄ 이벀트 생성. fanotify_init(2)μ—μ„œ FAN_UNLIMITED_QUEUEλ₯Ό μ„€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ 이벀트 큐 크기가 16384개 ν•­λͺ©μœΌλ‘œ μ œν•œλœλ‹€.
FAN_OPEN_PERM
νŒŒμΌμ΄λ‚˜ 디렉터리 μ—΄κΈ° μš”μ²­μ΄ 있으면 이벀트 생성. FAN_CLASS_PRE_CONTENTλ‚˜ FAN_CLASS_CONTENT둜 μƒμ„±ν•œ fanotify 파일 λ””μŠ€ν¬λ¦½ν„°κ°€ ν•„μš”ν•˜λ‹€.
FAN_OPEN_EXEC_PERM (λ¦¬λˆ…μŠ€ 5.0λΆ€ν„°)
싀행을 μœ„ν•œ 파일 μ—΄κΈ° μš”μ²­μ΄ 있으면 이벀트 생성. FAN_CLASS_PRE_CONTENTλ‚˜ FAN_CLASS_CONTENT둜 μƒμ„±ν•œ fanotify 파일 λ””μŠ€ν¬λ¦½ν„°κ°€ ν•„μš”ν•˜λ‹€. NOTES의 μΆ”κ°€ μ„€λͺ… μ°Έκ³ .
FAN_ACCESS_PERM
νŒŒμΌμ΄λ‚˜ 디렉터리 읽기 μš”μ²­μ΄ 있으면 이벀트 생성. FAN_CLASS_PRE_CONTENTλ‚˜ FAN_CLASS_CONTENT둜 μƒμ„±ν•œ fanotify 파일 λ””μŠ€ν¬λ¦½ν„°κ°€ ν•„μš”ν•˜λ‹€.
FAN_ONDIR
디렉터리에 λŒ€ν•΄ (κ°€λ Ή opendir(3), readdir(3) (단 BUGS μ°Έκ³ ), closedir(3)이 호좜될 λ•Œ) 이벀트 생성. 이 ν”Œλž˜κ·Έκ°€ μ—†μœΌλ©΄ νŒŒμΌμ— λŒ€ν•œ 이벀트만 생긴닀. 파일 λ””μŠ€ν¬λ¦½ν„° fanotify_fdλ₯Ό FAN_REPORT_FID ν”Œλž˜κ·Έλ‘œ μ΄ˆκΈ°ν™” ν–ˆμ„ λ•Œλ§Œ FAN_ONDIR ν”Œλž˜κ·Έλ₯Ό λ³΄κ³ ν•œλ‹€. FAN_CREATE, FAN_DELETE, FAN_MOVED_FROM, FAN_MOVED_TO 같은 디렉터리 ν•­λͺ© 이벀트 λ§₯λ½μ—μ„œ μ„œλΈŒλ””λ ‰ν„°λ¦¬ ν•­λͺ©λ“€μ΄ λ³€κ²½(즉 mkdir(2)/rmdir(2))될 λ•Œ μ΄λ²€νŠΈκ°€ μƒμ„±λ˜κ²Œ ν•˜λ €λ©΄ FAN_ONDIR ν”Œλž˜κ·Έλ₯Ό μ§€μ •ν•΄μ•Ό ν•œλ‹€. 이 ν”Œλž˜κ·ΈλŠ” μ΄λ²€νŠΈμ—μ„œ λ‹¨λ…μœΌλ‘œ λ³΄κ³ λ˜λŠ” 일이 μ ˆλŒ€ μ—†μœΌλ©° 항상 λ‹€λ₯Έ μ’…λ₯˜μ˜ μ΄λ²€νŠΈμ™€ ν•¨κ»˜ μ œκ³΅λœλ‹€.
FAN_EVENT_ON_CHILD
ν‘œμ‹œν•œ λ””λ ‰ν„°λ¦¬μ˜ 직접 μžμ‹λ“€μ— λŒ€ν•œ 이벀트λ₯Ό μƒμ„±ν•œλ‹€. 마운트 및 파일 μ‹œμŠ€ν…œμ— ν‘œμ‹œν•  λ•ŒλŠ” 이 ν”Œλž˜κ·Έμ— 아무 νš¨κ³Όκ°€ μ—†λ‹€. 참고둜 ν‘œμ‹œν•œ λ””λ ‰ν„°λ¦¬μ˜ μ„œλΈŒλ””λ ‰ν„°λ¦¬μ˜ μžμ‹λ“€μ— λŒ€ν•΄μ„  μ΄λ²€νŠΈκ°€ μƒμ„±λ˜μ§€ μ•ŠλŠ”λ‹€. 디렉터리 트리 전체λ₯Ό κ°μ‹œν•˜λ €λ©΄ μ μ ˆν•œ λ§ˆμš΄νŠΈμ— ν‘œμ‹œλ₯Ό ν•΄μ•Ό ν•œλ‹€.

λ‹€μŒ μ‘°ν•© 값이 μ •μ˜λΌ μžˆλ‹€.

FAN_CLOSE
파일이 λ‹«ν˜”μŒ. (FAN_CLOSE_WRITE|FAN_CLOSE_NOWRITE)
FAN_MOVE
νŒŒμΌμ΄λ‚˜ 디렉터리가 μ΄λ™λμŒ. (FAN_MOVED_FROM|FAN_MOVED_TO)

파일 λ””μŠ€ν¬λ¦½ν„° dirfd와 pathname에 μ§€μ •ν•œ 경둜λͺ…을 μ¨μ„œ ν‘œμ‹œλ₯Ό ν•  파일 μ‹œμŠ€ν…œ 객체λ₯Ό κ²°μ •ν•œλ‹€.

  • pathname이 NULL이면 dirfdκ°€ ν‘œμ‹œν•  파일 μ‹œμŠ€ν…œ 객체λ₯Ό κ²°μ •ν•œλ‹€.

  • pathname이 NULL이고 dirfdκ°€ 특수 κ°’ AT_FDCWD이면 ν˜„μž¬ μž‘μ—… 디렉터리에 ν‘œμ‹œλ₯Ό ν•œλ‹€.

  • pathname이 μ ˆλŒ€ 경둜이면 ν‘œμ‹œν•  파일 μ‹œμŠ€ν…œ 객체λ₯Ό κ²°μ •ν•˜λ©°, dirfdλŠ” λ¬΄μ‹œλœλ‹€.

  • pathname이 μƒλŒ€ 경둜이고 dirfd의 값이 AT_FDCWDκ°€ μ•„λ‹ˆλ©΄ dirfdκ°€ κ°€λ¦¬ν‚€λŠ” 디렉터리λ₯Ό κΈ°μ€€μœΌλ‘œ pathname을 ν•΄μ„ν•΄μ„œ ν‘œμ‹œν•  파일 μ‹œμŠ€ν…œ 객체λ₯Ό κ²°μ •ν•œλ‹€.

  • pathname이 μƒλŒ€ 경둜이고 dirfd의 값이 AT_FDCWD이면 ν˜„μž¬ μž‘μ—… 디렉터리λ₯Ό κΈ°μ€€μœΌλ‘œ pathname을 ν•΄μ„ν•΄μ„œ ν‘œμ‹œν•  파일 μ‹œμŠ€ν…œ 객체λ₯Ό κ²°μ •ν•œλ‹€.

RETURN VALUE

성곡 μ‹œ fanotify_mark()λŠ” 0을 λ°˜ν™˜ν•œλ‹€. 였λ₯˜ μ‹œ -1을 λ°˜ν™˜ν•˜λ©° 였λ₯˜λ₯Ό λ‚˜νƒ€λ‚΄λ„λ‘ errnoλ₯Ό μ„€μ •ν•œλ‹€.

ERRORS

EBADF
fanotify_fd둜 μœ νš¨ν•˜μ§€ μ•Šμ€ 파일 λ””μŠ€ν¬λ¦½ν„°λ₯Ό 쀬닀.
EINVAL
flagsλ‚˜ mask에 μœ νš¨ν•˜μ§€ μ•Šμ€ 값을 쀬닀. λ˜λŠ” fanotify_fdκ°€ fanotify 파일 λ””μŠ€ν¬λ¦½ν„°κ°€ μ•„λ‹ˆλ‹€.
EINVAL
fanotify 파일 λ””μŠ€ν¬λ¦½ν„°λ₯Ό FAN_CLASS_NOTIFλ‚˜ FAN_REPORT_FID둜 μ—΄μ˜€λŠ”λ° mask에 ν—ˆκ°€ 이벀트λ₯Ό μœ„ν•œ ν”Œλž˜κ·Έ(FAN_OPEN_PERMμ΄λ‚˜ FAN_ACCESS_PERM)κ°€ μžˆλ‹€.
ENOENT
dirfd와 pathname으둜 λ‚˜νƒ€λ‚Έ 파일 μ‹œμŠ€ν…œ 객체가 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€. ν‘œμ‹œ μ•ˆ 된 κ°μ²΄μ—μ„œ ν‘œμ‹œλ₯Ό μ œκ±°ν•˜λ € ν•  λ•Œλ„ 이 였λ₯˜κ°€ 생긴닀.
ENOMEM
ν•„μš”ν•œ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•  수 μ—†λ‹€.
ENOSPC
ν‘œμ‹œ κ°œμˆ˜κ°€ μ œν•œκ°’μΈ 8192개λ₯Ό μ΄ˆκ³Όν–ˆμœΌλ©° fanotify_init(2)으둜 fanotify 파일 λ””μŠ€ν¬λ¦½ν„°λ₯Ό 생성할 λ•Œ FAN_UNLIMITED_MARKS ν”Œλž˜κ·Έλ₯Ό μ§€μ •ν•˜μ§€ μ•Šμ•˜λ‹€.
ENOSYS
μ»€λ„μ—μ„œ fanotify_mark()λ₯Ό κ΅¬ν˜„ν•˜κ³  μžˆμ§€ μ•Šλ‹€. 컀널을 CONFIG_FANOTIFY둜 κ΅¬μ„±ν•œ κ²½μš°μ—λ§Œ fanotify APIλ₯Ό μ“Έ 수 μžˆλ‹€.
ENOTDIR
flags에 FAN_MARK_ONLYDIR이 μžˆλŠ”λ° dirfd와 pathname이 디렉터리λ₯Ό λ‚˜νƒ€λ‚΄μ§€ μ•ŠλŠ”λ‹€.
EXDEV
pathname이 κ°€λ¦¬ν‚€λŠ” 파일 μ‹œμŠ€ν…œ 객체가 루트 μˆ˜νΌλΈ”λ‘κ³Ό λ‹€λ₯Έ fsidλ₯Ό μ“°λŠ” 파일 μ‹œμŠ€ν…œ μ„œλΈŒλ³Όλ₯¨μ— μœ„μΉ˜ν•΄ μžˆλ‹€. (예λ₯Ό λ“€λ©΄ btrfs(5).) fanotify_init(2)이 λ°˜ν™˜ν•œ fanotify 파일 λ””μŠ€ν¬λ¦½ν„°λ₯Ό FAN_REPORT_FID둜 μƒμ„±ν–ˆμ„ λ•Œλ§Œ 이 였λ₯˜κ°€ λ°˜ν™˜λ  수 μžˆλ‹€.
ENODEV
pathname이 κ°€λ¦¬ν‚€λŠ” 파일 μ‹œμŠ€ν…œ 객체가 fsidλ₯Ό μ§€μ›ν•˜λŠ” 파일 μ‹œμŠ€ν…œμ— 연계돼 μžˆμ§€ μ•Šλ‹€. (예λ₯Ό λ“€λ©΄ tmpfs(5).) fanotify_init(2)이 λ°˜ν™˜ν•œ fanotify 파일 λ””μŠ€ν¬λ¦½ν„°λ₯Ό FAN_REPORT_FID둜 μƒμ„±ν–ˆμ„ λ•Œλ§Œ 이 였λ₯˜κ°€ λ°˜ν™˜λ  수 μžˆλ‹€.
EOPNOTSUPP
pathname이 κ°€λ¦¬ν‚€λŠ” 객체가 파일 ν•Έλ“€ 인코딩을 μ§€μ›ν•˜μ§€ μ•ŠλŠ” 파일 μ‹œμŠ€ν…œμ— 연계돼 μžˆλ‹€. fanotify_init(2)이 λ°˜ν™˜ν•œ fanotify 파일 λ””μŠ€ν¬λ¦½ν„°λ₯Ό FAN_REPORT_FID둜 μƒμ„±ν–ˆμ„ λ•Œλ§Œ 이 였λ₯˜κ°€ λ°˜ν™˜λ  수 μžˆλ‹€.

VERSIONS

λ¦¬λˆ…μŠ€ 컀널 버전 2.6.36μ—μ„œ fanotify_mark()κ°€ λ„μž…λ˜μ—ˆκ³  버전 2.6.37μ—μ„œ ν™œμ„±ν™”λ˜μ—ˆλ‹€.

CONFORMING TO

이 μ‹œμŠ€ν…œ ν˜ΈμΆœμ€ λ¦¬λˆ…μŠ€ μ „μš©μ΄λ‹€.

NOTES

FAN_OPEN_EXEC와 FAN_OPEN_EXEC_PERM

mask에 FAN_OPEN_EXECλ‚˜ FAN_OPEN_EXEC_PERMλ₯Ό μ‚¬μš© μ‹œμ—λŠ” ν”„λ‘œκ·Έλž¨ 직접 싀행이 μ΄λ€„μ§ˆ λ•Œλ§Œ κ·Έ μ΄λ²€νŠΈλ“€μ΄ λ°˜ν™˜λœλ‹€. ꡬ체적으둜 말해 execve(2)λ‚˜ execveat(2), uselib(2)둜 μ—΄λ¦¬λŠ” νŒŒμΌμ— λŒ€ν•΄ κ·Έ μ΄λ²€νŠΈλ“€μ΄ μƒμ„±λœλ‹€. 인터프리터가 슀크립트 νŒŒμΌμ„ μ „λ‹¬λ°›λŠ” (λ˜λŠ” 읽어 λ“€μ΄λŠ”) κ²½μš°μ—λŠ” κ·Έ μ΄λ²€νŠΈλ“€μ΄ 생기지 μ•ŠλŠ”λ‹€.

그리고 λ¦¬λˆ…μŠ€ 동적 링컀에도 ν‘œμ‹œκ°€ 돼 μžˆλ‹€λ©΄ execve(2)λ‚˜ execveat(2)을 μ΄μš©ν•΄ μ„±κ³΅μ μœΌλ‘œ ELF μ˜€λΈŒμ νŠΈκ°€ 열릴 λ•Œλ„ 이벀트λ₯Ό 받을 κ±Έ μ˜ˆμƒν•΄μ•Ό ν•œλ‹€.

예λ₯Ό λ“€μ–΄ λ‹€μŒ ELF λ°”μ΄λ„ˆλ¦¬λ₯Ό ν˜ΈμΆœν•˜λ € ν•˜κ³  /에 FAN_OPEN_EXEC ν‘œμ‹œλ₯Ό ν•΄ λ’€λ‹€κ³  ν•˜μž.

$ /bin/echo foo

이 경우 이벀트 μˆ˜μ‹  μ‘μš©μ€ κ·Έ ELF λ°”μ΄λ„ˆλ¦¬μ™€ 인터프리터 각각에 λŒ€ν•΄ FAN_OPEN_EXEC 이벀트λ₯Ό λ°›κ²Œ λœλ‹€.

/bin/echo
/lib64/ld-linux-x86-64.so.2

BUGS

λ¦¬λˆ…μŠ€ 컀널 버전 3.16 전에 λ‹€μŒ 버그듀이 μžˆμ—ˆλ‹€.

  • flags에 FAN_MARK_FLUSHκ°€ μžˆλŠ” 경우 쓰지도 μ•ŠλŠ”λ° dirfd와 pathname이 μœ νš¨ν•œ 파일 μ‹œμŠ€ν…œ 객체λ₯Ό λ‚˜νƒ€λ‚΄μ•Ό ν•œλ‹€.

  • readdir(2)이 FAN_ACCESS 이벀트λ₯Ό μƒμ„±ν•˜μ§€ μ•ŠλŠ”λ‹€.

  • fanotify_mark()λ₯Ό FAN_MARK_FLUSH둜 ν˜ΈμΆœν•˜λŠ” 경우 flags 값이 μœ νš¨ν•œμ§€ ν™•μΈν•˜μ§€ μ•ŠλŠ”λ‹€.

SEE ALSO

fanotify_init(2), fanotify(7)


2019-08-02

⚠️ **GitHub.com Fallback** ⚠️