오늘은 리눅스 설치 후 반드시 해야 할 보안설정들을 알아보도록 하겠습니다.
기초 보안설정은 매우 중요합니다. 외부의 침입을 예방하는 것은 매우 중요하기 때문에 반드시 숙지해야할 사항이며,
회사의 현업 보안 규정 또한 만족시켜야 하므로 철저히 준비하는것이 좋겠습니다.
지금부터 리눅스 보안을 강화하는 필수 설정을 살펴보겠습니다.
1. 중요 데이터 백업 전략 수립
해외의 무분별한 접근 시도, 랜섬웨어 피해.. 생각만 해도 싫습니다.
재난은 언제든 일어날 수 있으므로 먼저 중요 데이터를 보호하고 안전하게 백업하는 것을 목표로 합니다.
아울러 정기적인 백업을 설정하고, 백업본을 별도의 서버나 오프라인 저장소에 보관합니다.
1.1. rsync 툴을 이용하여 주기적으로 파일 백업
rsync는 증분 백업을 지원하는 아주 좋은 복사 툴입니다.
# rsync -av --delete /important/data /backup/location
- 매일 밤 11시(23:00)에 localuser 계정으로 rsync 명령어를 실행 ( 로컬 백업(nfs fs) or 원격백업 )
# crontab -l
- local backup
00 23 * * * localuser rsync -av --delete --progress -i -h /important/data /backup/location --log-file=rsync.log
- local to remote backup
00 23 * * * localuser rsync -av --delete --progress -i -h /important/data 172.30.1.132:/backup/location --log-file=remote_rsync.log
1.2. rear로 주기적인 OS수준의 백업
리눅스 OS는 "rear"라는 OS 수준의 복구 솔루션이 있습니다. OS 수준의 전체 백업을 지원하는 매우 유용한 툴입니다.
rear에 관한 설정과 사용법은 아래 링크를 확인해 주세요.
강력한 리눅스백업 리눅스복구 솔루션: REAR란 무엇인가? 주요 기능 사용법
리눅스 시스템을 운영하다 보면 장애나 재해로 인해 시스템을 복구해야 하는 상황이 발생할 수 있습니다. 이때 가장 중요한 것이 바로 백업 및 복구 솔루션입니다. 오늘은 리눅스 환경에서 강력
linux89.tistory.com
2. 기본 보안 설정
2.1. ssh 루트 계정 원격 접근 제한
# cat /etc/ssh/sshd_config.d/01-permitrootlogin.conf
# This file has been generated by the Anaconda Installer.
# Allow root to log in using ssh. Remove this file to opt-out.
PermitRootLogin no
- 또는 /etc/ssh/sshd_config에 PermitRootLogin no 작성
# systemctl restart sshd
- 설정 확인
# grep -rni permitRootLogin /etc/ssh/sshd_config*
/etc/ssh/sshd_config.d/01-permitrootlogin.conf:1:PermitRootLogin no
2.2. 암호 복잡성 설정하기
- 패스워드 복잡성 설정
- 준수: 영문 1자, 숫자 1자, 특수문자 1자이상 혼합된 8자리 이상의 패스워드 변경정책이 설정된 경우
# vi /etc/security/pwquality.conf
ex)
minlen = 8 << 패스워드 길이를 8자로 제한
dcredit = -2 << 숫자가 적어도 2개 포함
ucredit = -2 << 대문자 적어도 두개 포함
lcredit = -2 << 소문자 적어도 두개 포함
ocredit = -2 << 특수문자 적어도 두개 포함
minclass = 2 << 패스워드에 필요한 최소 문자 수 (kinds ⇒ UpperCase / LowerCase / Digits / Others)
maxrepeat = 2 << 연속된 문자수 2개 허용
2.3. 계정 임계치 설정
정책 변경 설정
설정 이후 계정들에게만 적용되므로, 설정 이전에 생성한 계정은 아래 chage 명령으로 변경이 필요합니다.
# vi /etc/login.defs
PASS_MAX_DAYS 90 //패스워드 사용이 가능한 기간
PASS_MIN_DAYS 1 //패스워드 변경이 가능한 최소 기간
PASS_MIN_LEN 8 //패스워드 최소 길이
PASS_WARN_AGE 7 //패스워드 만료 표시 기간
정책 확인
# chage -l root
Last password change : Mar 1, 2024
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 1 //패스워드를 변경할 수 있는 최소 기간
Maximum number of days between password change : 90 //패스워드를 사용 가능한 최대 기간
Number of days of warning before password expires : 7 //패스워드 만료 경고
2.4. faillock 설정 - 계정 접근제한 모듈 설정
faillock모듈은 과거의 pam_tally2 모듈 인증 방식과 유사한 기능을 수행하지만 더 많은 옵션과 유연성을 제공합니다.
rhel8/cent8/rocky8 ( available from pam-1.3.1-8.el8. )부터 pam_tally2 모듈은 없어지고 기본적인 default 계정 접근 인증 모듈이 되었습니다.
시스템 인증 설정 중 가장 많이 하는 실수는 계정 접근 인증 설정을 /etc/pam.d/system-auth, password-auth 파일에 직접 수정을 하는것입니다.
따라서 /etc/security/faillock.conf 파일에서 수정하도록 권장 됩니다.
이 설정의 활성화 여부는 아래 PAM 설정의 enable-feature with-faillock과 연계되므로 다음 단락에서 자세히 설명하도록 하겠습니다.
- faillock options should be stored in /etc/security/faillock.conf:
- 패스워드를 4번 실패하면 1200초 동안 로그인 잠김
# vi /etc/security/faillock.conf
deny=4
unlock_time=1200
2.5. 불필요 계정 제거
시스템에 존재하는 불필요 계정을 제거합니다.
단, 아래 명령으로 제거할 불필요 계정이 소유하고 있는 파일이 있는지 사전에 확인하는것이 좋습니다.
# find / -user <계정명> 2>/dev/null
왜냐하면 소유자 없는 파일로써 보안취약 사항에 해당되어 추가적인 보안취약사항이 발생할 수 있기 때문입니다.
userdel -r 불필요한_계정
userdel -r lp
userdel -r game 등
2.6. 불필요 서비스 확인
아래 명령을 통해 불필요한 서비스는 중지하여 보안취약점을 내포할 가능성이 있는 불필요 서비스를 미연에 방지합니다.
# systemctl list-unit-files --type=service --state=enabled
UNIT FILE STATE PRESET
auditd.service enabled enabled
chronyd.service enabled enabled
crond.service enabled enabled
dbus-broker.service enabled enabled
firewalld.service enabled enabled
getty@.service enabled enabled
httpd.service enabled disabled
ex)
# systemctl --now disable httpd.service
3. PAM 설정
3.1. Authselect 툴을 이용
Authselect 는 특정 프로필을 선택하여 시스템 ID 및 인증 소스를 구성할 수 있는 유틸리티입니다.
프로필은 결과적으로 PAM(Pluggable Authentication Modules) 및 NSS(Network Security Services) 구성을 설정하는 파일 집합입니다. 기본 프로필을 선택하거나 사용자 지정 프로필을 만들 수 있습니다.
즉 PAM 규칙 설정을 자동으로 수행해 줍니다. 이부분이 authselect 툴을 사용하기에 가장 추천하는 부분입니다.
여러 고객사에서 설정한 PAM을 확인해보면 해당 규칙 자체가 라인 규칙이 엄격하게 지켜져야 하지만, 대부분 순서를 잘못 지정했다거나 사용되지 않는 모듈을 적용해 오류가 나는 실수를 많이 목격하였습니다.
따라서 이 authselect는 PAM규칙을 규격화하여 설정해주기 때문에 규칙설정에 대해 고민할 필요도 없고 휴먼 에러를 방지해줍니다.
- 기본적인 프로필을 선택합니다.
- 기본적인 로컬 서버의 유저와 그룹에 해당하는 인증 프로필을 사용하려면 minimal을 선택합니다.
- 현업에서 LDAP을 사용하는 회사의 네트워크에 로그인하려면 sssd 프로필을 선택합니다.
# authselect list
- minimal Local users only for minimal installations
- sssd Enable SSSD for system authentication (also for local users only)
- winbind Enable winbind for system authentication
- 기본적으로 minimal 프로필을 선택하면 /etc/pam.d/* 파일들이 minimal환경에 맞게 덮어쓰기 된다는 경고입니다.
- 어차피 처음 설정이므로 안내에 따라 --force 옵션을 첨부해 줍니다.
# authselect select minimal
[error] File [/etc/pam.d/system-auth] exists but it needs to be overwritten!
[error] File [/etc/pam.d/password-auth] exists but it needs to be overwritten!
[error] File [/etc/pam.d/fingerprint-auth] exists but it needs to be overwritten!
[error] File [/etc/pam.d/smartcard-auth] exists but it needs to be overwritten!
[error] File [/etc/pam.d/postlogin] exists but it needs to be overwritten!
[error] File [/etc/nsswitch.conf] exists but it needs to be overwritten!
[error] File that needs to be overwritten was found
[error] Refusing to activate profile unless this file is removed or overwrite is requested.
Some unexpected changes to the configuration were detected.
Use --force parameter if you want to overwrite these changes.
- 해당 프로필을 선택하면 nsswitch.conf파일의 일부 네임 서비스 스위치 맵을 덮어씁니다.
- 이 역시 초기 설정이므로 크게 신경쓸 것이 없습니다.
- 만약 기존의 sssd 프로파일을 사용했지만, minimal이나 기타 프로필로 변경시에는 덮어쓰기로 인해
- 내용이 변경될 수 있으니 이점은 고려해야 합니다.
- 설정시 기존 파일 내역은 /var/lib/authselect/backups에 백업됩니다.
# authselect select minimal --force
Backup stored at /var/lib/authselect/backups/2025-03-12-03-14-35.hQGBPA
Profile "minimal" was selected.
The following nsswitch maps are overwritten by the profile:
- aliases
- automount
- ethers
- group
- hosts
- initgroups
- netgroup
- networks
- passwd
- protocols
- publickey
- rpc
- services
- shadow
2.4. 단락의 faillock설정을 pam 정책에 추가하려면 아래와 같은 명령을 수행합니다.
# authselect enable-feature with-faillock
# authselect current
Profile ID: minimal
Enabled features:
- with-faillock
4회 실패시 1200초 동안 계정이 잠기는지 테스트 해봅니다.
# watch faillock --user user01
user01:
When Type Source Valid
2025-03-12 13:01:33 RHOST 172.30.1.98 V
2025-03-12 13:01:50 RHOST 172.30.1.98 V
2025-03-12 13:01:56 RHOST 172.30.1.98 V
2025-03-12 13:02:00 RHOST 172.30.1.98 V
정상 작동하면 --reset 옵션을 부여하여 실패를 초기화 합니다.
# faillock --user user01 --reset
faillock 정책을 "비활성"하려면 아래와 같은 명령을 수행합니다.
# authselect disable-feature with-faillock
리눅스 OS 설치 이후 위와 같은 기본적인 보안설정, 접근 제한 인증 설정 등만 정상적으로 설정해도 기본적인 보안 조건을 잘 지킬 수 있습니다.
다음 단락에선 리눅스 OS 수준의 방화벽설정, selinux 검토 등을 다루도록 하겠습니다.