리눅스 시스템에서 사용자 세션 제한 설정 방법

1. 서론

리눅스 운영 체제에서 사용자 세션 제한 설정은 시스템 보안을 강화하고 무단 장시간 접근을 방지하기 위해 필수적인 구성 요소입니다. 적절한 시간 제한 설정은 시스템 보안 수준을 향상시키는 동시에 사용자 경험을 최적화할 수 있습니다. 본 문서에서는 리눅스 환경에서 사용자 세션 제한을 설정하는 다양한 방법과 함께 최적화 전략을 설명하여 시스템 자원의 효율적인 활용과 잠재적 보안 위험 최소화를 도모합니다.

2. 기본 개념

리눅스 사용자 세션 제한이란 터미널 접속 상태에서 지정된 시간 동안 아무런 활동(키 입력, 명령어 실행 등)이 없는 경우 시스템이 자동으로 해당 사용자 연결을 종료하는 기능을 의미합니다.

3. 시스템 구성

운영 환경: CentOS 8.0

주요 설정 파일: /etc/profile, ~/.bashrc, /etc/ssh/sshd_config

4. 제한 유형 분류

세션 제한: 일정 시간 동안 사용자 활동이 없을 경우 시스템이 자동으로 로그아웃 처리

SSH 연결 제한: SSH 접속 시 일정 시간 동안 비활동 상태가 지속되면 연결 종료

화면 잠금 제한: 일정 시간 동안 사용자 활동이 없을 경우 화면 자동 잠금

5. 사용자 세션 제한 구현

5.1. 전체 사용자 적용

명령어 실행: vi /etc/profile, 파일 하단에 INACTIVE_TIMEOUT=420 추가하여 420초로 유휴 시간 설정, 이후 source /etc/profile 명령어로 즉시 적용

 1 [root@CentOS8 ~]# vi /etc/profile
 2 # /etc/profile
 3 
 4 # 시스템 전체 환경 변수 및 시작 프로그램 설정
 5 # 함수와 별칭은 /etc/bashrc에 정의
 6 
 7 # 이 파일 수정은 신중하게 진행해야 합니다. 커스텀 변경 사항은
 8 # /etc/profile.d/ 디렉터리에 쉘 스크립트를 생성하여 관리하는 것이 좋습니다.
 9 # 이렇게 하면 향후 업데이트 시 병합 문제를 방지할 수 있습니다.
10 
11 add_to_path() {
12     case ":${PATH}:" in
13         *:"$1":*)
14             ;;
15         *)
16             if [ "$2" = "append" ] ; then
17                 PATH=$PATH:$1
18             else
19                 PATH=$1:$PATH
20             fi
21     esac
22 }
23 
24 
25 if [ -x /usr/bin/id ]; then
26     if [ -z "$EUID" ]; then
27         # ksh 호환성 처리
28         EUID=`id -u`
29         UID=`id -ru`
30     fi
31     USERNAME="`id -un`"
32     LOGIN_NAME=$USERNAME
33     MAILBOX="/var/spool/mail/$USERNAME"
34 fi
35 
36 # 경로 설정
37 if [ "$EUID" = "0" ]; then
38     add_to_path /usr/sbin
39     add_to_path /usr/local/sbin
40 else
41     add_to_path /usr/local/sbin append
42     add_to_path /usr/sbin append
43 fi
44 
45 HOST_NAME=`/usr/bin/hostname 2>/dev/null`
46 HISTORY_SIZE=1000
47 if [ "$HISTORY_CONTROL" = "ignorespace" ] ; then
48     export HISTORY_CONTROL=ignoreboth
49 else
50     export HISTORY_CONTROL=ignoredups
51 fi
52 
53 export PATH USERNAME LOGIN_NAME MAILBOX HOST_NAME HISTORY_SIZE HISTORY_CONTROL
54 
55 # 기본 마스크 설정
56 if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
57     umask 002
58 else
59     umask 022
60 fi
61 
62 for config_file in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
63     if [ -r "$config_file" ]; then
64         if [ "${-#*i}" != "$-" ]; then
65             . "$config_file"
66         else
67             . "$config_file" >/dev/null
68         fi
69     fi
70 done
71 
72 unset config_file
73 unset -f add_to_path
74 
75 if [ -n "${BASH_VERSION-}" ] ; then
76         if [ -f /etc/bashrc ] ; then
77                 . /etc/bashrc
78        fi
79 fi
80 INACTIVE_TIMEOUT=420  # 7분간 비활동 시 연결 종료, 단위: 초
81 export TMOUT=$INACTIVE_TIMEOUT

