본문 바로가기
OS/RHEL | CentOS

Linux Password 강제 변경 방법 및 복잡성 정책

by stkang 2022. 6. 16.

Linux Password 강제 변경 방법 및 복잡성 정책

이번 포스트에선 Linux에서 Password 특정 계정의 패스워드를 강제로 변경시키는 방법과 복잡성 설정에 대해 작성하겠습니다.

 

Password의 복잡성 설정 원리

(RedHat 계열) 먼저 User에 대한 Password 복잡성은 /etc/pam.d/system-auth 및 /etc/pam.d/password-auth 파일에서 인증절차에 관련된 모듈을 Load하는 내용이 있으며, 전반적으로 pam 모듈을 통해 제어하도록 되어있습니다.

해당 파일 내용에서 각 필드별 의미와 required, sufficient, optional 와 같은 중간 필드에선 조건에 관련된 심화적인 내용이 있지만, 이 포스트에서 다루지 않겠습니다.

 

/etc/pam.d 아래에 있는 파일들은 수정한 이후부터 즉시 적용되며 중간 필드에선 조건문으로 동작하기에 잘못 수정하면 로그인이 불가능한 현상이 발생할 수 있으므로 꼭 수정 전에 Backup 파일을 생성 후 수정하는 것을 추천합니다.

 

password 복잡성에 관련된 모듈은 pam_cracklib.so (RHEL 6버전이하) / pam_pwquality.so (RHEL 7버전 이상) 입니다.

(RHEL 6 버전이하는 현재 EOS 되어있으므로 pam_cracklib.so 는 사용 X)

관련 내용 링크 : https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/security_guide/chap-hardening_your_system_with_tools_and_services

 

pam_pwquality.so 모듈을 사용할 때 /etc/pam.d/system-auth, /etc/pam.d/password-auth 파일에서 모듈을 읽어들이는 구문옆에 옵션으로 필요한 복잡성 규칙을 넣어 조건을 완성 시켜도되지만, 기본적으로 /etc/security/pwquality.conf 에서 설정하는 것이 관리자 측면에서 더 용이합니다.

(시스템 구축 후 진행하는 보안취약점 조치에서 오래된 보안취약점 스캔 스크립트들은 system-auth 파일과 password-auth 파일만 체크하는게 대부분이기 때문에 각자 운영환경에서 맞춰서 설정하면 될 것 같다..)

 

복잡성 이외에 로그인 실패 시 Failure Count가 증가하여 계정 잠금이 가능한 tally2 모듈이나 faillock 모듈도 있지만 해당 내용은 생략하겠습니다.

/etc/security/pwquality.conf 파일 설정법

- /etc/security/pwquality.conf

minlen = 8  // 최소 패스워드 길이

dcredit = 1 // 패스워드에 숫자문자가 가질 수 있는 값 지정.

ucredit = 1 // 패스워드에 영문 대문자가 가질 수 있는 값 지정.

lcredit = 1 // 패스워드에 영문 소문자가 가질 수 있는 값 지정.

ocredit = 1 // 패스워드에 특수문자가 가질 수 있는 값 지정.

defok = 10 // 기존 패스워드와 비교, 기본 값 10

 

 * 각 항목에서 -1 값을 주면 반드시 해당하는 문자를 포함시켜야 한다.

(dcredit=-1 이라면 패스워드에 숫자가 1 이상 포함되어야함)

 

 

Linux Password 강제 변경 (# passwd / # chpasswd)

서론이 길었지만, 위의 내용을 알아야 왜 강제 변경을 하려 하는지 이해가 된다고 생각합니다.

먼저 root 계정으로 로그인 한 경우 현재 서버에 password 정책이 어떻게 설정 되어있던간에 아래와 같이 경고 문구만 발생하고 무조건적으로 변경됩니다.

따라서 일반적인 시스템이라면 그냥 root 계정으로 # passwd Command 를 이용해 변경해버리면 됩니다.

 

하지만 금융권 및 보안을 중요시 생각하는 기업의 서버들에서 (주로 폐쇄망) 별도 보안솔루션 및 자체 보안프로그램이 있기에 (RedCastle과 같은 root 상위에서 제어정책을 적용하는 솔루션들 ...)

root 계정이나 root권한을 가지고있는 ($ su - 및  $ sudo -i 가능한) 계정을 통해서 # passwd 명령을 사용해도 패스워드가 변경되지 않는 경우가 있습니다.

 

해당 경우에는 아래와 같이 # passwd 명령에 --stdin 옵션을 사용하면 강제로 설정 할 수 있습니다.

# echo '변경할 비밀번호' | passwd --stdin 계정명

 

passwd 명령의 옵션 중 --stdin 이라는 Standard Input 옵션을 활용해 Password를 밀어 넣을 수 있습니다.

그러나 터미널에서 명령줄에 Password를 평문으로 입력하기 때문에 history에 남기에 운영 정책상 보안위배에 해당하거나 악용될 가능성이 있습니다. 

 

추가적으로 배치작업 형식으로 사용하는 # chpasswd 명령이 있습니다.

(해당 방식도 보안솔루션을 무시하고 비밀번호를 밀어넣음)

# chpasswd 명령은 기본 형식에서부터 Password를 Standard Input 평문형태로 포함하여 실행하는 명령이라 보안적으로 위험하기에 잘 사용하지 않습니다.

 

# echo '계정명:비밀번호' | chpasswd   (root 권한이 없으면 실행 불가)

일반적으로 1개의 계정에 대해 변경 시

 

배치형식으로 사용하는 방법

배치형식처럼 파일내에 정보를 넣고 한번에 수행하는 방법

 

댓글