리눅스 LDAP 계정 패스워드 변경 날짜 확인 방법

LDAP 패스워드 변경 날짜 확인하기 - Infracody LDAP 서버에서 사용자의 패스워드 변경 날짜를 확인하는 방법을 알아보세요. shadowLastChange 속성을 이용하여 패스워드 변경 시간을 조회하고, 날짜 형식을 변환하는 방법을 소개합니다.
인프라코디
리눅스 LDAP 계정 패스워드 변경 날짜 확인 방법

리눅스에서 배시 쉘 스크립트를 사용하여 LDAP 계정들의 패스워드 변경 날짜을 확인하는 방법에 대해 알아보겠습니다.

LDAP 계정의 패스워드 변경 이력을 확인하기 위해 찾아보다가 배시 쉘 스크립트를 사용하여 간편하게 전체 LDAP 계정의 패스워드 변경 날짜을 확인할 수 있는 스크립트를 작성하여 쉽게 사용할 수 있습니다.

환경 정보

  • 운영 체제 : Rocky Linux 9.2
  • 실행 계정 : root
  • SSH 접속 및 외부 인터넷이 가능한 네트워크 구성

LDAP 계정 패스워드 변경 날짜 확인 스크립트

#!/bin/sh

# LDAP 계정 목록을 가져옵니다.
# ldapsearch 명령어를 사용하여 LDAP 서버에서 정보를 검색합니다.
# -x 옵션은 단순 인증을 사용합니다.
# -LLL 옵션은 LDIF 형식의 출력을 생성합니다.
# -b 옵션은 검색 베이스 DN을 지정합니다.
# -D 옵션은 바인딩 DN을 지정합니다.
# -w 옵션은 바인딩 비밀번호를 지정합니다.
# "(objectclass=*)"는 모든 객체 클래스에 대해 검색합니다.
# shadowLastChange와 uid 속성을 검색합니다.
ldap_account_list=$(ldapsearch -x -LLL -b "dc=example,dc=com" -D "cn=admin,dc=example,dc=com" -w password "(objectclass=*)" shadowLastChange uid | grep uid | awk '{print $2}' | grep -v uid)

# 계정 목록을 배열로 변환합니다.
mapfile -t lines <<< ${ldap_account_list}

# 각 계정에 대해 패스워드 변경 날짜를 계산합니다.
for line in "${lines[@]}"; do
    if [ -n "$line" ]; then
    	# 오늘 날짜를 계산합니다. (1970년 1월 1일 이후 일 수)
        today=$(($(date +'%s') / 86400))
        # LDAP 서버에서 shadowLastChange 속성을 검색합니다.
        shadow_last_change=$(ldapsearch -x -LLL -H ldap://192.168.100.100 "uid=${line}" shadowLastChange | awk 'NR==2{print $2}')
        # 패스워드 변경 일 수를 계산합니다.
        shdw_diff=$((today - shadow_last_change))
        # 계정 이름, 패스워드 변경 날짜, 변경 일 수를 출력합니다.
        echo -e "Account : $line\t\tPassword change date : $(date "--date=$dt -d -${shdw_diff}day" +%Y-%m-%d)\tDays ago : $shdw_diff"
    fi
done
ldap_passwd_change_check.sh 파일 생성
ldap_passwd_change_check.sh 파일 생성

위 배시 쉘 스크립트의 내용 중 변경이 필요한 부분은 다음과 같습니다.

  • -b dc=example,dc=com 구문을 사용하고 있는 도메인으로 변경합니다.
  • -d cn=admin,dc=example,dc=com 구문을 관리자 계정명과 도메인으로 변경합니다.
  • -w password 구문을 관리자 패스워드로 변경합니다.
  • ldap://192.168.100.100구문을 LDAP 서버의 URL이나 IP로 변경합니다.

LDAP 계정 패스워드 변경 날짜 확인 스크립트 파일 생성하기

ldap_passwd_change_check.sh 스크립트 파일을 생성하여, 실행 결과를 확인해봅니다.

vi /usr/local/sbin/ldap_passwd_change_check.sh

vi /usr/local/sbin/ldap_passwd_change_check.sh 명령을 실행하여 파일을 열고, 수정한 LDAP 계정 패스워드 변경 날짜 확인 스크립트를 저장합니다.

#!/bin/sh

# LDAP 계정 목록을 가져옵니다.
# ldapsearch 명령어를 사용하여 LDAP 서버에서 정보를 검색합니다.
# -x 옵션은 단순 인증을 사용합니다.
# -LLL 옵션은 LDIF 형식의 출력을 생성합니다.
# -b 옵션은 검색 베이스 DN을 지정합니다.
# -D 옵션은 바인딩 DN을 지정합니다.
# -w 옵션은 바인딩 비밀번호를 지정합니다.
# "(objectclass=*)"는 모든 객체 클래스에 대해 검색합니다.
# shadowLastChange와 uid 속성을 검색합니다.
ldap_account_list=$(ldapsearch -x -LLL -b "dc=in,dc=infracody,dc=com" -D "cn=admin,dc=infracody,dc=com" -w infracody "(objectclass=*)" shadowLastChange uid | grep uid | awk '{print $2}' | grep -v uid)

# 계정 목록을 배열로 변환합니다.
mapfile -t lines <<< ${ldap_account_list}

# 각 계정에 대해 패스워드 변경 날짜를 계산합니다.
for line in "${lines[@]}"; do
    if [ -n "$line" ]; then
    	# 오늘 날짜를 계산합니다. (1970년 1월 1일 이후 일 수)
        today=$(($(date +'%s') / 86400))
        # LDAP 서버에서 shadowLastChange 속성을 검색합니다.
        shadow_last_change=$(ldapsearch -x -LLL -H ldap://ldapvip.in.infracody.com "uid=${line}" shadowLastChange | awk 'NR==2{print $2}')
        # 패스워드 변경 일 수를 계산합니다.
        shdw_diff=$((today - shadow_last_change))
        # 계정 이름, 패스워드 변경 날짜, 변경 일 수를 출력합니다.
        echo -e "Account : $line\t\tPassword change date : $(date "--date=$dt -d -${shdw_diff}day" +%Y-%m-%d)\tDays ago : $shdw_diff"
    fi
done

LDAP 계정 패스워드 변경 날짜 확인 스크립트 실행하기

/usr/local/sbin/ldap_passwd_change_check.sh 파일을 실행하여 정상적으로 LDAP 계정 목록과 변경 날짜, 그리고 몇 일 전에 변경했는지 확인 할 수 있습니다.

sh /usr/local/sbin/ldap_passwd_change_check.sh
ldap_passwd_change_check.sh 파일 실행 결과
test

실행 권한을 추가하여 파일명으로도 실행할 수 있습니다.

chmod +x /usr/local/sbin/ldap_passwd_change_check.sh
/usr/local/sbin/ldap_passwd_change_check.sh

마무리

리눅스에서 LDAP 계정 패스워드 변경 날짜을 확인할 수 있는 배시 쉘 스크립트를 작성하여, 간편하게 LDAP 사용자들의 패스워드 변경 이력 관리를 할 수 있습니다.

인프라코디
서버, 네트워크, 보안 등 IT 인프라 관리를 하는 시스템 엔지니어로 일하고 있으며, IT 기술 정보 및 일상 정보를 기록하는 블로그를 운영하고 있습니다. 글을 복사하거나 공유 시 게시하신 글에 출처를 남겨주세요.

- 블로그 : www.infracody.com

이 글이 유익했나요? 댓글로 소중한 의견을 남겨주시거나 커피 한 잔의 선물은 큰 힘이 됩니다.
댓글