Quels systèmes d'exploitation multi-utilisateurs permettent à un utilisateur de voir la ligne de commande actuelle des autres utilisateurs?


13

Je lisais la page de manuel deunzip , et suis tombé sur ce qui suit

-P password
       use password to decrypt encrypted zipfile entries (if  any).   THIS
       IS  INSECURE!   Many  multi-user operating systems provide ways for
       any user to see the current command line of any other user; even on
       stand-alone systems there is always the threat of over-the-shoulder
       peeking.

Bien que la précaution de sécurité de ne pas taper les mots de passe en texte clair (et de les retrouver dans l'historique du shell) soit bien sûr vraie, j'ai du mal à croire qu'il existe des systèmes d'exploitation là où n'importe quel utilisateur peut voir la ligne de commande de tout autre utilisateur . Quelqu'un pourrait-il me donner un exemple (anciens systèmes inclus)?


Je crois que ps, topetc. sont la réponse pour UNIX.


pilote de clavier)
STTR

@STTR Je connais peu de choses sur le matériel, donc je ne sais pas si le pilote de clavier donne à tous les utilisateurs un accès égal et complet, mais ce n'est certainement pas un système d'exploitation et il n'y a pas de terminal attaché.
4ae1e1

1
Juste une note, si vous voulez empêcher une commande d'entrer dans l'historique de bash, faites précéder la commande d'un espace.
joshreesjones

Réponses:


4

Je suppose que sur les systèmes Unix / Linux, l'utilisation lsofpourrait potentiellement exposer l'interaction de l'utilisateur. La logique étant de lsofmontrer une liste de fichiers ouverts sur le système. Et peut-être que si l'on décompresse un énorme fichier, il sera toujours ouvert assez longtemps pour que quelqu'un puisse le remarquer et ensuite jeter un œil à l'activité. Heck, il serait assez trivial d'écrire un script Bash et de l'exécuter toutes les minutes via un travail cron pour collecter un journal continu de l'activité des fichiers ouverts.

Mais cela me semble toujours faux. Je veux dire lsofexpose potentiellement quelque chose comme les mots de passe MySQL en ligne de cette façon. Mais je ne suis pas sûr à 100% qu'un utilisateur normal sans sudo/ droits root puisse voir l' lsofactivité d'autres utilisateurs comme ça.


3
Tu es définitivement sur la bonne voie. Je pense que lsofmontre les fichiers ouverts d'autres utilisateurs et vous n'avez pas besoin de privilèges élevés (testé sur le serveur de mon institution). De même, pset toprévéler les lignes de commande des autres utilisateurs.
4ae1e1

1
J'ai ensuite vérifié les pages de manuel de ps, topet je n'ai lsoftrouvé aucune mention de privilège. Il y a aussi cette question: comment rendre un processus invisible pour les autres utilisateurs? . Je suppose donc que les lignes de commande sont bien visibles pour tout le monde sur les systèmes UNIX. Hmm, grosse surprise.
4ae1e1

J'ai découvert ttysnoopet conspyje ne sais pas s'ils nécessitent ou non des privilèges root.
Vinayak

Quelles sont les options à passer lsofqui permettent de voir le paramètre de la ligne de commande? avec, par exemple, lsof -a +c0 /dev/nullje peux voir le nom de la commande longue mais pas le paramètre passé à la commande. Qu'est-ce que j'ai raté? :-)
Hastur

4

Unix autorise "ps". De plus, Unix a généralement une commande "w" qui montrera ce que les utilisateurs exécutent. "w" peut généralement couper les commandes en fonction de la taille du terminal, mais cela peut être remplacé. (Un moyen simple peut être d'utiliser simplement un terminal plus large.)

Cela affectera probablement également plusieurs systèmes de type Unix (Linux, systèmes BSD, Solaris, etc.)

Je crois que Microsoft Windows l'afficherait également dans le Gestionnaire des tâches. Eh bien, c'est peut-être moins courant avec Windows Vista et le contrôle de compte d'utilisateur, car le contrôle de compte d'utilisateur peut être nécessaire. Mais à l'époque de WinXP / Server2003 et des versions antérieures, ces restrictions étaient peut-être plus laxistes. Il y a une raison pour laquelle NET USE a commencé à prendre en charge un astérisque, puis à inviter l'utilisateur à saisir un mot de passe. Avec:

WMIC /NODE:ComputerName PROCESS LIST

un utilisateur n'a probablement même pas besoin d'être sur le même ordinateur pour voir une commande exécutée. D'un côté, je soupçonne que plusieurs TaskList, TList et PSList (tous distribués gratuitement par Microsoft) prennent probablement également en charge la possibilité de voir ce qui se passe, quel que soit l'utilisateur en cours d'exécution. Au moins, les utilisateurs avec des privilèges d'administrateur, ce qui était plus courant sur les systèmes d'exploitation antérieurs à Vista. (Dans Win9x, la norme générale était que tous les utilisateurs avaient des capacités de type administrateur.) Gardez à l'esprit qu'Info-Zip, qui est la documentation que vous citez, est un peu plus ancien que WinXP. Offhand je pense qu'il est plus ancien que Win95.

Avec les anciens systèmes multi-utilisateurs, la confidentialité n'était pas aussi importante. Être capable de voir ce que fait l'ordinateur, y compris les commandes exécutées par d'autres utilisateurs, était probablement considéré comme une caractéristique positive, et non une violation négative de la sécurité. Peut-être une question plus applicable est la suivante: existe-t-il un système d'exploitation multi-utilisateurs majeur qui ne prend pas en charge les utilisateurs pouvant voir quelles commandes sont exécutées sur l'ordinateur?

L'approche la plus sûre consiste à ne jamais mettre de mots de passe sensibles sur une ligne de commande. Une autre option peut être de mettre des mots de passe dans un fichier, puis de spécifier ce fichier sur la ligne de commande. par exemple:

type pwfile | command

Au moins de cette façon, les autorisations basées sur l'implémentation du système de fichiers offriront probablement une certaine protection.


1
Pour voir les processus d'un autre utilisateur sous Windows, vous devez être administrateur.
Moshe Katz

4

Certaines (et je ne pense pas toutes) des façons Linux de voir la commande zip -PThat_Password ...d'un autre utilisateur sans privilèges root :

  • cat /proc/24695/cmdline si le PID est 24695 ...

    zip-P That_Password

    Remarque: c'est sans espaces mais il est possible de deviner le mot de passe cependant

  • grep -H -e "zip" /proc/[0-9]*/cmdline

    Correspondances fichier binaire / proc / 24695 / cmdline

    bien si ça marche catça marche tout le reste basé sur du texte ...

  • pgrep -a zipl'option -a répertorie la ligne de commande complète ainsi que l'ID du processus. (pas toujours disponible sur l'ancienne version [par exemple <2008] de pgrep)

    24695 zip -P That_Password

et bien sûr l' op mentionné

  • ps -aux | grep zip

    That_User 24695 1,9 0,0 15012 1192 pts / 40 T 12:37 0:45 zip -P That_Password

  • top -c -b -n 1 | grep zip cette réponse avec quelque chose comme

    24695 That_User 20 0 15012 1192 820 T 0,0 0,0 0: 45,12 zip -P That_Password


@JakeGould Au moins sur mes systèmes, la commande comme cat /proc/24695/cmdlinedonner une sortie sans espaces ...
Hastur

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.