5.2. 특정 사용자 적용

명령어 실행: vi /home/demo/.bashrc, 파일 하단에 INACTIVE_TIMEOUT=90 추가하여 demo 계정의 유휴 시간을 90초로 설정, source /home/demo/.bashrc 명령어로 즉시 적용

 1 [root@CentOS8 ~]# vi /home/demo/.bashrc
 2 # .bashrc
 3 
 4 # 전역 정의 소스
 5 if [ -f /etc/bashrc ]; then
 6         . /etc/bashrc
 7 fi
 8 
 9 # 사용자별 환경 설정
10 CUSTOM_PATH="$HOME/.local/bin:$HOME/bin:$PATH"
11 export CUSTOM_PATH
12 
13 # systemctl 자동 페이징 기능이 싫다면 다음 라인 주석 해제:
14 # export SYSTEMD_PAGER=
15 
16 # 사용자별 별칭 및 함수
17 
18 INACTIVE_TIMEOUT=90  # 1.5분간 비활동 시 연결 종료, 단위: 초
19 export TMOUT=$INACTIVE_TIMEOUT

5.3. SSH 연결 제한 설정

명령어 실행: vi /etc/ssh/sshd_config

다음 파라미터들을 찾아 "#" 제거 후 값 조정

KeepAliveInterval: 서버가 클라이언트에게 활동 유지 패킷을 보내는 간격

KeepAliveMaxCount: 클라이언트 응답이 없는 상태에서 서버가 활동 유지 패킷을 보낼 최대 횟수

설정 완료 후 systemctl restart sshd.service 명령어로 서비스 재시작

  1 [root@CentOS8 ~]# vi /etc/ssh/sshd_config
  2 #       $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $
  3 
  4 # sshd 서버 시스템 전체 설정 파일. 자세한 정보는 sshd_config(5) 참조
  5 
  6 # 이 sshd는 다음 경로로 컴파일됨: PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
  7 
  9 # 기본 sshd_config의 옵션 전략은 가능한 경우 기본값을 명시하지만
 10 # 주석 처리된 상태로 유지. 주석 해제된 옵션이 기본값 대체
 11 
 14 # SELinux 시스템에서 포트 변경 시 SELinux에 알려야 함
 16 # semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
 18 #Port 22
 19 #AddressFamily any
 20 #ListenAddress 0.0.0.0
 21 #ListenAddress ::
 23 HostKey /etc/ssh/ssh_host_rsa_key
 24 HostKey /etc/ssh/ssh_host_ecdsa_key
 25 HostKey /etc/ssh/ssh_host_ed25519_key
 46 #LoginGraceTime 2m
 47 PermitRootLogin yes
 52 #PubkeyAuthentication yes
 74 PasswordAuthentication yes
 88 GSSAPIAuthentication yes
 90 #GSSAPIStrictAcceptorCheck yes
 105 UsePAM yes
 120 #TCPKeepAlive yes
 123 KeepAliveInterval 120   # 2분마다 활동 유지 신호 송신
 124 KeepAliveMaxCount 5     # 연속 5회 미응답 시 연결 종료
 143 Subsystem       sftp    /usr/libexec/openssh/sftp-server

5.4. 화면 잠금 제한 설정

GUI 환경 진입 후 바탕화면 우클릭 → "설정" 선택 → 좌측 메뉴에서 "전원" 클릭 → 우측 창에서 "절전 및 종료" 항목 아래 "자동 절전 모드" 활성화 → "비활동 상태" 스위치 켜기 → 지연 시간을 20분으로 설정

6. 검증 테스트

6.1. 전체 사용자 제한 테스트 결과

6.2. 특정 사용자 제한 테스트 결과

이전에 설정한 demo 사용자의 경우 90초 동안 비활동 시 자동으로 세션 종료됩니다.

6.3. SSH 연결 제한 테스트 결과

SSH 파라미터 설정에 따라 KeepAliveInterval 120(2분마다 활동 신호 송신), KeepAliveMaxCount 5(5회 미응답 시 연결 종료)로 설정되었으므로 10분 후 자동으로 시간 초과 및 세션 종료됩니다.

6.4. 화면 잠금 제한 테스트 결과

20분 동안 아무런 작업이 없을 경우 화면이 자동으로 잠겨 보안 상태를 유지합니다.

태그: linux timeout Security SSH Session

8월 26일 23:51에 게시됨