티스토리 뷰

LiNuX

리눅스 기초 보안 설정

freecatz 2022. 1. 25. 09:11

이 문서는 보안 지식이 부족한 개발자 수준에서 작성 되었으며, 작성된 내용중 잘못되거나 틀린 부분이 있을수 있으므로 단순히 참고만 하며, 시스템에 적용시 발생 하는 모든 문제점은 스스로 책임 지도록 한다.

 

보건복지부에서 매년 유관 기관들의 시스템의 보안 검사를 한다고 한다. 우리 회사도 그 대상의 기관들중 하나다.

현재 우리 회사의 보안 담당자는 공석(2년전 퇴사)인 상태에서, 개발자 수준에서 인터넷을 더듬더듬 찾아 가면서 리눅스 기초 보안 설정을 시작 하게 되었다.

 

우리 회사의 주력 리눅스 배포판은 Debain 10 과 Ubuntu 18.04 이며, 이 문서에서는 Debian 10 을 기준으로 작성 한다.

대부분의 시스템이 AWS 의 private subnet 에 위치 하여 OPEN VPN을 통해서만 연결이 가능 한데, 이렇게 까지 해야 하나 싶은데 그래도 보안이니까 귀찮더라도 해두자 라는 생각이 들었다.

 

쉬운거 부터 하나씩 정리해 보도록 하자...

 

 

 

1. /etc/hosts 파일 권한 및 퍼미션 변경

root@FREECATZ-PE-KR:~# ls -al /etc/hosts
-rw-r--r-- 1 root root 636  Jan 21  2012 /etc/hosts

root@FREECATZ-PE-KR:~# chown root /etc/hosts

root@FREECATZ-PE-KR:~# chmod 600 /etc/hosts

root@FREECATZ-PE-KR:~# ls -al /etc/hosts
-rw------- 1 root root 636  Jan 21  2012 /etc/hosts

 

* 본인의 경우 추가적으로 /etc/hostname, /etc/host.conf, /etc/hosts.allow, /etc/hosts.deny 파일에도 적용 하였다.

root@FREECATZ-PE-KR:~# chown root /etc/hostname /etc/host.conf /etc/hosts.allow /etc/hosts.deny

root@FREECATZ-PE-KR:~# chmod 600 /etc/hostname /etc/host.conf /etc/hosts.allow /etc/hosts.deny 

 

* 참고 : /etc/group, /etc/passwd 파일의 퍼미션을 600으로 변경하여도 된다는 이야기가 있어 시도해 보았는데, 아래와 같은 에러가 발생 하였다.

root@FREECATZ-PE-KR:~# whoami

root

root@FREECATZ-PE-KR:~# groups
groups: cannot find name for group ID 0
0

 

위와 같은 메세지가 나오게 되며, 'su' 명령을 사용할 수 없게 된다.

이러한 경우 sudo 명령으로 관리자 권한 획득 후, /etc/group, /etc/passwd 파일의 퍼미션을 644 로 변경해 주도록 한다.

 

 

 

 

2. /tmp, /var/tmp 디렉토리 Sticky Bit 적용

/tmp /var/tmp 디렉토리에 Sticky Bit를 적용 하여 소유자 와 root만 삭제할 수 있도록 한다. Sticky Bit 의 자세한 내용은 이곳을 참고 하기 바란다.

 

root@FREECATZ-PE-KR:~# chmod 1777 /tmp /var/tmp

* 시스템에 따라 /var/tmp 디렉토리가 없는 경우도 있었다.

 

 

 

3. Shell Session Timeout 설정

root@FREECATZ-PE-KR:~ vi /etc/profile

... 중략 ...
# TIMEOUT 항목의 값은 600(10분) 이하 권장
TIMEOUT=600
export TMOUT

 

 

 

4. 비밀번호 정책 변경 

libpam-pwquality, pam_cracklib 이 설치 되어 있어야 한다.

비밀번호는 최소 10자리 =  소문자 1자리 이상 필수, 특수문자 1자리 이상 필수, 숫자 1자리 이상 필수

 

/etc/login.defs

PASS_MIN_LEN 9                            # 로그인시 비밀번호 최소 9자리 이상

PASS_MAX_DAYS    9999999      # 비밀번호 만료일 설정 90 보다 작게

PASS_MIN_DAYS     1                     # 비밀번호 최소 사용 기간 설정. 1일 이후, 비밀번호 변경 가능.
PASS_WARN_AGE   7                     # 비밀번호 만료 7일 이전 부터 비밀번호 변경 알림

 

아..이 부분은 나중에 다시 이해 하고 정리 하기로 한다...우선 쉬운거 부터 하자....

 

 

 

5. 'su' 명령어 사용 제한 SSH 로그인 계정 생성 

root 권한의 SSH 접근을 막아야 하기 때문에 시스템에 로그인 할 수 있는 일반 사용자 계정을 생성 하도록 한다.

이 과정중에 문제가 발생 할 것을 대비하여, root 권한으로 로그인된 SSH 세션을 유지 하는 것을 권장 한다.

 

지정된 그룹 외에는 'su' 명령어의 사용을 막기 위해 'wheel' 라는 그룹을 생성 한다.

root@FREECATZ-PE-KR:~# groupadd wheel

