Eu tenho uma lista simples de usuários de uma coluna. Vem do comando lastlog. Preciso saber se essas contas estão desativadas e não tenho acesso root. Só consigo visualizar com more e executar o comando lastlog. Preciso ver se os usuários que não fizeram login nos últimos 90 dias ainda estão ativos.
Até agora eu executo
sudo lastlog -b 90
O que me dá os usuários que fizeram login nos últimos 90 dias. Agora eu apenas executo o awk imprimindo o primeiro campo e essa é minha lista de usuários simples. Agora eu gostaria basicamente de ver se em/etc/passwd, o shell deles é/bin/bash e se em/etc/shadow, há um !
em sua linha. Como posso fazer isso. Eu tentei loops for e loops while e não consigo acertar? Qualquer ajuda seria apreciada.
Responder1
Não tenho certeza se entendi você corretamente. É isso que você procura?
lastlog -b 90 | awk '{if (NR > 1) print $1 }' | grep -f - /etc/passwd | grep "/bin/bash$"
Aqui está o detalhamento:
awk '{if (NR > 1) print $1 }'
- imprime a primeira coluna pulando a primeira linha (cabeçalho do lastlog)grep -f - /etc/passwd
- usar a entrada padrão como um arquivo para obter padrões e procurar padrões em/etc/passwd
grep "/bin/bash$"
- grep para /bin/bash ,$
significaEOL
.
Algumas notas:
lastlog -b 90
- isso lhe dá registrosmais velhode 90 dias. Se você quiser que os usuários que fizeram login nos últimos 90 dias usemlastlog -t 90
.- Eu só optei pela
(NR > 1)
solução porque estamos usandoawk
de qualquer maneira. Uma maneira mais sucinta de pular a primeira linha de um arquivo seriased 1d
.
EDITAR
Você pode usar um idioma semelhante se também quiser filtrar os registros de !
/etc/shadow. Então o comando completo seria:
lastlog -b 90 | awk '{if (NR > 1) print $1 }' | grep -f - /etc/passwd | grep "/bin/bash$" | cut -d ':' -f 1 | grep -f - /etc/shadow | grep -v ":\!:"
cut -d':' -f 1
divide a linha usando:
como delimitador e retorna o primeiro campogrep -v
significainverter correspondência(selecione linhas não correspondentes).
Responder2
O ponto de exclamação, como você notou, precisa ser 'escapado' - tente primeiro inseri-lo com uma barra invertida: \! em vez de ! portanto, não é executado como um comando em vez de ser tratado como texto. Em muitos casos, você também pode citá-lo com aspas simples (não duplas), como: '!' - dependendo do comando que você escolher, um deles deve servir para você.