메뉴 건너뛰기

SayClub.org

리눅스(Linux)

root 계정 원격 접속 제한

미르다테 2024.12.30 13:20 조회 수 : 93

원문출처 : https://atl.kr/dokuwiki/doku.php/%EA%B3%84%EC%A0%95%EA%B4%80%EB%A6%AC

 

계정관리 [AllThatLinux!]

항목 중요도 상 점검목적 관리자계정 탈취로 인한 시스템 장악을 방지하기 위해 외부 비인가자의 root 계정 접근 시도를 원천적으로 차단하기 위함 보안위협 root 계정은 운영체제의 모든기능을

atl.kr

 

root 계정 원격 접속 제한

 

항목 중요도 상

점검목적
관리자계정 탈취로 인한 시스템 장악을 방지하기 위해 외부 비인가자의 root 계정 접근 시도를 원천적으로 차단하기 위함

보안위협
root 계정은 운영체제의 모든기능을 설정 및 변경이 가능하여(프로세스, 커널변경 등) root 계정을 탈취하여 외부에서 원격을 이용한 시스템 장악 및 각종 공격으로(무작위 대입 공격) 인한 root 계정 사용 불가 위협

 

점검방법

 

RHEL 6, 7

[Telnet]

#cat /etc/pam.d/login
auth required /lib/security/pam_securetty.so
#cat /etc/securetty
pts/0 ~ pts/x 관련 설정이 존재하지 않음

[Telnet 서비스 사용시]
Step 1) /etc/securetty 파일에서 pts/0 ~ pts/x 설정 제거 또는, 주석 처리
Step 2) /etc/pam.d/login 파일 수정 또는, 신규 삽입

(수정 전) #auth required /lib/security/pam_securetty.so
(수정 후) auth required /lib/security/pam_securetty.so

※ /etc/securetty : Telnet 접속 시 root 접근 제한 설정 파일
/etc/securetty 파일 내 *pts/x 관련 설정이 존재하는 경우 PAM 모듈 설정과 관계없이 root 계정 접속을 허용하므로 반드시 /etc/securetty 파일에서 pts/x 관련 설정 제거 필요

또는

#echo > /etc/securetty

위에 제시한 내용으로 설정되어 있을 경우 root 원격 접속이 차단됨 / 내용 설정에 대해서는 아래의 보안설정방법을 참고함

결과

Last login: Fri Jan  7 14:27:23 2022 from 192.168.230.1
[root@rhel7 ~]# telnet 192.168.230.143
Trying 192.168.230.143...
Connected to 192.168.230.143.
Escape character is '^]'.
Red Hat Enterprise Linux Server release 6.10 (Santiago)
Kernel 2.6.32-754.el6.x86_64 on an x86_64
rhel6 login: root
Password: 
Login incorrect

[SSH 서비스 사용시]

Step 1) vi 편집기를 이용하여 /etc/ssh/sshd_config 파일 열기
Step 2) 아래와 같이 주석 제거 또는, 신규 삽입

(수정 전) #PermitRootLogin Yes
(수정 후) PermitRootLogin No

루트 계정에 대한 액세스를 추가로 제한하기 위해 관리자는 /etc/securetty 파일을 편집하여 콘솔에서 루트 로그인을 비활성화할 수 있습니다.
기본적으로 Red Hat Enterprise Linux의 /etc/securetty파일은 루트 사용자가 시스템에 물리적으로 연결된 콘솔에서만 로그인할 수 있도록 허용합니다.
루트 사용자가 로그인하지 못하도록 하려면 쉘 프롬프트에서 루트로 다음 명령을 입력하여 이 파일의 내용을 제거하십시오.

echo > /etc/securetty

KDM, GDM 및 XDM 로그인 관리자에서 securetty 지원을 활성화하려면 다음 행을 추가하십시오.

auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so

위 설정을 적용하기 위한 파일들은 다음과 같습니다.

/etc/pam.d/gdm
/etc/pam.d/gdm-autologin
/etc/pam.d/gdm-fingerprint
/etc/pam.d/gdm-password
/etc/pam.d/gdm-smartcard
/etc/pam.d/kdm
/etc/pam.d/kdm-np
/etc/pam.d/xdm

참조링크
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html-single/security_guide/index#s2-wstation-privileges-noroot

