Si je:
[user@notebook ~] sudo echo 123456uu
123456uu
[user@notebook ~]
Ensuite, je peux voir cela dans les journaux:
[root@notebook /var/log] grep 123456uu *
auth.log:Jan 9 17:01:51 notebook sudo: user : TTY=pts/3 ; PWD=/home/user ; USER=root ; COMMAND=/bin/echo 123456uu
[root@notebook /var/log]
mais si je:
[user@notebook ~] sudo su -
[root@notebook ~] echo 1234567zz
1234567zz
[root@notebook ~]
Je ne peux pas le voir dans les journaux:
[root@notebook /var/log] grep 1234567zz *
[root@notebook /var/log] echo $?
1
[root@notebook /var/log]
Ma question: comment activer la connexion pour les commandes dans le "sudo su -"?
OS est un Ubuntu 12.04 mais la question est générale.
MISE À JOUR # 1:
[user@notebook ~] sudo su -
[sudo] password for user:
[root@notebook ~] echo zizizi
zizizi
[root@notebook ~] cd /var/log
[root@notebook /var/log] grep -iIR 'zizizi' *
[root@notebook /var/log] grep 'COMMAND=/bin/su -' *
auth.log:Jan 10 15:42:42 notebook sudo: user : TTY=pts/1 ; PWD=/home/user ; USER=root ; COMMAND=/bin/su -
[root@notebook /var/log]
sudo su -
, elle a également la possibilité de supprimer toutes les entrées de journal que vous pourriez faire de ses actions. Si vous voulez une certitude à 100% dans votre journalisation, vous devez restreindresudo
fortement et interdiresudo su
complètement.Réponses:
Puisque vous êtes sur Ubuntu 12.04, jetez un œil aux capacités de journalisation des E / S activées via les options
log_input
etlog_output
.MISE EN ŒUVRE: Version Sudo au moins: 1.7.4p4 nécessaire.
/etc/sudoers
modifcation: Tout ce que vous devez faire est d'ajouter deux balises à toutes les entrées sudoers requises (où "su" est spécifié, soit avec une commande soit avec un alias). LOG_INPUT et LOG_OUTPUT.Exemple:
Ajoutez la structure de répertoire de journaux par défaut suivante à
sudoers
:la source
Votre
grep
quand fairesudo su -
échoue parce que vous ne courez pasecho 1234567zz
, vous courezsu -
, ce qui lance un shell. Le shell exécute alors votreecho
.Ceci est délibéré, et la journalisation de chaque exécution de commande unique inonderait votre syslog d'informations inutiles (il y a généralement des tonnes de programmes qui s'exécutent dans les coulisses que vous ne voyez pas normalement).
Si vous changez votre grep en
grep 'COMMAND=/bin/su -' *
vous le verrez.sudo su -
est également une utilisation inutile desu
.sudo -i
fait la même chose.la source
grep 'COMMAND=/bin/su -' *
(ou sans caractère générique:)grep 'COMMAND=/bin/su -' /var/log/auth.log
?sudo -
) est enregistrée et votre sortie mise à jour le montre. C'est tout ce dont nous parlons ici. Les autres commandes, telles que cellesecho
après avoir changé d'utilisateursudo -
, ne sont pas des commandes sudo et, par conséquent (selon ma réponse) ne sont pas connectéesauth.log
. Seules les commandes individuelles explicitement préfacées parsudo
seront enregistrées.sudo echo
Est donc enregistré, mais ceecho
n'est pas le cas, même si vous êtes passé au superutilisateur.Dans une complexité croissante, voici trois façons de consigner les commandes émises dans le "sudo su -":
Quant à ce qui convient, cela dépend vraiment de ce que vous essayez d'accomplir avec la journalisation.
1) Historique des commandes Bash
Vous souhaitez configurer la fonctionnalité d'historique pour garantir le maintien de lignes suffisantes, sans remplacer les différentes sessions, sans ignorer les commandes et les horodatages appropriés. (Voir les variables HIST * dans le manuel bash ). Subverti facilement en modifiant le fichier d'historique, en manipulant l'environnement ou en exécutant un autre shell.
2) exécuter un wrapper
snoopylogger en est un. Ajoutez une vérification
/etc/profile
que la bibliothèque de l'enregistreur se trouve dans la carte mémoire du processus (/proc/<pid>/maps
), et sinon, définissezLD_PRELOAD
et redémarrez (avecexec $SHELL --login "$@"
). Alternativement, vous pouvez ajouter une entrée à /etc/ld.so.preload avec$LIB/snoopy.so
ou des chemins d'accès équivalents à vos versions 32/64 bits de snoopy.so.Bien que plus difficile, la
LD_PRELOAD
version de la variable d'environnement de ce qui précède pourrait toujours être renversée en manipulant l'environnement d'exécution afin que le code snoopy ne s'exécute plus.Syslog doit être envoyé hors boîte pour que le contenu soit fiable.
3) audité
Un peu plus simple à configurer que le wrapper execve, mais plus difficile à extraire les informations. C'est la réponse à la question que vous vous posez probablement: "Existe-t-il un moyen de consigner l'effet que l'utilisateur a eu sur un système après son émission
sudo su -
". Syslog doit être envoyé hors boîte pour que le contenu soit fiable.Cette réponse Serverfault semble être une configuration assez complète à utiliser avec auditd.
Il y a quelques autres suggestions à une question similaire sur serverfault .
la source
Parce
sudo
que c'est la journalisation; il enregistre les commandes sudo. Dans le premier cas,sudo echo
est enregistré. Dans le second cas,sudo su
est connecté (recherchez-le dans/var/log/auth.log
).su
est "changer d'utilisateur", par défaut sur root. Tout ce que vous faites après cela ne passe passudo
. C'est la même chose que si vous vous étiez connecté en tant que root; la connexion elle-même est enregistrée, mais pas chaque commande.la source
Comme d'autres l'ont dit,
sudo
je ne peux pas faire ça.Utilisez plutôt
auditd
. Si vous voulez enregistrer tout ce qui est fait par root (y compris par exemple les choses faites par crontab), utilisez ceci:ETA: Notez que tout enregistrer aura un impact sur les performances, vous voudrez donc probablement les limiter un peu. Voir
man auditctl
pour des exemples.Si vous souhaitez uniquement consigner les appels système où l'ID de connexion d'origine n'est pas root, utilisez-le à la place:
Les journaux se retrouvent généralement dans /var/log/audit/audit.log. Vous pouvez les rechercher avec
ausearch
.Il y a plus d'informations dans les pages de manuel pour
auditctl
,audit.rules
etausearch
.la source
sudo su -
, vous êtes donc de retour à la case départsudo su -
sera dans~/.bash_history
si votre shell est bash.echo 1234567zz
sera dans/root/.bash_history
si le shell de root est bash.Une explication de cela a déjà été publiée par goldilocks.
la source
Souhaitez-vous que su se connecte parce que vous pensez qu'il s'agit d'une faille de sécurité? Avez-vous pensé à cette commande?
sudo bash
tout aussi mauvais à mon humble avis.Si vous vous inquiétez de ce que les gens peuvent faire avec sudo, vous devrez restreindre son utilisation. Vous pouvez également restreindre les commandes qu'ils peuvent exécuter. Restreignez l'accès à / bin / su si cela vous inquiète.
la source
Et ça:
ou
ou longue ligne:
sudo -E préserve l'environnement PROMPT_COMMAND est exécuté avant chaque invite
la source
Si cela vous aide, vous pouvez utiliser l'option "NOEXEC" des sudoers.
Vous devez le définir comme
Cela empêchera les échappements du shell et l'utilisateur ne pourra pas utiliser sudo -i ou sudo -s ou sudo su -
Cela présente un inconvénient, cependant, tout échappement du shell sera désactivé. pour exécuter un script à partir d'un script sera également refusé.
la source
Ne compliquons pas cela: chaque fois qu'il
sudo
est appelé, il signale ce fait dans un fichier/var/log
(sur votre systèmeauth.log
, sur ma boîte OS X, c'estsystem.log
).sudo
rapporte ses arguments de ligne de commande, mais il n'a aucune connaissance de ce qui pourrait se produire à l'intérieur d'une commande interactive commesu
.Cela ne signifie pas qu'il n'y a pas d'enregistrement de ce qui se passe dans un sous-shell racine: les commandes du shell sont enregistrées dans l'historique du shell. Sur mon système, l'enregistrement de l'historique de root est activé par défaut, donc tout ce que j'ai à faire est de chercher
~root/.sh_history
un enregistrement de ce qui a été fait (à moins que quelqu'un ne l'ait falsifié, bien sûr, mais il pourrait tout aussi bien le falsifier/var/log
).Je pense que c'est la meilleure solution pour vous. Sinon, allez en ville avec
auditd
, comme l'a suggéré @Jenny.PS. Si l'historique de root n'est pas déjà activé, son activation dépend du shell qu'il utilise. Pour
bash
, définissezHISTORY
etHISTFILESIZE
sur un nombre suffisamment grand (par défaut 500, mon manuel dit). Si vous le souhaitez, vous pouvez spécifier où l'historique est enregistré en définissantHISTFILE
un chemin (par défaut$HOME/.sh_history
)la source
Vous voudrez peut-être créer un script de votre session en utilisant
script(1)
:Maintenant, vous pouvez
grep
(notez que les#
invites sont réellement enregistrées dans/tmp/my_typescript
):Alternativement, vous pouvez même regarder à nouveau toute la session avec
scriptreplay(1)
:Le fichier
/tmp/my_typescript.timing
contient des informations lorsque chaque commande a été invoquée. Il existe d'autres outils commettyrec
oushelr
qui ont encore plus de cloches et de sifflets.la source