root@FREECATZ-PE-KR:~# chgrp wheel /usr/bin/su

root@FREECATZ-PE-KR:~# chmod 4750 /usr/bin/su

 

위의 과정에서 문제가 발생 하였을 경우, 아래의 명령어로 복구가 가능 하다고 한다.

root@FREECATZ-PE-KR:~# chgrp root /usr/bin/su

root@FREECATZ-PE-KR:~# chmod 4555 /usr/bin/su

 

 

'freecatz' 사용자를 생성 하며, shell 은 '/bin/bash' 로 지정 하고, 'wheel' 그룹에 넣는다.

root@FREECATZ-PE-KR:~# useradd -s /bin/bash -m freecatz -g wheel

root@FREECATZ-PE-KR:~# passwd freecatz 
New password: 
Retype new password: 
passwd: password updated successfully

 

계정 생성시, 관리자를 뜻하는 단어들(예 : admin, administrator... )은 피하도록 한다.

앞으로는 생성된 계정으로 SSH 에 로그인 한 뒤, 'su' 명령을 통해서 root 권한을 획득 하여 사용 하는 방향으로 한다.

 

만약, 이미 기존에 만들어진 계정을 'wheel' 그룹에 넣고자 한다면,  아래를 참고 한다.

root@FREECATZ-PE-KR:~# usermod -G wheel 계정명

 

su 명령이 정상적으로 제한된 경우, 'wheel' 그룹이 아닌 사용자가 'su' 명령어 실행시 아래와 같이 나와야 정상이다.

user@FREECATZ-PE-KR:~$ su -
-bash: /usr/bin/su: Permission denied

 

 

 

6. SSH 의 root 접근 막기

SSH 를 통해 root 계정으로 접근 하는 것을 제한 한다.

root@FREECATZ-PE-KR:~# vi /etc/ssh/sshd_config 

... 중략 ...
PermitRootLogin no
MaxAuthTries 3
LoginGraceTime 30
AllowUsers freecatz
Banner /etc/issue
Banner /etc/issue.net

... 중략 ...

 

참고
PermitRootLogin root 계정 로그인 시도 허용 여부. 권장 no.
MaxAuthTries 로그인 시도 횟수. 권장 5 보다 작은 값.
LoginGraceTime 로그인 대기 시간(초 단위). 권장 60 보다 작은 값.
AllowUsers SSH 로그인 허용 계정. 다수의 계정인 경우 공백으로 구분 한다.
AllowUsers tester1 tester2 tester3
권장 값 없음.
Banner 보안에 대한 지식이 부족하여 이 설정이 없으면 왜 문제가 되는지 모르겠으나, 일단'/etc/issue' 로 설정해 두도록 한다.

* 참고
/etc/issue = 로컬 콘솔 로그인시 패스워드 입력 전에 보이는 메세지
/etc/issue.net = SSH 접근시 패스워드 입력 전에 보이는 메세지
/etc/motd = 로컬, 원격 접속시 로그인 성공후 보여지는 메세지

ssh 서비스를 재시작 하여야 적용 된다.

root@FREECATZ-PE-KR:~# /etc/init.d/ssh restart
[ ok ] Restarting ssh (via systemctl): ssh.service.

 

 

 

7. 로그인 실패에 따른 로그인 지연 처리

pam_tally2를 이용해야 하는 설정이라, pam_tally2 가 시스템에 있는지 확인 한다.

root@FREECATZ-PE-KR:~# whereis pam_tally2
pam_tally2: /usr/sbin/pam_tally2 /usr/share/man/man8/pam_tally2.8.gz

 

pam_tally2 가 있으므로, 설정 파일을 수정 한다.

root@FREECATZ-PE-KR:~vi /etc/pam.d/common-auth

... 중략 ...
# 아래의 설정이 다른 설정 보다 위에 위치 하여야 적용 된다.
auth     required    pam_tally2.so deny=3 unlock_time=180
... 중략 ...

인증 과정중에 3회 비밀번호가 틀리면, 180초 동안 시스템에 로그인 불가 하다. 180초 이내에 정상적인 비밀번호로 로그인을 시도 하여도 정상 로그인 처리 되지 않는다.  비정상 접근은 아래의 명령어로 확인 가능 하다.

root@FREECATZ-PE-KR:~# pam_tally2 -u root
Login           Failures  Latest failure            From
root                429      01/25/22 09:07:56  8.***.44.**

 

비정상적인 접근 횟수를 초기화 하기 위해서는 아래의 명령어로 초기화 할 수 있다.

root@FREECATZ-PE-KR:~# pam_tally2 -r -u root

Login           Failures  Latest failure              From
root                  0   

 

 

 

99. 사용자 생성시 기본 설정(필수 사항 아님)

개인적으로 사용중인 서버에 적용 하기 위해 정리 하는 내용이므로, 참고 하지 않는다.

 

root@FREECATZ-PE-KR:~# vi /etc/default/useradd

항목 설명 기본 값  변경 값
SHELL 기본 쉘 경로 /bin/sh /bin/bash
HOME 홈 디렉토리 경로 /home /opt/home
CREATE_MAIL_SPOOL 메일함 생성 여부 yes no

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
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 29 30 31
글 보관함