Est-ce que chmod 000 / dev / stdin désactiverait le terminal pour toujours?


12

Je travaille sur les questions d' Unix The Textbook (chapitre 8, # 16, page 207) :

Donnez des chmodlignes de commande qui exécutent les mêmes tâches que les commandes mesg net mesg y. (Astuce: chaque périphérique matériel, y compris votre terminal, a un fichier associé dans le /devrépertoire.)

Je crois que la réponse est:

mesg n = chmod 770 /dev/stdout

mesg y = chmod 777 /dev/stdout

Mais je me demandais ce qui se passe si vous utilisez chmod 000 /dev/stdin?

Vous verrouillez-vous à entrer des commandes dans le terminal?


2
Il est important de comprendre que les autorisations ne sont vérifiées qu'à l'ouverture d'un fichier. Par conséquent, quelle que soit l'entrée standard de votre shell, la modification de ses autorisations ne vous empêchera pas d'entrer des commandes, car le shell et l'émulateur de terminal ou ssh ou quoi que ce soit ont déjà ouvert le canal de communication. mesg npeut utiliser des autorisations pour affecter les futurs writeuniquement car le terminal write n'est pas déjà ouvert.
zwol

Réponses:


20

Non, /dev/stdinet ce /dev/stdoutn'est pas le bon appareil. Ce ne sont pas des terminaux, ce sont des alias respectivement pour l'entrée standard et la sortie standard. L'entrée standard et la sortie standard sont, par définition, des descripteurs de fichiers que les applications s'attendent à voir ouverts et qui ont une signification conventionnelle (descripteurs de fichier 0 et 1 respectivement, il y en a également 2 qui est une erreur standard). Des périphériques tels que /dev/stdinet /dev/stdoutsont utiles lorsqu'une application nécessite un nom de fichier, mais l'utilisateur de l'application souhaite qu'elle accède à un descripteur de fichier particulier plutôt que d'ouvrir un fichier. Selon la variante unix, il se peut même qu'il ne s'agisse pas de fichiers de périphérique; par exemple, sous Linux, ce sont des liens symboliques vers/proc/self/fd/0 et amis, et ce sont à leur tour des liens symboliques «magiques» vers n'importe quel fichier que le processus a déjà ouvert sur ce descripteur de fichier.

La modification des autorisations de /dev/stdinet /dev/stdoutne changerait que ce qui se passe lorsque ces noms de fichiers sont utilisés explicitement. Cela n'affecte rien lié au terminal, et cela n'affecte pas l'utilisation normale de l'entrée et de la sortie standard, car les autorisations n'ont d'importance que lors de l'ouverture d'un nom de fichier particulier.

Qu'est mesg- ce que c'est de changer les autorisations du terminal de contrôle du processus . Pour une application qui s'exécute dans un terminal, le terminal est ouvert sur l'entrée standard, la sortie standard et l'erreur standard (descripteurs de fichiers 0, 1 et 2). Vous pouvez utiliser la commande ttypour voir ce qu'est le terminal. mesg nest équivalent à chmod g-w "$(tty)"et mesg yest équivalent à chmod g+w "$(tty)".


2
ttyne signale pas le terminal de contrôle, mais le terminal ouvert sur stdin le cas échéant. Donc, sous Linux où / dev / stdin n'est pas un périphérique mais un lien symbolique spécial vers le fichier ouvert sur / dev / stdin, chmot "$(tty)"serait plus ou moins le même que chmod /dev/stdin(si stdin est un périphérique tty et tenterait de changer le mode de not a ttysinon un fichier dans le répertoire courant). Voir /dev/$(ps -o tty= -p "$$")pour le terminal de contrôle.
Stéphane Chazelas
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.