Skip to main content

리눅스에서 Unix Command Utmp를 사용하는 방법

리눅스 12강. Linux(Unix) 파일 관리 명령어 (유월 2025)

리눅스 12강. Linux(Unix) 파일 관리 명령어 (유월 2025)
Anonim

그만큼utmp 파일을 사용하면 현재 누가 시스템을 사용하고 있는지에 대한 정보를 찾을 수 있습니다. 모든 프로그램이 utmp 로깅을 사용하지는 않기 때문에 현재 시스템을 사용하는 사용자가 더 많을 수 있습니다.

경고: utmp 쓰기가 불가능해야합니다. 많은 시스템 프로그램 (어리석게도)이 무결성에 의존하기 때문입니다. 탈퇴하면 가짜 시스템 로그 파일 및 시스템 파일 수정의 위험이 있습니다.utmp모든 사용자에게 쓸 수 있습니다.

이 파일은 include 파일에 선언 된 다음 구조를 갖는 일련의 항목입니다 (libc의 버전에 따라 세부 사항이 달라질 수 있습니다).

#define UT_UNKNOWN 0 #define RUN_LVL 1 #define BOOT_TIME 2 #define OLD_TIME 4 # 정의 INIT_PROCESS 5 # 정의 LOGIN_PROCESS 6 #define USER_PROCESS 7 #define DEAD_PROCESS 8 # 정의 회계 정의 9 #define UT_LINESIZE 12 #define UT_NAMESIZE 32 #define UT_HOSTSIZE 256 구조체 exit_status {short int e_termination; / * 프로세스 종료 상태. * / 짧은 int e_exit; / * 프로세스 종료 상태. * /}; struct utmp {짧은 ut_type; / * 로그인 유형 * / pid_t ut_pid; / * 로그인 프로세스의 PID * / char ut_line UT_LINESIZE; / * tty의 장치 이름 - "/ dev /"* / char ut_id 4; / * init id 또는 abbrev. ttyname * / char ut_user UT_NAMESIZE; / * 사용자 이름 * / char ut_host UT_HOSTSIZE; / * 원격 로그인을위한 호스트 이름 * / struct exit_status ut_exit; / * DEAD_PROCESS로 표시된 프로세스의 종료 상태. * / long ut_session; / * 윈도우 잉에 사용되는 세션 ID * / struct timeval ut_tv; / * 시간 입력이되었습니다. * / int32_t ut_addr_v6 4; / * 원격 호스트의 IP 주소. * / char pad 20; / * 향후 사용을 위해 예약되어 있습니다. * /}; / * 이전 버전과의 호환성. * / #define ut_name ut_user #ifndef _NO_UT_TIME #define ut_time ut_tv.tv_sec #endif #define ut_xtime ut_tv.tv_sec #define ut_addr ut_addr_v6 0

이 구조체는 사용자 단말기와 관련된 특수 파일의 이름, 사용자의 로그인 이름 및 로그인 시간을시각(2). 문자열 필드는에 의해 종료됩니다.'' 필드의 크기보다 짧은 경우.

처음 생성 된 항목은 초기화 (8) 가공 inittab (5). 그러나 항목이 처리되기 전에, 초기화 (8) 설정에 의해 utmp 정리ut_typeDEAD_PROCESS, 청소ut_user, ut_host, 및ut_time 각 레코드에 대해 null 바이트가있는ut_type 아니다DEAD_PROCESS 또는RUN_LVL PID가있는 프로세스가없는 경우ut_pid 존재합니다. 필요한 빈 레코드가없는 경우ut_id 이 발견되면, init은 새로운 것을 생성한다. 그것은 설정ut_id inittab에서ut_pidut_time 현재 값으로ut_typeINIT_PROCESS.

게티 (8)는 pid에 의한 엔트리의 위치를 ​​찾으며,ut_typeLOGIN_PROCESS, 변경ut_time, 세트들ut_line, 연결이 설정 될 때까지 대기합니다. 로그인 (8), 사용자가 인증 된 후,ut_typeUSER_PROCESS, 변경ut_time, 및 세트ut_hostut_addr. 에 따라 게티 (8) 및 로그인 (8)에서, 기록은ut_line 바람직한 대신에ut_pid.

언제 초기화 (8)은 프로세스가 종료되었음을 발견하고 utmp 엔트리를ut_pid, 세트들ut_typeDEAD_PROCESS, 지우고ut_user, ut_hostut_time null 바이트.

xterm (1) 및 다른 터미널 에뮬레이터는 직접USER_PROCESS 기록하고ut_id 의 마지막 두 글자를 사용하여/ dev / ttyp %기음 또는 %디 …에 대한/ dev / pts / %디 . 그들이DEAD_PROCESS 이 ID에 대해서는 재활용하고, 그렇지 않으면 새 항목을 만듭니다. 그들이 할 수 있다면, 그들은 그것을 다음과 같이 표시 할 것입니다.DEAD_PROCESS 끝내고 그들은 null임을 권고한다. ut_line,ut_time, ut_user, 및ut_host 게다가.

xdm (8)은 할당 된 터미널이 없기 때문에 utmp 레코드를 생성해서는 안됩니다. 그것을 생성 시키면 'finger : can not stat /dev/machine.dom'과 같은 오류가 발생합니다. 그래도 wtmp 항목을 만들어야합니다. ftpd (8) 않습니다.

telnetd (8)은LOGIN_PROCESS 나머지는 남겨둔다. 로그인 (8) 평소대로. 텔넷 세션이 끝난 후, telnetd (8) 설명 된 방법으로 utmp를 정리합니다.

그만큼 파일은 모든 로그인과 로그 아웃을 기록합니다. 형식은 정확히 같습니다.utmp null 사용자 이름이 연관된 터 L 널에서의 로그 아웃을 표시한다는 점을 제외하고는 예외입니다. 또한 터미널 이름'~'사용자 이름 포함"일시 휴업" 또는"재부팅" 시스템 종료 또는 재부팅을 나타내며 한 쌍의 터미널 이름'|'/'}' 이전 / 새로운 시스템 시간을 기록합니다. 날짜 (1) 그것을 변경합니다. 에 의해 유지된다 로그인 (1), 초기화 (1) 및 일부 버전의 게티 (1). 이 두 프로그램 모두 파일을 작성하지 않으므로 파일이 제거되면 레코드 유지가 해제됩니다.