
Ansible 2.9.27 및 Python 2.7.5가 설치된 RHEL 7.9 환경에서 알고 싶습니다.
- 로컬 루트 계정의 비밀번호는 며칠(일)입니까?
- 마지막 비밀번호 변경 후 며칠이 지났나요?
여기에서 다음을 통해 마지막 비밀번호 변경 날짜를 확인할 수 있습니다.
sudo chage -l root
Last password change : Jan 01, 1970
...
- Ansible에서 마지막 변경 날짜와 오늘 간의 차이를 계산하는 방법은 무엇입니까?
답변1
RHEL에는 사용 가능한 것이 하나 있으므로 getent
거기에서 비밀번호 사용 기간 데이터를 얻을 수 있습니다. 세 번째 필드는 1970년 이후의 일수입니다. 오늘의 일수는 에포크 이후의 현재 시간(초)을 86400으로 나누고 잘라내면 알 수 있습니다. (글쎄, 아마도 시간대 오프셋을 주거나 뺄 수도 있습니다. 그림자 도구가 기반인지 확실하지 않습니다.현지의시간대 또는 UTC 기준입니다. )
# user=ilkkachu
# age=$(( $(date +%s) / 86400 - $(getent -- shadow "$user" |cut -d: -f3) ))
# printf "age of user %s's password is %d days\n" "$user" "$age"
age of user ilkkachu's password is 1444 days
getent
그러나 필요한 정보를 얻으 려면 루트 권한이 필요할 수도 있습니다 . (이는 의 데이터에 해당되지만 /etc/shadow
데이터가 예를 들어 LDAP에 있는 경우 구성에 따라 달라질 수 있습니다.)
물론 누군가가 getent
루트로 실행하도록 허용하면(예: sudo를 통해) 필요하지 않은 비밀번호 해시를 볼 수 있으며, 이는 단지 chage -l
알 수 있는 것이 아닙니다. 이런 일이 발생하는 것을 방지하거나 최소한 더 어렵게 만들려면 getent | cut
스크립트 파이프라인을 실행하고 실행만 허용하는 스크립트를 생성할 수 있습니다.저것.
답변2
약간의 조사 끝에 두 가지의 차이점을 발견했습니다.현재 시간(초)그리고날짜 이후 초아래 그림과 같이 뺄 수 있습니다. 그런 다음 초를 일로 나누고 변환하세요.
- name: Gather root password age in days
shell:
cmd: echo $(( ($(date +%s) - $(date +%s -d "$(chage -l root | head -1 | cut -d ':' -f 2)")) / 86400 ))
check_mode: false
changed_when: false
failed_when: false
register: result
- name: Show result
debug:
msg: "{{ result.stdout | int }}"
감사해요
추가 단계
LDAP의 비로컬 계정이 관련된 경우 추가 작업이 필요합니다.