RHEL 8 이후 시스템에서 tty 장치 파일의 동적 특성으로 인해 securetty PAM 모듈은 기본적으로 비활성화되었으며 /etc/securetty 구성 파일은 더 이상 RHEL에 포함되지 않습니다.
/etc/securetty는 가능한 많은 장치를 나열하므로 대부분의 경우 실질적인 효과는 기본적으로 허용되는 것이므로 이 변경은 약간의 영향만 미칩니다.
그러나 보다 제한적인 구성을 사용하는 경우 /etc/pam.d 디렉토리의 해당 파일에 pam_securetty.so 모듈을 활성화하는 행을 추가하고 새 /etc/securetty 파일을 생성해야 합니다.

참조링크
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/considerations_in_adopting_rhel_8/security_considerations-in-adopting-rhel-8#securetty_security

 

Root ssh login 제한

 

RHEL 6, 7

SSH 프로토콜을 사용한 루트 로그인을 방지하려면 SSH 데몬의 구성 파일 /etc/ssh/sshd_config를 편집하고 다음 행을 변경하십시오.

#PermitRootLogin yes
PermitRootLogin no

참조링크
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html-single/security_guide/index#s2-wstation-privileges-noroot

 

RHEL 8

#PermitRootLogin yes
PermitRootLogin no

PermitRootLogin 옵션
no - root 계정의 모든 접근 방법을 차단
prohibit-password - root 계정의 암호를 사용하는 대신 키 기반 인증은 가능함

참조링크
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html-single/securing_networks/index

 

패스워드 복잡성 설정

 

RHEL 6

네 가지 문자 클래스를 모두 포함하여 최소 길이가 8자인 암호를 요구하려면 /etc/pam.d/passwd 파일의 암호 섹션에 다음 줄을 추가하십시오.

password   required     pam_cracklib.so retry=3 minlen=8 minclass=4

연속 또는 반복 문자에 대한 암호 강도 검사를 설정하려면 /etc/pam.d/passwd 파일의 암호 섹션에 다음 줄을 추가합니다.

password   required     pam_cracklib.so retry=3 maxsequence=3 maxrepeat=3

참조링크
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html-single/security_guide/index#sect-Security_Guide-Workstation_Security-Password_Security

 

RHEL 7

pam_quality 사용을 활성화하려면 /etc/pam.d/passwd 파일의 암호 스택에 다음 줄을 추가합니다.

password    required    pam_pwquality.so retry=3

네 가지 문자 클래스를 모두 포함하여 최소 길이가 8자인 암호를 요구하려면 /etc/security/pwquality.conf 파일에 다음 행을 추가하십시오.

minlen = 8
minclass = 4

문자 시퀀스 및 동일한 연속 문자에 대한 암호 강도 검사를 설정하려면 /etc/security/pwquality.conf에 다음 행을 추가하십시오.

maxsequence = 3
maxrepeat = 3

참조문서
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/security_guide/index

 

RHEL 8

Red Hat Enterprise Linux 8에서는 authconfig명령이 authselect 유틸리티로 대체되었습니다.
/etc/pam.d/ 디렉토리에 있는 PAM 전역 파일 system-auth 및 password-auth에서 직접 수정하지 않는 것이 좋습니다.

Red Hat Enterprise Linux 8에서 암호 복잡성에 대한 기본 구성 파일은 /etc/security/pwquality.conf
비밀번호 정책/복잡성을 구성하기 전에 아래와 같이 authselect를 사용하여 사용자 정의 프로파일을 작성하십시오.

1. 사용 가능한 프로필 나열

# authselect list

2. 현재 프로필 및 활성화된 기능 나열

# authselect current

3. 현재 프로필/변경 사항 백업

# authselect apply-changes -b --backup=sssd.backup

4. 기존 프로필 sssd에서 복사한 새 사용자 지정 프로필 이름 password-policy 생성

#  authselect create-profile password-policy -b sssd

- 새로 생성된 프로필은 /etc/authselect/custom/password-policy/ 위치에서 사용할 수 있습니다.

5. 새 사용자 정의 프로필을 현재 프로필로 설정

# authselect select custom/password-policy
# authselect current

6. 예를 들어 기능을 활성화하려면 사용자 로그인 시 홈 디렉토리가 아직 없는 경우 생성하고 faillock을 사용하여 계정 잠금을 활성화하려면 다음 명령을 실행합니다.

# authselect enable-feature with-mkhomedir
# authselect enable-feature with-faillock

RHEL 8.2 릴리스에서 pam_faillock은 이제 /etc/security/faillock.conf에 있는 faillock.conf 구성 파일에서 설정을 읽을 수 있습니다. 이 페이지의 아래 참고 사항을 참조하십시오.

