Est-il possible de «cacher» un processus de la liste de «ps» ou «top» sous Linux

10

Tout d'abord, je suppose que si cela est possible, cela devrait être fait en tant que root (ou en tant qu'utilisateur qui partage l'UID de root de 0).

Comment lancer un processus pour qu'il n'apparaisse pas dans une liste ps auxou ps efou topsi la commande est exécutée par un non-root?

Est-ce seulement possible?

Les distributions que j'exécute généralement sont RHEL / CentOS et Ubuntu - donc s'il y a une réponse spécifique à la distribution, ça va aussi.

garenne
la source
warren: Avez-vous déjà trouvé une solution à cela?
Chris
@Chris - non ... La réponse de @ fianchetto semble être la seule voie, et c'est beaucoup plus de travail que je ne suis prêt à entreprendre: - |
warren
Je vais entreprendre ce projet et je ferai rapport avec tout ce que je déterminerai.
Chris

Réponses:

5

Eh bien, vous avez quelques options ici. Prendre le moyen le plus simple serait d'échanger les programmes ps et top avec des versions modifiées qui cachent ce que vous voulez cacher.

L'alternative serait d'exécuter votre code intégré dans un processus existant ou d'écrire un script wrapper autour de votre code avec un nom inoffensif.

Dans certaines versions de PS, vous pouvez le modifier en changeant argv [], mais vous ne savez pas si cela fonctionne pour top, et vous ne savez pas si cela fonctionne sous linux (c'est principalement une convention BSD).

Tout dépend, exactement de ce que vous cherchez à réaliser en faisant cela?

fianchetto
la source
mon objectif ici est que les processus générés par root ne soient pas visibles pour tous les utilisateurs (peut-être des démons liés à la sécurité ou similaires)
warren
@flanchetto Alors, dites-vous si j'ai un programme qui est déjà en cours d'exécution et qu'il exécute plus tard une commande en ligne de commande avec un mot de passe dans le même processus que le mot de passe sera donné en toute sécurité? par exemple exécuter python myScript.pyet toutes les subprocess.Popencommandes (qui peuvent ou non contenir des mots de passe) ne sont pas affichées, tant que c'est le même processus?
Brōtsyorfuzthrāx
Quoi qu'il en soit, cela ne fonctionne pas (je viens de l'essayer et j'ai vu le mot de passe). Donc, je suppose que vous voulez dire autre chose. N'hésitez pas à clarifier. :)
Brōtsyorfuzthrāx
13

Selon le correctif du noyau http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=0499680a42141d86417a8fbaa8c8db806bea1201 , vous pouvez utiliser l'option hidepid pour le système de fichiers proc:

hidepid = 0 (par défaut) signifie l'ancien comportement - n'importe qui peut lire tous les fichiers / proc / PID / * lisibles par tous.

hidepid = 1 signifie que les utilisateurs ne peuvent accéder à aucun répertoire / proc //, mais au leur. Les fichiers sensibles comme cmdline, sched *, status sont désormais protégés contre les autres utilisateurs. Comme la vérification des autorisations effectuée dans proc_pid_permission () et les autorisations des fichiers ne sont pas modifiées, les programmes qui attendent des modes de fichiers spécifiques ne sont pas confondus.

hidepid = 2 signifie hidepid = 1 plus tout / proc / PID / sera invisible pour les autres utilisateurs. Cela ne signifie pas qu'il cache l'existence d'un processus (il peut être appris par d'autres moyens, par exemple en tuant -0 $ PID), mais il masque l'euid et l'égid du processus. Il complique la tâche de l'intrus de collecte d'informations sur les processus en cours d'exécution, si certains démons s'exécutent avec des privilèges élevés, si un autre utilisateur exécute un programme sensible, si d'autres utilisateurs exécutent un programme, etc.

gid = XXX définit un groupe qui pourra rassembler toutes les informations des processus (comme en mode hidepid = 0). Ce groupe doit être utilisé au lieu de mettre l'utilisateur non root dans le fichier sudoers ou quelque chose. Cependant, les utilisateurs non fiables (comme les démons, etc.) qui ne sont pas censés surveiller les tâches dans l'ensemble du système ne doivent pas être ajoutés au groupe.

Vous n'êtes pas en mesure de contrôler la visibilité au niveau du processus, mais vous pouvez vous assurer que vos utilisateurs ne peuvent voir que leurs propres processus.

Si vous avez une version du noyau supérieure à 3.3, vous pouvez essayer avec la commande suivante:

 
mount /proc -o remount,hidepid=2

uha
la source
Pouvez-vous limiter la hidepid=2chose afin qu'elle n'affecte que des utilisateurs spécifiques (ou alors qu'elle liste certains utilisateurs en liste blanche)?
Brōtsyorfuzthrāx
Fonctionne très bien! Mon problème était que je me connectais à un serveur à l'aide d'un script cron et que n'importe quel utilisateur pouvait voir les informations d'identification à l'aide de "htop" (par exemple). En définissant "hidepid = 2", les utilisateurs ne peuvent pas voir les processus lancés par d'autres utilisateurs, ce que je cherchais. Pourquoi n'est pas défini par défaut?
lepe
@lepe probablement pour des raisons héritées. Briserait ceci et cela et ne peut donc pas (encore) être utilisé partout.
Florian Wendelborn
OP a demandé que le pid soit invisible dans l'ensemble, pas seulement pour les autres utilisateurs ...?
phil294
Existe-t-il un moyen de masquer les processus créés par certains utilisateurs uniquement? par exemple. root?
Avery235
-2

utilisez la commande F dans la commande top et n, par exemple pour configurer ce que vous voulez voir. utilisez la commande W pour écrire la configuration que vous aimez ~ / .toprc - utilisez? pour voir les principales commandes. Cela peut résoudre votre problème rapidement - il l'a fait pour moi. Avec F, je peux ajouter / supprimer les champs que je veux voir, tandis qu'en f, utiliser s pour définir le tri, puis q pour revenir à l'affichage. puis n pour définir le nombre de processus que je veux voir et W pour enregistrer dans .toprc

JamesD
la source
Cela ne fait que cacher quelque chose à mon avis
warren