Używam polecenia grep do analizy pliku haseł.
Kiedy używam
grep -w "avahi" /etc/passwd
Dostaję dwie odpowiedzi
avahi
i avahi-autoipd
Nie znalazłem metody, która dałaby mi unikalną odpowiedź.
To polecenie jest częścią większego skryptu, w którym nazwa (avahi
) jest w rzeczywistości zmienną.
To działa, gdy imię jest rpc
i rpcuser
. Zgaduję, że ma to coś wspólnego z kreską (-
) w imieniu.
Rzeczywisty kod:
#!/bin/ksh
getent shadow |cut -d: -f1-2|grep ":!!"| cut -d: -f1 > /tmp/pasck
while read line
do
NOLOGIN=`grep -w $line /etc/passwd | cut -d -f7|cut -d/ -f3`
if [[ $NOLOGIN != "nologin: && $NOLOGIN != "false" ]] ; then
echo "$line" "$NOLOGIN" >> /tmp/pasck.list
fi
done <?tmp/pasck
Skrypt próbuje przejść przez plik shadow i szukać użytkowników bez haseł. Następnie porównuję wyniki z plikiem passwd, aby ustalić, które z tych kont są ustawione /bin/false
lub /sbin/nologin
. Pozostała część będzie rzeczywistymi użytkownikami bez ustawionego hasła, ale dozwolonego w systemie.
Odpowiedzi:
4 dla odpowiedzi № 1Utrzymywanie rzeczy prostych - możesz dodać dwukropek, który pojawia się po nazwie użytkownika grep
komunikat:
$ grep "^avahi:" /etc/passwd
0 dla odpowiedzi nr 2
Możesz użyć awk i jawnie przetestuj pierwsze pole oddzielone dwukropkiem:
awk -F: "$1 = "avahi"" /etc/passwd