메모:
/etc/pam.d/xxxx-auth의 pam_faillock.so 행에 있는 옵션은 faillock.conf의 설정을 재정의합니다.
faillock.conf에서 구성하려면 다음과 같이 /etc/authselect/custom/PROFILE/xxxx-auth를 수정하십시오.

# Edit {system,password,fingerprint,smartcard}-auth in /etc/authselect/custom/password-policy/

(Before)
auth        required                                     pam_env.so
auth        required                                     pam_faildelay.so delay=2000000
auth        required                                     pam_faillock.so preauth silent deny=4 unlock_time=1200
...snip...
auth        required                                     pam_faillock.so authfail deny=4 unlock_time=1200
auth        required                                     pam_deny.so
↓  
(After)
auth        required                                     pam_env.so
auth        required                                     pam_faildelay.so delay=2000000
auth        required                                     pam_faillock.so preauth
...snip...
auth        required                                     pam_faillock.so authfail
auth        required                                     pam_deny.so

7. 사용자 정의 프로필 디렉토리 /etc/authselect/custom/password-policy/에서 사용할 수 있는 전역 PAM 구성 파일 system-auth 및 password-auth에서 원하는/사용자 정의 변경을 수행합니다.
변경 사항이 적용되면 다음 명령을 사용하여 적용합니다.

# authselect apply-changes

- 파일에 변경 사항이 기록되었는지 확인합니다.

8. 사용된 비밀번호의 이력(재사용할 수 없는 이전 비밀번호의 수)을 유지합니다.
/etc/authselect/custom/password-policy/system-auth 및 /etc/authselect/custom/password-policy/password-auth 파일에 다음 줄을 삽입합니다(pam_pwquality.so 줄 뒤에)

password    requisite     pam_pwhistory.so remember=5 use_authtok

9. 암호 복잡성을 위해 루트를 적용합니다.
/etc/authselect/custom/password-policy/system-auth 및 /etc/authselect/custom/password-policy/password-auth 파일의 암호 섹션 아래 pam_pwquality.so 행에 다음 옵션을 삽입/추가합니다.

enforce_for_root

참고: 변경한 후 변경 사항을 적용하려면 authselect apply-changes를 실행해야 합니다.

10. /etc/security/pwquality.conf 파일에서 적절한 옵션을 설정하십시오.

minlen = 9          새 암호에 대해 허용되는 최소 크기입니다. 여기에는 크레딧(기본값인 비활성화되지 않은 경우 1개 추가)이 포함됩니다.
dcredit = -1        비밀번호에 필요한 숫자가 있어야 하는 최소 크레딧
ucredit = -1        비밀번호에 대문자를 사용하기 위한 최소 크레딧입니다.
lcredit = 1         비밀번호에 소문자를 사용할 수 있는 최대 크레딧입니다.
ocredit = 1         암호에 다른 문자를 포함할 수 있는 최대 크레딧입니다.
minclass = 1        새 비밀번호에 필요한 최소 문자 클래스 수.
maxrepeat = 2       새 비밀번호에서 연속으로 허용되는 동일한 문자의 최대 수입니다.
maxclassrepeat = 2  새 비밀번호에서 동일한 클래스의 연속 문자가 허용되는 최대 수입니다.
difok = 5           새 비밀번호에 사용할 수 있는 최대 문자 수(이전 비밀번호에 비해..), root는 이전 비밀번호를 묻지 않으므로 적용되지 않음

크레딧 값 > 0 : 새 비밀번호에 각 문자를 포함하기 위한 최대 크레딧입니다.
크레딧 값 < 0 : 새 비밀번호에 각 문자를 포함하는 데 필요한 최소 필수 크레딧입니다.
신용 값 = 0: 새 암호에 해당 문자 클래스를 포함해야 하는 필수 요구 사항이 없습니다.

참조링크
https://access.redhat.com/solutions/5027331

 

계정 잠금 임계값 설정

 

RHEL 6

3번의 실패한 시도 후에 루트가 아닌 사용자를 잠그고 10분 후에 해당 사용자의 잠금을 해제하려면 /etc/pam.d/system-auth 및 /etc/pam.d/password-의 auth 섹션에 다음 행을 추가하십시오.

auth        required       pam_faillock.so preauth silent audit deny=3 unlock_time=600
auth        sufficient     pam_unix.so nullok try_first_pass
auth        [default=die]  pam_faillock.so authfail audit deny=3 unlock_time=600

이전 단계에서 지정한 두 파일의 계정 섹션에 다음 줄을 추가합니다.

account     required      pam_faillock.so

