분명히 다음 명령을 사용하여 Samba 사용자가 비밀번호를 변경해야 하는지 확인할 수 있습니다.
pdbedit -v -u userid | grep "Password must change"
또한 다음을 사용하여 모든 Samba 사용자를 나열할 수 있다는 것을 알았습니다.
pdbedit -L -v
다음 형식으로 약 10MB의 데이터를 출력합니다.
---------------
Unix username: egbjt005$
NT username: egbjt005$
...
Password must change: Thu, 16 Aug 2012 07:33:58 NZST
...
---------------
Unix username: eghwj001$
NT username: eghwj001$
...
Password must change: Fri, 20 Jul 2012 14:42:46 NZST
...
... 흥미롭지 않은 데이터의 몇 행을 나타냅니다. 비밀번호가 만료되었고 변경되지 않은 경우 이 날짜는 과거가 됩니다.
내가 정말로 원하는 것은 비밀번호 변경이 필요한 특정 2자 접두사(예를 들어 "eg"를 사용)로 시작하는 사용자 ID 목록입니다. 어떻게 해야 하나요?
답변1
pdbedit
온라인에서 찾은 몇 가지 출력 예제를 살펴보겠습니다 . 귀하의 코드는 다를 수 있습니다. 인쇄된 내용의 몇 가지 예를 제공할 수 있다면 이 코드가 귀하의 요구에 더 적합할 수 있습니다.
먼저, 접두사와 일치하는 사용자 이름을 찾아야 합니다. 다음을 사용할 수 있도록 출력 형식이 pdbedit
지정된 것 같습니다 .username: foo
awk
pdbedit -L -v | awk '/username:/ {print $2}'
그런 다음 접두사로 시작하는 이름을 찾아야 하므로 grep을 사용해 보겠습니다.
pdbedit -L -v | awk '/username:/ {print $2}' | grep ^eg
특정 사용자의 비밀번호를 변경해야 하는지 확인하려면 grep
반환 코드를 확인하여 문자열이 있는지 확인할 수 있습니다.
if pdbedit -v -u $name | grep -q "Password must change" ; then
echo $name
fi
각 이름을 확인하는 루프로 모든 것을 하나로 묶습니다.
for name in $(pdbedit -L -v | awk '/username:/ {print $2}' | grep ^eg); do
if pdbedit -v -u $name | grep -q "Password must change" ; then
echo $name
fi
done
예제 출력 게시 후 업데이트
이 형식은 일반 Unix 명령줄 텍스트 처리 도구를 좋아하는 사람들이 설계한 것이 아닙니다! 물론 어떤 언어로든 무엇이든 할 수 있지만 저는 아마도 이 언어를 구문 분석하기 위해 Python이나 Perl과 같은 언어를 사용할 것입니다. Python이 날짜와 시간을 제대로 처리하지 못하기 때문에 여기서는 Perl을 선택했습니다.
#!/usr/bin/perl
use Date::Parse;
$now = time();
while (<>) {
if (/Unix username:\s*(.*)/) {
$username = $1;
}
if (/Password must change:\s*(.*)/) {
$change = str2time($1);
if ($change <= $now) {
print "$username\n";
}
}
}
이는 비밀번호가 만료된 모든 사용자의 Unix 사용자 이름을 인쇄합니다. 다음과 같이 사용하세요:
pdbedit -L -v | perl parse.pl
질문 작성자가 편집함
내가 사용한 코드는 다음과 같습니다.
#!/usr/bin/perl
use Date::Parse;
$now = time();
while (<>) {
if (/Unix username:\s*(.*)/) {
$username = $1;
}
if (/Password must change:\s*(.*)/) {
$expiry = $1;
$change = str2time($expiry);
if ($expiry !~ /^never/ && $change <= $now && $username =~ /^eg[a-z]{3}\d+/) {
print "$username expiry: $expiry\n";
}
}
}
다음 출력을 생성합니다.
egdfd001 expiry: Mon, 30 Jul 2012 08:12:02 NZST
egjpf001 expiry: Mon, 13 Aug 2012 07:50:03 NZST