2016-10-22 1 views
1

Travailler sur un script qui désactive les comptes inactifs depuis 90 jours. Impossible de trouver vraiment une réponse après avoir étudié mon problème pendant quelques jours, mais j'ai trouvé cette commande sur un forum:Comment désactiver les comptes inactifs depuis 90 jours sous Linux?

lastlog -t 10000 > temp1; lastlog -t 90 > temp2; diff temp1 temp2; rm temp1; rm temp2 

Cette commande envoie les utilisateurs qui ont été inactifs pendant 90 jours. Je pense que la solution à mon problème serait de:

  1. filtre la sortie de cette commande alors que les noms d'utilisateur sont affichés (dans une liste, avec 1 nom d'utilisateur par ligne).

  2. Prenez cette sortie et écrivez-la dans un fichier texte. Exécuter une boucle for qui pour chaque ligne dans le fichier, le contenu de la ligne (qui devrait être un seul nom d'utilisateur) sont stockés dans une variable appelée "inactiveUser". Ensuite, la commande usermod -L $ inactiveUser sera exécutée.

La solution proposée fonctionnerait-elle? Si oui, comment cela pourrait-il être réalisé? Existe-t-il une méthode beaucoup plus facile pour verrouiller les comptes inactifs dont je ne suis pas au courant?

Répondre

1

vous pouvez simplifier avec:

lastlog -b 90 

qui énumère directement les utilisateurs qui ne sont pas connectés au cours des 90 derniers jours.

Cependant, il possède également une ligne d'en-tête et répertorie de nombreux utilisateurs du système.

utilisation tail pour passer la ligne d'en-tête:

lastlog -b 90 | tail -n+2 

vous pouvez ensuite utiliser grep pour filtrer les utilisateurs du système:

lastlog -b 90 | tail -n+2 | grep -v 'Never log' 

mais peut-être il y a un moyen plus sûr de trouver le vrai, non les utilisateurs du système, par exemple:

cd /home; find * -maxdepth 0 -type d 

cette question de côté, vous pouvez obtenir juste le les noms d'utilisateur avec awk sur:

lastlog -b 90 | tail -n+2 | grep -v 'Never log' | awk '{print $1}' 

alors soit sortie de la liste à un fichier, ou bien exécuter directement usermod par boucle while read ou xargs:

lastlog -b 90 | tail -n+2 | grep -v 'Never log' | awk '{print $1}' | 
    xargs -I{} usermod -L {} 

peut-être vous devriez également vous connecter ce que vous avez fait:

lastlog -b 90 | tail -n+2 | grep -v 'Never log' | awk '{print $1}' | 
    tee -a ~/usermod-L.log | xargs -I{} usermod -L {} 
+1

Cela fonctionne très bien! Redirigé la sortie dans un fichier texte et a couru une boucle while pour désactiver tous les utilisateurs. Merci! – Gabbo

+0

vous êtes les bienvenus :) – webb

0

Alors que l'autre réponse fonctionne, il peut être beaucoup plus propre à l'aide awk au lieu de tail | grep | awk

lastlog -b 90 | awk '!/Never log/ {if (NR > 1) print $1}' | xargs -I{} usermod -L {} 

Les lignes pour la commande awk contrôlées après qui ne connaissent pas l'expression « Ne jamais se connecter » en elle (!/Never log/).

NR > 1 émule tail -n +2.

print $1 imprime la première colonne.