Linux에서 사용자가 비밀번호를 변경하도록 하는 방법

리눅스 네트워크 환경에서의 비밀번호 관리

비밀번호는 계정 보안의 중요한 요소입니다. 리눅스 네트워크 환경에서 비밀번호를 재설정하고, 만료 기간을 설정하며, 변경 사항을 적용하는 방법을 알아보겠습니다.

비밀번호의 역사

비밀번호는 거의 60년 동안 사용되어 왔습니다. 1960년대 중반, 컴퓨터 시스템에서 사용자를 식별하고 파일 접근을 제어하기 위한 방법으로 처음 도입되었습니다. 매사추세츠 공과 대학의 호환 시분할 시스템(Compatible Time-Sharing System)에서 사용자 이름과 개인 비밀번호를 활용한 계정 접근 방식이 개발되었고, 페르난도 J. 코르바토가 이 방식을 제안했습니다.

비밀번호의 주요 문제점은 열쇠와 유사하게 작동한다는 것입니다. 비밀번호를 가진 사람은 누구나 계정에 접근할 수 있습니다. 다단계 인증이 보편화되기 전에는 비밀번호가 시스템을 보호하는 유일한 수단이었습니다. SSH와 같은 원격 연결은 SSH 키를 사용할 수 있지만, 로컬 로그인의 경우 여전히 비밀번호 관리가 필요합니다. 따라서, 비밀번호 사용자와 더불어 비밀번호 관리의 중요성은 매우 큽니다.

비밀번호의 구조

좋은 비밀번호는 추측하기 어렵고, 다른 곳에서 사용되지 않았으며, 데이터 유출에 노출된 적이 없어야 합니다. Have I Been Pwned? (HIBP) 웹사이트에 따르면, 수십억 건의 침해된 자격 증명 정보가 존재하며, 이는 다른 사람도 동일한 비밀번호를 사용할 가능성이 있음을 의미합니다.

만약 비밀번호가 HIBP 웹사이트에 있다면, 이는 위협 행위자의 목록에 포함되어 있다는 뜻입니다. 무차별 대입 공격 및 사전 공격 도구를 통해 해커는 계정 접근을 시도할 수 있습니다. 무작위로 생성된 비밀번호는 사실상 무적이지만, 기억하기 어렵다는 단점이 있습니다. 온라인 계정의 경우, 복잡한 암호를 생성하고 관리해주는 비밀번호 관리자를 사용하는 것이 좋습니다.

로컬 계정의 경우, 각 사용자는 고유한 암호를 생성해야 합니다. 조직은 허용되는 비밀번호와 그렇지 않은 비밀번호에 대한 정책을 수립해야 하며, 사용자는 다른 계정에서 비밀번호를 재사용하지 않도록 교육해야 합니다. 일반적으로 기업의 비밀번호 정책은 최소 문자 수, 대소문자 혼합, 기호 및 구두점 포함 등을 요구합니다.

카네기 멜론 대학교 연구팀의 연구에 따르면, 암호의 견고성을 결정하는 주요 요소는 12자 이상의 길이와 충분한 복잡성입니다. 연구원들은 다양한 소프트웨어 크래커 프로그램, 통계 기법, 신경망을 사용하여 암호의 강도를 측정했습니다. 단순히 복잡한 암호보다는 길이가 길고 기억하기 쉬운 암호가 더 효과적일 수 있습니다. 예를 들어, “chimney.purple.bag”은 “chicago99”보다 훨씬 강력하며, 4000억 년의 해독 시간을 요합니다.

현재 설정 확인

개인 비밀번호를 변경하기 전에 현재 설정을 확인하는 것이 좋습니다. passwd 명령과 -S(상태) 옵션을 사용하여 확인할 수 있습니다. 다른 사용자의 암호 설정을 확인하려면 sudo와 함께 사용해야 합니다.

다음 명령어를 입력합니다:

sudo passwd -S mary

터미널 창에 다음과 같은 정보가 출력됩니다.

출력되는 정보는 다음과 같습니다:

로그인 이름 사용자의 로그인 이름
상태 P(유효한 비밀번호), L(잠긴 계정), NP(비밀번호 미설정) 중 하나
마지막 변경 날짜 비밀번호가 마지막으로 변경된 날짜
최소 사용 기간 비밀번호 재설정 사이의 최소 기간 (일), 0이면 제한 없음
최대 사용 기간 비밀번호 변경을 요구하는 최대 기간 (일), 99999이면 만료되지 않음
경고 기간 비밀번호 변경 알림을 받는 기간
비활성 기간 비밀번호 만료 후 계정이 잠기기 전의 유예 기간 (일), -1이면 유예 기간 없음

최대 비밀번호 사용 기간 설정

비밀번호 재설정 기간을 설정하려면 -x 옵션을 사용합니다. 예를 들어, 다음 명령어를 입력하면 “mary” 계정의 최대 비밀번호 사용 기간을 45일로 설정합니다.

sudo passwd -x45 mary

다음과 같이 만료 값이 변경됩니다.

-S 옵션을 사용하여 변경된 값을 확인할 수 있습니다.

sudo passwd -S mary

이제 “mary” 계정은 45일 후 비밀번호를 변경해야 하며, 7일 전부터 알림을 받게 됩니다. 만약 새로운 비밀번호가 설정되지 않으면 계정은 즉시 잠깁니다.

즉각적인 비밀번호 변경 적용

