리눅스를 운영하다 보면 파일 권한만큼 자주 놓치는 것이 계정 정책입니다.
새 사용자를 만들 때마다 비밀번호 만료일이 제각각이고, 로그인 실패 잠금 정책도 서버마다 다르면
관리가 금방 헷갈립니다.
특히 여러 명이 함께 쓰는 서버나 장기간 운영하는 장비에서는 기본값을 한 번 정리해 두는 편이 훨씬 안전합니다.
이번 글은 퍼미션 설명을 반복하지 않고, 계정·암호 정책의 기본값을 통일하는 실무 루틴에 집중합니다.
목표는 세 가지입니다.
- 새로 만드는 계정에 일관된 비밀번호 만료 정책 적용하기
- 로그인 실패 시 잠금 정책을 정해 무차별 대입 시도 줄이기
- 운영 중인 계정의 상태를 빠르게 점검하는 기준 만들기
왜 계정 정책부터 정리해야 할까
권한 설정이 잘 되어 있어도 계정 정책이 느슨하면 보안 구멍이 생기기 쉽습니다.
예를 들어 오래된 계정이 계속 살아 있거나, 비밀번호를 몇 년째 바꾸지 않는 계정이 남아 있으면
침해 사고 때 피해 범위가 커집니다.
반대로 정책이 너무 빡빡하면 정상 사용자까지 자주 잠겨 운영 불편이 생깁니다.
그래서 중요한 건 "강하게"보다 일관되게입니다. 어떤 서버에 접속하든 비슷한 기준으로 계정 수명과
잠금 동작을 이해할 수 있어야 운영이 편해집니다.
먼저 확인할 3가지 파일
리눅스 배포판마다 세부 차이는 있지만, 기본적으로 아래 파일을 먼저 봅니다.
- /etc/login.defs : 새 계정 생성 시 기본 비밀번호 정책
- /etc/shadow : 각 계정의 실제 비밀번호 만료 정보
- /etc/pam.d/ 아래 설정 : 로그인 실패 잠금 정책과 인증 동작
> 점검 명령 > >
``bash > grep -E 'PASSMAXDAYS|PASSMINDAYS|PASSWARNAGE' /etc/login.defs > sudo chage -l username > sudo grep -R "pamfaillock\|pamtally2" /etc/pam.d > ``
이 세 군데만 봐도 이 서버가 계정 관리를 어떤 방식으로 하고 있는지 감이 잡힙니다.
새 계정 기본 만료 정책 맞추기
/etc/login.defs에는 새 계정을 만들 때 사용할 기본 비밀번호 정책이 들어 있습니다.
예를 들어 90일마다 비밀번호 변경, 최소 사용일 1일, 만료 7일 전 경고 같은 식으로 정리할 수 있습니다.
> 예시 설정 > > ``bash > PASSMAXDAYS 90 > PASSMINDAYS 1 > PASSWARNAGE 7 > ``
이 값은 새로 생성하는 계정에 기본 적용됩니다. 이미 만들어진 계정에는 자동으로 반영되지 않으므로
기존 사용자까지 정리하려면 chage를 함께 써야 합니다.
> 기존 계정에 적용 > > ``bash > sudo chage -M 90 -m 1 -W 7 username > sudo chage -l username > ``
운영 팁 하나를 덧붙이면, 서비스 계정과 사람 계정을 같은 기준으로 묶지 않는 편이 좋습니다.
예를 들어 앱 실행용 서비스 계정은 로그인 셸 자체를 막고, 사람 계정에만 만료 정책을 적용하는 식으로 나누는 편이 현실적입니다.
로그인 실패 잠금 정책은 PAM 기준으로 확인하기
최근 배포판은 pam_faillock을 많이 씁니다. 일정 횟수 이상 로그인에 실패하면 잠시 잠그는 방식인데,
SSH나 콘솔 로그인에 모두 영향을 줄 수 있으니 적용 전 확인이 필요합니다.
> 예시 개념 > > - 5회 실패 시 잠금 > - 10분 뒤 자동 해제 > - root 계정은 별도 정책 검토
설정 위치는 배포판마다 다르지만 보통 /etc/pam.d/system-auth, /etc/pam.d/password-auth, /etc/security/faillock.conf 중 일부를 사용합니다.
> 상태 확인 예시 > > ``bash > sudo faillock > sudo faillock --user username > sudo faillock --user username --reset > ``
실무에서는 잠금 횟수를 너무 낮게 잡으면 사용자가 비밀번호를 한두 번만 틀려도 업무가 끊깁니다.
반대로 너무 높으면 방어 효과가 약해집니다. 외부 공개 서버라면 보통 SSH 키 로그인과 함께 잠금 정책을
보완적으로 쓰는 편이 안전합니다.
비활성 계정과 오래된 계정은 따로 보자
계정 정책을 점검할 때는 "현재 로그인 가능한가"만 보면 부족합니다.
오랫동안 쓰지 않은 계정, 퇴사자 계정, 쉘은 있는데 실제 사용자가 없는 계정도
함께 정리해야 합니다.
아래 항목을 같이 보면 좋습니다.
- 마지막 로그인 기록
- 비밀번호 만료 여부
- 로그인 셸 존재 여부
- sudo 그룹 포함 여부
> 점검 명령 > > ``bash > lastlog | head > getent passwd | grep -E '/bin/bash|/bin/zsh|/bin/sh' > sudo passwd -S username > id username > ``
이 과정을 주기적으로 해두면 "예전에 잠깐 만든 계정"이 장기간 방치되는 일을 줄일 수 있습니다.
운영 기준은 문서로 남겨야 오래 간다
계정 정책은 설정만큼 기준 문서화가 중요합니다. 예를 들어 아래처럼 간단히 정해 두면 팀 운영이 편해집니다.
- 사람 계정은 90일 만료, 7일 전 경고
- 서비스 계정은 로그인 셸 비활성화
- 관리자 권한은 필요한 계정에만 부여
- 잠금 정책은 실패 5회, 자동 해제 10분
- 월 1회 비활성 계정 점검
이 정도만 적어도 새 서버를 올리거나 다른 관리자가 이어받을 때 기준이 흔들리지 않습니다.
마무리
리눅스 보안 기본기는 결국 화려한 도구보다 계정 정책의 일관성에서 시작합니다.
파일 권한을 잘 맞춰도 계정 만료와 잠금 정책이 제각각이면 운영 위험은 그대로 남습니다.
오늘 서버 한 대만이라도 login.defs, chage, faillock 상태를 점검해 두면 다음 문제를 훨씬 덜 겪게 됩니다.
작게 시작하려면 이것만 기억하면 됩니다. 새 계정 기본값 정리 → 기존 계정 상태 확인 → 잠금 정책 점검.
이 세 단계만 해도 리눅스 계정 보안의 밑바탕이 훨씬 단단해집니다.