Предупредите об истечении пароля, не вызывая изменение

Я предполагаю, что "две новых строки" означают \n\n а не две пустых строки после строки с [FACT] (который был бы тремя новыми строками). Так или иначе sed будет работать, поскольку он разделяет только первую новую строку после [FACT].

$ echo -e '[FACT]\n\nend'
[FACT]

end

Это будет искать строки, заканчивающиеся в [FACT] и для каждой строки, которая соответствует, мы используем N добавлять следующую строку в текущее пространство шаблона, сохраняющее новую строку, которую sed обычно разделяет из пространства шаблона.

$ echo -e '[FACT]\n\nend' |sed '/\[FACT\]$/ { N; s/\n// }'
[FACT]
end

Если [FACT] не должен конкретно быть в конце строки, удалить $ от команды.

Обратите внимание на то, что это технически разделяет новую строку от конца строки, которая содержит [FACT] таким образом, это технически связывает две строки в одну:

$ echo -e '[FACT]\nhelp\nend' 
[FACT]
help
end

$ echo -e '[FACT]\nhelp\nend' |sed '/\[FACT\]$/ { N; s/\n// }'
[FACT]help
end
3
11.04.2016, 11:49
2 ответа

Если вы не против использования пользовательского сценария, попробуйте это как PAM_EXEC Сценарий:

#! /bin/bash
LAST_DATE=$(date -d "$(chage -l $PAM_USER  | awk -F: '/Last password/{print $2}')" '+%s')
TODAY=$(date '+%s')
MAX_AGE=60
if (( (($TODAY - $LAST_DATE) / 86400) > $MAX_AGE ))
then
    echo "Please change your password!"
fi

Спаси его где-то (скажем, /usr/local/bin/pass-warn.sh ), и добавьте строку на /etc/pam.d/sshd :

session optional pam_exec.so stdout /usr/local/bin/pass-warn.sh
0
27.01.2020, 21:42

Если вы устанавливаете пароль старения вообще, то PAM_UNIX.SO собирается запретить их аутентификацию после истечения срока действия пароля. Чтобы сделать то, что вы хотите, вы, вероятно, можете добавить что-то в свои сценарии входа. Например, я могу добавить следующее в /etc/profile.d :

#!/bin/bash
maxDays=30
dayLastChanged=$(passwd -S $(whoami) | awk '{print $3}')

currentTimestamp=$(date "+%s")
lastChangeTimestamp=$(date -d $dayLastChanged "+%s")

timestampDifference=$(( $currentTimestamp - $lastChangeTimestamp ))
maxSeconds=$(( $maxDays * 86400 ))

if [[ $timestampDifference -gt $maxSeconds ]]; then    
   echo "Yo, you need to change your password bud. Otherwise the guys with white-on-white ties are coming for you."    
fi
0
27.01.2020, 21:42

Теги

Похожие вопросы