Chmod 000 / dev / stdin disabiliterebbe il terminale per sempre?


12

Sto lavorando alle domande di Unix The Textbook (capitolo 8, # 16, pagina 207) :

Fornire chmodrighe di comando che eseguono le stesse attività svolte dai comandi mesg ne mesg y. (Suggerimento: ogni dispositivo hardware, incluso il terminale, ha un file associato nella /devdirectory.)

Credo che la risposta sia:

mesg n = chmod 770 /dev/stdout

mesg y = chmod 777 /dev/stdout

Ma mi chiedevo cosa succede se usi chmod 000 /dev/stdin?

Vieni bloccato dall'immissione di comandi nel terminale?


2
È importante comprendere che le autorizzazioni vengono controllate solo quando viene aperto un file. Pertanto, indipendentemente dall'input standard della shell, cambiare le sue autorizzazioni non ti bloccherà a immettere i comandi, perché sia ​​la shell che l'emulatore di terminale o ssh o qualunque cosa abbia già aperto il canale di comunicazione. mesg npuò usare le autorizzazioni per influenzare writesolo i futuri perché write non ha già il terminale aperto.
zwol,

Risposte:


20

No, /dev/stdine /dev/stdoutsono il dispositivo sbagliato. Questi non sono dispositivi terminali, sono alias rispettivamente per input standard e output standard. L'input standard e l'output standard sono, per definizione, descrittori di file che le applicazioni prevedono di essere aperti e hanno un significato convenzionale (rispettivamente descrittore di file 0 e 1, c'è anche 2 che è errore standard). Dispositivi come /dev/stdine /dev/stdoutsono utili quando un'applicazione richiede un nome file, ma l'utente dell'applicazione desidera che acceda a un particolare descrittore di file anziché aprire un file. A seconda della variante unix, potrebbero anche non essere file di dispositivo; ad esempio, su Linux, sono collegamenti simbolici a/proc/self/fd/0 e amici, e questi sono a loro volta collegamenti simbolici "magici" a qualsiasi file che il processo ha già aperto su quel descrittore di file.

La modifica delle autorizzazioni /dev/stdine /dev/stdoutcambierebbe solo ciò che accade quando questi nomi di file vengono utilizzati in modo esplicito. Non influisce su alcun elemento correlato al terminale e non influisce sul normale utilizzo dell'input standard e dell'output standard, poiché le autorizzazioni sono importanti solo quando si apre un determinato nome file.

Quello che mesgfa è cambiare le autorizzazioni del terminale di controllo del processo . Per un'applicazione in esecuzione in un terminale, il terminale è aperto su input standard, output standard ed errore standard (descrittori di file 0, 1 e 2). È possibile utilizzare il comando ttyper vedere qual è il dispositivo terminale. mesg nè equivalente a chmod g-w "$(tty)"ed mesg yè equivalente a chmod g+w "$(tty)".


2
ttynon segnala il terminale di controllo, ma il terminale si apre su stdin se presente. Quindi su Linux dove / dev / stdin non è un dispositivo ma uno speciale link simbolico al file aperto su / dev / stdin, chmot "$(tty)"sarebbe più o meno lo stesso di chmod /dev/stdin(se stdin è un dispositivo tty e proverebbe a cambiare la modalità di un not a ttyfile nella directory corrente altrimenti). Vedere /dev/$(ps -o tty= -p "$$")per il terminale di controllo.
Stéphane Chazelas,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.