Je souhaite modifier les paramètres d'historique de tous les utilisateurs des systèmes que je gère. Je voudrais qu'il contienne les informations du terminal de connexion comme dewho
sysadmin:/ # who
sysadmin pts/0 Mar 26 07:11 (sysadmin.doofus.local)
Je modifie actuellement mon historique des manières suivantes. Je sais que bon nombre de ces paramètres ont été abordés ici plusieurs fois. Cependant, j'ai tiré ce code de " Linux System Administration Recipes by: Juliet Kemp " il y a longtemps.
shopt -s histappend
PROMPT_COMMAND='history -n;history -a'
HISTSIZE=100000
HISTFILESIZE=100000
HISTTIMEFORMAT="%m/%d/%y %T "
shopt -s histappend
résout le problème lorsque vous avez plusieurs terminaux, des informations ouvertes peuvent être perdues.
PROMPT_COMMAND='history -n;history -a'
s'étend pour donner un ajout en temps réel à l'historique sur plusieurs terminaux.
HISTSIZE=100000
HISTFILESIZE=100000
augmente la quantité de history
rétention
HISTTIMEFORMAT="%m/%d/%y %T
"fait précéder chaque ligne de l'histoire d'un horodatage
Ce que vous obtenez généralement history
835 ls
836 cd ..
Mes history
résultats actuels modifiés
5853 03/26/12 07:16:49 ls
5854 03/26/12 07:16:50 ll
Le retour de history
je voudrais voir
5853 03/26/12 07:16:49 sysadmin.doofus.local ls
5854 03/26/12 07:16:50 sysadmin.doofus.local ll
001 03/26/12 05:11:29 demo_user.doofus.local cd
002 03/26/12 05:11:30 demo_user.doofus.local ll
Je ne suis pas "marié" à voir le DNS
nom. Je ne le voudrais là que s'il le tire de who
ou d'un autre emplacement sans avoir besoin d'effectuer une recherche ou une requête de quelque nature que ce soit. Je serais content de l'adresse IP.
002 03/26/12 05:11:30 192.168.0.2 ll
Pourquoi? Je gère plusieurs systèmes où un ID utilisateur que plusieurs utilisateurs d'un même groupe partagent pour effectuer leurs tâches quotidiennes. Cela me permettrait de corréler leur emplacement réel et leur utilisateur réel au sein de l'organisation avec ce qu'ils ont fait dans l'histoire.
Je suis conscient que ce n'est pas optimal et je voudrais le changer mais, lorsque vous êtes sur un navire de la taille d'un paquebot de croisière, vous n'essayez pas de faire des virages en épingle à cheveux. (Remarque: lorsque vous faites cela, les passagers essaient de vous jeter par-dessus bord)
Quoi qu'il en soit, jusqu'à ce que je puisse les migrer vers une meilleure solution, j'aimerais avoir cette capacité de suivi.
De plus, si vous avez des recommandations sur ce que j'utilise actuellement pour mes history
modifications, j'aimerais l'entendre.
Merci,
Modifier: 1
Je ne veux pas exécuter d'autres programmes ou avoir à configurer quoi que ce soit supplémentaire "dans des limites raisonnables".
Je veux ajouter des 0
frais généraux, si je dois ajouter, il doit être petit.
Je fais confiance à mes utilisateurs, je voudrais juste (si quelque chose devait arriver) voir lequel des 10 utilisateurs qui se sont connectés au système avec le même utilisateur: mot de passe l'a fait. Ou bien, il pourrait ne pas s'agir d'un utilisateur, il aurait pu être oublié cron
sur un système qui effectue une connexion en tant qu'utilisateur pour faire quelque chose. Ou une application Ex: BMC Control-M
qui se connecte ssh
et exécute des tâches. Il ne s'agit pas tant de trouver de «mauvais utilisateurs» que de pouvoir le retrouver avec un minimum d'effort.
Modifier 2:
Les systèmes exécutent SLES et RHEL
/proc
/dev
et les/home
répertoires d' utilisateurs . Cela ajoute des frais généraux. Alors quehistory
sont déjà en cours d'enregistrement et que leurs informations de connexion sont connues du système connectant IP, etc. Ces informations, si elles ne sont pas déjà disponibles "statiquement", pourraient être définies de cette façon ou stockées dans une variable ou un fichier et entrées dans leshistory
enregistrements et le résultat. serait très petit ou 0.auditd
. Je ne sais pas si ses journaux vous donneront suffisamment d'informations. La difficulté de ce que vous voulez est précisément pourquoi les comptes partagés sont si décriés.auditd
c'est un peu comme siinotify
vous deviez lui dire quoi surveiller pour les changements. Fichiers individuels, répertoires, etc. Je ne veux pas aller à ce niveau de configuration. En fait (je le fais), mais je m'en fiche pas mal. Je doispuppet
gérer ce genre de choses.auditd
est livré avec la charge supplémentaire et le temps de configuration également. Si un compte modifie quelque chose, je voudrais quand même regarder en arrière dans l'historique et voir qui ou quoi se connecte et essaie.PROMPT_COMMAND=
exécute simplement des commandes normales avant l'invite suivante, ne pourriez-vous pas écrire une fonction appelant sed / awk qui fonctionne sur la dernière ligne du fichier d'historique pour ajouter les informations. puis appeler cette fonctionPROMPT_COMMAND=
pour ajouter les données? il serait hackish mais devrait faire l'affaire.Réponses:
D'après la suggestion de llua, nous pouvons travailler un peu plus avec l'histoire. Ajoutez une ligne au fichier BASH RC à l'échelle du système, peut-être /etc/bash.bashrc.
Configurez la journalisation pour "local6" dans votre enregistreur système. Peut-être quelque chose comme ça:
Redémarrez l'enregistreur système. Peut-être configurer la rotation du fichier journal. Se déconnecter; s'identifier; et l'historique est maintenant écrit dans /var/log/commands.log dans un format comme celui-ci:
date heure enregistreur de nom d'hôte: nom d'utilisateur [audit_pid]: commande [return_val]
Cela pourrait être modifié davantage au goût.
la source
Les paragraphes suivants décrivent l'idée en général et sont dépassés à certains égards, mais vous pouvez utiliser puis utiliser la dernière de cette page. Permet d'utiliser un gros fichier ~ / .bash_history.archive (distinct de HISTFILE = ~ / .bash_history). Et puis, à la sortie de chaque session bash, nous pouvons y ajouter de nouvelles lignes d'historique.
Le premier problème avec cette approche était: comment faire bash pour appeler ce script à chaque sortie? Bien sûr, si vous le quittez en tapant 'exit', vous pouvez alias la fonction 'exit' mais j'utilise le raccourci Ctrl-D pour cela et je ne pouvais pas trouver un moyen de le réaffecter à quelque chose mais pas à la fonction de sortie intégrée.
Donc, la première tentative a été: d'interdire Ctrl-D par
export IGNOREEOF=10
et définissez la combinaison double Ctrl-X pour appeler la fonction de sortie.
Mais la bonne approche consiste à utiliser exit tramp de bash, ce qui est une solution parfaite car il est appelé quelle que soit la façon dont vous quittez bash: Ctrl-D, exit, fermez la fenêtre xterm.
trap 'archive_history' EXIT
L'étape suivante consiste à définir une ligne de départ dans notre bash_history afin que nous puissions enregistrer uniquement les nouvelles lignes et nous assurer que nous les ajoutons à un fichier d'historique.
C'est tout ce dont nous avons besoin au début de la bash - maintenant nous savons à partir de quelle ligne d'historique l'histoire (fraîche) commence. Pour sauvegarder l'historique, ajoutez le morceau suivant à votre ~ / .bashrc.
Le fichier ~ / .inputrc doit contenir les lignes suivantes pour redéfinir le raccourci de sortie en Ctrl-x x. Du premier coup, vous pourriez penser que c'est un raccourci terrible, mais ensuite vous vous y habituez - croyez-moi.
De plus, si votre session bash est une session de connexion et que vous quittez en appelant '
logout
', vous pouvez ajouter la ligne suivante à votre~/.bash_logout
Une fois toutes les actions mentionnées terminées, vous pouvez trouver votre
~/.bash_history.archive
fichier contenant des sections comme celles-ci.qui en général peut être lu comme fichier historique habituel si vous le souhaitez.
la source