루트 사용자에게도 계정 잠금을 적용하려면 /etc/pam.d/system-auth 및 /etc/pam.d/password-auth 파일의 pam_faillock 항목에 even_deny_root 옵션을 추가합니다.

auth        required      pam_faillock.so preauth silent audit deny=3 even_deny_root unlock_time=600
auth        sufficient    pam_unix.so nullok try_first_pass
auth        [default=die] pam_faillock.so authfail audit deny=3 even_deny_root unlock_time=600

account     required      pam_faillock.so

사용자 계정의 잠금을 해제하려면 루트로 다음 명령을 실행합니다.

# faillock --user <username> --reset

참조문서
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html-single/security_guide/index#sect-Security_Guide-Workstation_Security-Account_Locking

 

RHEL 7

3번의 실패한 시도 후에 루트가 아닌 사용자를 잠그고 10분 후에 해당 사용자의 잠금을 해제하려면 /etc/pam.d/system-auth 및 /etc/pam.d/password-auth의 auth 섹션에 두 줄을 추가합니다. 파일. 편집 후 두 파일의 전체 인증 섹션은 다음과 같아야 합니다.

1 auth        required      pam_env.so
2 auth        required      pam_faillock.so preauth silent audit deny=3 unlock_time=600  <- 추가
3 auth        sufficient    pam_unix.so nullok try_first_pass
4 auth        [default=die] pam_faillock.so authfail audit deny=3 unlock_time=600  <- 추가
5 auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
6 auth        required      pam_deny.so

이전 단계에서 지정한 두 파일의 계정 섹션에 다음 줄을 추가합니다.

account     required      pam_faillock.so

루트 사용자에게도 계정 잠금을 적용하려면 /etc/pam.d/system-auth 및 /etc/pam.d/password-auth 파일의 auth required pam_faillock.so 항목에 even_deny_root 옵션을 추가합니다.

auth        required      pam_faillock.so preauth silent audit deny=3 even_deny_root unlock_time=600
auth        sufficient    pam_unix.so nullok try_first_pass
auth        [default=die] pam_faillock.so authfail audit deny=3 even_deny_root unlock_time=600

account     required      pam_faillock.so

사용자 계정의 잠금을 해제하려면 루트로 다음 명령을 실행합니다.

#faillock --user <username> --reset

참조문서
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/security_guide/index#sect-Security_Guide-Workstation_Security-Account_Locking
https://access.redhat.com/solutions/62949

 

RHEL 8

/etc/pam.d/system-auth 및 /etc/pam.d/password-auth를 수동으로 편집하는 것은 권장되지 않습니다. authselect를 사용하여 pam_faillock을 활성화/비활성화합니다.

To enable faillock

# authselect enable-feature with-faillock

To disable faillock

# authselect disable-feature with-faillock

faillock 구성
faillock 옵션은 /etc/security/faillock.conf에 저장해야 합니다.

deny=4
unlock_time=1200
silent

인증 실패 기록을 재설정하거나 보려면 다음과 같은 명령을 사용하십시오.
사용자 이름에 대한 인증 실패 기록을 표시하려면

# faillock --user username

사용자 이름에 대한 인증 실패 기록을 재설정하려면

# faillock --user username --reset

SSHD 구성 조정
pam_faillock.so가 예상대로 작동하지 않으면 SSHD 구성을 다음과 같이 변경해야 할 수 있습니다.

# vi /etc/ssh/sshd_config
ChallengeResponseAuthentication yes
PasswordAuthentication no

그런 다음 이러한 구성 변경 사항을 적용하려면 sshd 서비스를 다시 시작합니다.

# systemctl restart sshd

참조문서
https://access.redhat.com/solutions/62949

 

패스워드 파일 보호

/etc/shadow 파일의 패스워드 암호화 존재 확인
/etc/passwd 파일 내 두 번째 필드가 “ X ” 표시되는지 확인

참조문서
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html-single/security_guide/index

root 이외에 UID가 '0' 금지

/etc/passwd 파일 내 UID (세 번째 필드 값) 확인
root 이외의 계정이 “UID=0”인 경우 0이 아닌 적절한 UID 부여

참조문서
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html-single/security_guide/index

 

root 계정 su 제한

“wheel” 그룹 및 그룹 내 구성원 존재 여부 확인
/etc/group
wheel:x:10:root,admin

/etc/pam.d/su

