Table of Contents
TMOUT 로그
TMOUT 쉘 환경 변수를 설정하면 지정한 시간동안 쉘과 상호작용, 키보드 입력이나 마우스 사용이 없을 경우에 자동으로 로그아웃을 해주게 된다. 그런데, 이렇게 로그아웃을 할 때에 시스템에는 어떤 로그를 남길까?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Aug 27 15:35:58 zeus sshd-session[6242]: Received disconnect from 192.168.96.13 port 49245:11: disconnected by user Aug 27 15:35:58 zeus sshd-session[6242]: Disconnected from user orion 192.168.96.13 port 49245 Aug 27 15:35:58 zeus sshd-session[6237]: pam_unix(sshd:session): session closed for user orion Aug 27 15:35:58 zeus systemd[1]: session-7.scope: Deactivated successfully. ░░ Subject: Unit succeeded ░░ Defined-By: systemd ░░ Support: https://wiki.rockylinux.org/rocky/support ░░ ░░ The unit session-7.scope has successfully entered the 'dead' state. Aug 27 15:35:58 zeus systemd-logind[926]: Session 7 logged out. Waiting for processes to exit. Aug 27 15:35:58 zeus systemd-logind[926]: Removed session 7. ░░ Subject: Session 7 has been terminated ░░ Defined-By: systemd ░░ Support: https://wiki.rockylinux.org/rocky/support ░░ Documentation: sd-login(3) ░░ ░░ A session with the ID 7 has been terminated. |
어뜻 보면 Client 로부터 접속이 차단된것 처럼 로그가 남지고 있다. 현장에서 이걸 보고 사용자가 로그아웃 된 것으로 해석하는 경우가 많은 이유이기도 하다. 하지만 쉘에서 보면 다음과 같다.
1 2 3 |
~]$ export TMOUT=60 timed out waiting for input: auto-logout Connection to 192.168.96.6 closed. |
이렇게 로그가 다르게 남는 이유가 무엇을까?
Shell vs SSHD 서비스
쉘은 sshd 서비스를 이용해 접속하게 되면 받게 되는 사용자 인터페이스다. 굳이 따지자면 sshd 위에 쉘이 작동하고 있다고 볼 수 있다. TMOUT 설정은 쉘에 환경변수임으로 이로 인해서 작동되는 것은 결국 쉘의 상호작용을 이용해서 동작하게 된다. 앞서 쉘에 로그를 보면 자동 로그아웃이라고 되는데, 이렇게 되면 sshd 입장에서 쉘에서 사용자에 의해서 로그아웃 한 것으로 보이게 된다. 사람이 직접 로그아웃을 하지 않았지만 쉘을 이용해서 로그아웃을 한것임으로 결국 사용자가 로그아웃을 한 것과 같다.
결국 SSHD 에서는 사용자로부터 로그아웃이 된 것으로 기록하게 된다.
clientaliveinterval
sshd 설정에 위와같은 설정이 있다. 이 설정을 자동로그아웃 설정으로 오해하는 경우가 있는데, 자동로그아웃과는 아무런 관련이 없다. sshd 의 접속 유지를 위해서 특정 시간 간격으로 클라이언트에게 패킷을 보내도록 하는 설정이다. 자동 로그아웃은 쉘에서 작동되는 것으로 sshd 의 위 작업과는 아무런 관련이 없다. sshd 로 접속이 유지되어야 쉘이 작동되는 것임으로 이 설정은 그야 말로 sshd 의 TCP 연결이 지속되고 있는지를 체크하기 위한 것에 불과 하다.
기본값은 0 으로 이는 클라이언트에게 패킷을 보내지 않는다는 것으로 TCP 연결이 살아 있는지를 체크하지 않겠다는 뜻이다.
systemd-logind
systemd 차원에서 로그인 세션 자동 로그아웃을 설정할 수 있다. 다음과 같이 설정파일을 작성한다. 파일 없으면 그냥 만들어도 되고 있으면 아마도 코멘트처리되어 있을 것이니, 그것을 활용하면 된다.
1 2 3 |
~]# vim /etc/systemd/logind.conf [Login] StopIdleSessionSec=60 |
세션이 Idle 상태가 된지 60초가 지나면 세션을 정지(stop) 하라는 설정이다. 이렇게 한 후에 systemd 를 재시작해줘야 한다.
1 2 |
]$ sudo systemctl daemon-reload ]$ sudo systemctl restart systemd-logind.service |
이렇게 한 후에 실제 자동로그아웃이 되면 남는 로그는 다음과 같다.
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 |
8월 27 16:53:50 localhost.localdomain systemd-logind[1687]: Session "5" of user "orion" is idle, stopping. 8월 27 16:53:50 localhost.localdomain systemd[1]: Stopping session-5.scope - Session 5 of User orion... ░░ Subject: session-5.scope 유닛 끝내기 동작 시작 ░░ Defined-By: systemd ░░ Support: https://wiki.rockylinux.org/rocky/support ░░ ░░ session-5.scope 유닛 끝내기 동작을 시작했습니다. 8월 27 16:53:50 localhost.localdomain sshd-session[1749]: error: mm_reap: preauth child terminated by signal 15 8월 27 16:53:50 localhost.localdomain sshd-session[1749]: pam_unix(sshd:session): session closed for user orion 8월 27 16:53:50 localhost.localdomain systemd[1]: session-5.scope: Deactivated successfully. ░░ Subject: Unit succeeded ░░ Defined-By: systemd ░░ Support: https://wiki.rockylinux.org/rocky/support ░░ ░░ The unit session-5.scope has successfully entered the 'dead' state. 8월 27 16:53:50 localhost.localdomain systemd[1]: Stopped session-5.scope - Session 5 of User orion. ░░ Subject: session-5.scope 유닛 끝내기 동작 마침 ░░ Defined-By: systemd ░░ Support: https://wiki.rockylinux.org/rocky/support ░░ ░░ session-5.scope 유닛 끝내기 동작을 마쳤습니다. 8월 27 16:53:50 localhost.localdomain systemd-logind[1687]: Removed session 5. ░░ Subject: 5 세션 마침 ░░ Defined-By: systemd ░░ Support: https://wiki.rockylinux.org/rocky/support ░░ Documentation: sd-login(3) ░░ ░░ 5 세션을 끝냈습니다. |
쉘을 이용한 자동로그아웃시의 로그와는 다르다. sshd-session 이 error 코드가 찍히는게 특이하다. 거기다 systemd-logind: Removed session 5 라고 해서 정확하게 systemd-logind 로 인해서 세션이 종료됐음을 알려주고 있다.
한가지, 위 설정은 시스템 글로벌 설정이다. 모든 시스템 사용자에게 모두 적용이 된다.