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분 동안 아무런 작업이 없을 경우 화면이 자동으로 잠겨 보안 상태를 유지합니다.