#%PAM-1.0
auth            sufficient      pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth           sufficient      pam_wheel.so trust use_uid			# 주석해제 시 해당 그룹사용자는 무조건 신뢰(패스워드확인 안함)
# Uncomment the following line to require a user to be in the "wheel" group.
#auth           required        pam_wheel.so use_uid				# 주석해제 시 해당 그룹사용자는 패스워드 확인 후 신뢰
auth            include         system-auth
account         sufficient      pam_succeed_if.so uid = 0 use_uid quiet
account         include         system-auth
password        include         system-auth
session         include         system-auth
session         optional        pam_xauth.so

참조문서
https://access.redhat.com/solutions/452213

 

패스워드 최소 길이, 최대 사용 기간, 최소 사용기간 설정

/etc/login.defs 내 패스워드 관련 파일 수정

PASS_MAX_DAYS	99999  패스워드 사용 가능 기간(일)
PASS_MIN_DAYS	0      패스워드 변경 최소 기간(일)
PASS_MIN_LEN	5      패스워드 최소 길이
PASS_WARN_AGE	7      패스워드 기간 만료 경고 기간(일)

불필요한 계정 제거

/etc/passwd 파일 내 계정확인 후 제거

 

관리자 그룹에 최소한의 계정 포함

/etc/group 내
root:x:0:root 확인

 

계정이 존재하지 않는 GID 금지

/etc/group 파일과 /etc/passwd 파일 비교하여 점검

 

동일한 UID 금지

/etc/passwd 파일 내 동일한 UID가 있는지 확인

 

사용자 shell 점검

로그인이 불필요한 계정에 /bin/false 또는 /sbin/nologin 쉘 부여

/etc/passwd 파일 내 로그인 쉘 부분인 계정 맨 마지막에 부여

 

Session Timeout 설정

 

/etc/profile 파일 내

HOSTNAME=`/usr/bin/hostname 2>/dev/null`
HISTSIZE=5000                                 # 히스토리 저장 갯수 
HISTTIMEFORMAT="%F %T "                       # 히스토리 저장시 날짜 시간 같이 저장
TMOUT=300                                     # 세션 타임아웃 시간 설정
if [ "$HISTCONTROL" = "ignorespace" ] ; then
    export HISTCONTROL=ignoreboth
else
    export HISTCONTROL=ignoredups
fi

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL HISTTIMEFORMAT TMOUT  # 환경변수 적용
번호 제목 글쓴이 날짜 조회 수
75 우분투(Ubuntu) 서버 / Nginx, PHP, MariaDB 설치하고 설정하기 미르다테 2024.12.30 17
74 워드프레스 미디어 업로드 용량 제한 오류 해결 미르다테 2024.12.30 18
73 Nginx Reverse Proxy 사용시 IP 주소 전달 문제 해결하기 미르다테 2024.12.30 21
72 우분투(Ubuntu) 서버에 삼바(SAMBA) 설치하기 미르다테 2024.12.30 33
71 만자로(Manjaro) 리눅스 설치 후 초기 세팅 미르다테 2024.12.30 28
70 만자로(Manjaro) 리눅스 Pacman 사용법 미르다테 2024.12.30 23
69 Nginx Proxy Manager SSL 자동 갱신하기 미르다테 2024.12.30 29
68 우분투(Ubuntu) 서버 한글 폰트 설치하기 미르다테 2024.12.30 43
67 우분투(Ubuntu) 서버 지역시간설정(tzdata) 및 로케일(locale) 설정하기 미르다테 2024.12.30 56
66 우분투(ubuntu) 서버 유저명, 홈경로, 그룹명 변경 방법 미르다테 2024.12.30 41
65 CentOS 리눅스 YUM 사용법 미르다테 2024.12.30 48
64 CentOS 서비스 자동시작 설정 및 해제 미르다테 2024.12.30 67
63 CentOS 7에서 Docker 및 Docker Compose 설치하기 미르다테 2024.12.30 84
62 칼리 리눅스(Kali Linux)에 크롬(Chrome) 설치하기 미르다테 2024.12.30 69
61 우분투(Ubuntu)에서 일괄 업데이트하기 (불필요한 패키지 자동 삭제) 미르다테 2024.12.30 57
60 우분투(Ubuntu) 서버 보안 자동 업데이트 방법 미르다테 2024.12.30 71
59 CPU Governor 종류 미르다테 2024.12.30 85
58 그누보드5 게시판의 첨부파일 용량 제한과 관련된 PHP 설정 미르다테 2024.12.30 79
57 리눅스 로그파일 utmp, wtmp, btmp, last log, sulog 미르다테 2024.12.30 51
56 Virtualbox Centos 7 게스트확장설치 미르다테 2024.12.30 61
위로