네트워크 사용자가 다음에 로그인할 때 비밀번호를 변경하도록 강제할 수도 있습니다. -e(만료) 옵션을 사용합니다.

sudo passwd -e mary

비밀번호 만료 정보가 변경되었음을 알려줍니다.

-S 옵션으로 확인하면 마지막 암호 변경 날짜가 1970년 1월 1일로 설정되고, 다음 로그인 시 비밀번호 변경을 요구합니다.

sudo passwd -S mary

사용자는 새 암호를 입력하기 전에 현재 암호를 제공해야 합니다.

비밀번호 변경 강제해야 할까?

이전에는 정기적인 비밀번호 변경이 일반적인 보안 조치로 여겨졌습니다. 하지만 현재는 정반대의 견해가 우세합니다. 영국의 국가사이버보안센터(NCSC)와 미국의 국립표준기술원(NIST)은 정기적인 비밀번호 갱신을 강제하는 것보다 비밀번호가 유출되었거나 의심될 경우에만 변경을 권장합니다.

정기적인 비밀번호 변경 강제는 오히려 사용자들이 단조롭고 약한 비밀번호를 재사용하거나, 너무 자주 변경해야 해서 기록해 두는 습관을 유발할 수 있습니다.

NCSC와 NIST는 다음 보안 지침을 권장합니다.

  • 비밀번호 관리자 사용: 온라인 및 로컬 계정 모두에 적용.
  • 이중 인증 활성화: 가능한 모든 곳에서 사용.
  • 강력한 암호 사용: 구두점이나 기호로 구분된 세 개 이상의 단어 조합을 추천.
  • 비밀번호 재사용 금지: 다른 계정에서 사용하는 비밀번호를 재사용하지 않고, Have I Been Pwned?에 나열된 비밀번호는 절대 사용하지 않음.

위의 지침을 통해 계정을 안전하게 보호할 수 있습니다. 강력하고 안전한 비밀번호는 유출되거나 의심되는 경우에만 변경해야 합니다.

때로는 이러한 결정이 개인의 통제 범위를 벗어나 회사 정책에 따라야 할 수 있습니다.

chage 명령어

chage 명령어를 사용하여 비밀번호 에이징에 관한 설정을 변경할 수 있습니다. passwd 명령어에서 비밀번호 생성 요소를 제거한 것과 유사합니다. -l (목록) 옵션을 사용하면 passwd -S와 동일한 정보를 좀 더 친숙한 방식으로 보여줍니다.

sudo chage -l eric

-E (만료) 옵션을 사용하여 계정 만료 날짜를 설정할 수 있습니다. 예를 들어, 다음 명령어는 “eric” 계정의 만료 날짜를 2020년 11월 30일로 설정합니다. 해당 날짜에 계정이 잠깁니다.

sudo chage eric -E 2020-11-30

변경 사항을 확인하기 위해 다음 명령어를 입력합니다.

sudo chage -l eric

계정 만료 날짜가 “없음”에서 2020년 11월 30일로 변경되었습니다.

비밀번호 만료 기간을 설정하려면 -M (최대 일수) 옵션을 사용합니다. 다음 명령어를 입력하면 “mary” 계정의 비밀번호 만료 기간을 45일로 설정합니다.

sudo chage -M 45 mary

변경 사항을 확인하려면 -l (목록) 옵션을 사용하여 다음 명령어를 입력합니다.

sudo chage -l mary

비밀번호 만료 날짜는 설정한 날짜로부터 45일 후인 2020년 12월 8일로 변경됩니다.

네트워크 전체 사용자 암호 변경

계정을 생성할 때 비밀번호에 대한 기본값이 사용됩니다. 이러한 기본값(최소, 최대, 경고 일수)은 `/etc/login.defs` 파일에 저장됩니다.

다음 명령어를 사용하여 해당 파일을 gedit 편집기에서 열 수 있습니다.

sudo gedit /etc/login.defs

스크롤하여 비밀번호 에이징 관련 설정을 찾습니다.

필요에 따라 편집하고 변경 사항을 저장한 후 편집기를 닫습니다. 다음에 사용자 계정을 만들 때 이러한 기본값이 적용됩니다.

기존 사용자 계정의 모든 비밀번호 만료 날짜를 변경하려면 스크립트를 사용할 수 있습니다. 다음 명령어를 입력하여 gedit 편집기를 열고 `password-date.sh` 파일을 만듭니다.

sudo gedit password-date.sh

다음 텍스트를 편집기에 복사하고 저장한 후 편집기를 닫습니다.

#!/bin/bash
reset_days=28

for username in $(ls /home)
do
  sudo chage $username -M $reset_days
  echo $username password expiry changed to $reset_days
done

이 스크립트는 각 사용자 계정의 최대 일수를 28일로 변경합니다. `reset_days` 변수를 적절하게 조정할 수 있습니다.

먼저 스크립트를 실행 가능하게 만듭니다.

chmod +x password-date.sh

다음 명령어를 입력하여 스크립트를 실행합니다.

sudo ./password-date.sh

각 계정이 다음과 같이 처리됩니다.

“mary” 계정을 확인하려면 다음 명령어를 입력합니다.

sudo chage -l mary

최대 일수가 28일로 설정되었고, 2020년 11월 21일이 만료일이 됩니다. 스크립트를 쉽게 수정하고 더 많은 chage 또는 passwd 명령어를 추가할 수도 있습니다.

비밀번호 관리는 매우 중요합니다. 이 가이드를 통해 필요한 도구를 확보하셨기를 바랍니다.