O chmod 000 / dev / stdin desativaria o terminal para sempre?

12

Estou trabalhando nas perguntas do Unix The Textbook (capítulo 8, # 16, página 207) :

Forneça chmodlinhas de comando que executem as mesmas tarefas que os comandos mesg ne mesg y. (Dica: todo dispositivo de hardware, incluindo o seu terminal, tem um arquivo associado no /devdiretório.)

Eu acredito que a resposta é:

mesg n = chmod 770 /dev/stdout

mesg y = chmod 777 /dev/stdout

Mas eu queria saber o que acontece se você usar chmod 000 /dev/stdin?

Você fica impedido de digitar comandos no terminal?

Philip Kirkbride
fonte
2
É importante entender que as permissões são verificadas apenas quando um arquivo é aberto. Portanto, não importa qual seja a entrada padrão do seu shell, a alteração de suas permissões não impedirá que você insira comandos, porque o shell e o emulador de terminal ou ssh ou o que já abriu o canal de comunicação. mesg npode usar permissões para afetar os futuros writesomente porque write ainda não possui o terminal aberto.
Zwol

Respostas:

20

Não, /dev/stdine /dev/stdouté o dispositivo errado. Estes não são dispositivos terminais, são alias para entrada e saída padrão, respectivamente. Entrada padrão e saída padrão são, por definição, descritores de arquivo que os aplicativos esperam que sejam abertos e tenham um significado convencional (descritor de arquivo 0 e 1 respectivamente, há também 2 que são erro padrão). Dispositivos como /dev/stdine /dev/stdoutsão úteis quando um aplicativo requer um nome de arquivo, mas o usuário do aplicativo deseja que ele acesse um descritor de arquivo específico, em vez de abrir algum arquivo. Dependendo da variante unix, eles podem até não ser arquivos de dispositivo; por exemplo, no Linux, eles são links simbólicos para/proc/self/fd/0 e amigos, e esses são, por sua vez, links simbólicos "mágicos" para qualquer arquivo que o processo já tenha aberto no descritor de arquivo.

Alterar as permissões de /dev/stdine /dev/stdoutsó mudaria o que acontece quando esses nomes de arquivo são usados ​​explicitamente. Isso não afeta nada relacionado ao terminal e não afeta o uso normal de entrada e saída padrão, pois as permissões são importantes apenas ao abrir um nome de arquivo específico.

O que mesgfaz é alterar as permissões do terminal de controle do processo . Para um aplicativo que está sendo executado em um terminal, o terminal é aberto na entrada padrão, na saída padrão e no erro padrão (descritores de arquivo 0, 1 e 2). Você pode usar o comando ttypara ver qual é o dispositivo terminal. mesg né equivalente a chmod g-w "$(tty)"e mesg yé equivalente a chmod g+w "$(tty)".

Gilles 'SO- parar de ser mau'
fonte
2
ttynão relata o terminal de controle, mas o terminal abre no stdin, se houver. Portanto, no Linux, em que / dev / stdin não é um dispositivo, mas um link simbólico especial para o arquivo aberto em / dev / stdin, chmot "$(tty)"seria mais ou menos o mesmo que chmod /dev/stdin(se stdin for um dispositivo tty e tentar mudar o modo de not a ttycaso contrário, um arquivo no diretório atual). Veja /dev/$(ps -o tty= -p "$$")para o terminal de controle.
Stéphane Chazelas