Does systemd provide some protection against this […]?
Você está assumindo que deveria. Pelo contrário, considere configurações como TTYPath
e serviços como [email protected]
. A capacidade de obter um terminal de controle é realmente necessária , para que o gerenciamento de serviços possa abranger os serviços de login do TTY, que precisam fazer exatamente isso.
O que realmente protege contra isso é o afastamento da alocação automática de um terminal de controle em open()
e o descarte da semântica antiga. Ou iria proteger contra isso. Não é o caso do Linux, mas no FreeBSD, NetBSD, OpenBSD e Hurd, atualmente o O_NOCTTY
flag to open()
é totalmente supérfluo. A maneira somente de adquirir um terminal de controle é explicitamente exigida, com ioctl(…TIOSCTTY)
. Este tem sido o caso de se aproximar de um quarto de século, desde os dias de 4.4BSD.
Nesse meio tempo, o hábito de entrar no Linux é o hábito que também tem sido o caso há muito tempo, muito antes do systemd: O_NOCTTY
em todos os lugares . ☺
(Sim, as bibliotecas GNU e musl C não dão isso a você por fopen()
. Esse é um dos vários motivos pelos quais fdopen()
ainda é um mecanismo útil.)
O gerenciamento de serviços com service-manager
do conjunto de ferramentas do nosh tem uma abordagem um pouco diferente disso. Em vez de sempre transformar os processos de daemon em líderes de sessão, cada serviço recebe seu próprio objeto de sessão do kernel que não vê uso, somente serviços específicos também encadeiam através de setsid
explicitamente; como ttylogin@*
services que usam open-controlling-tty
, agetty@*
services, onde é claro que agetty
está configurando o terminal de controle e getty@*
services. (Como observado na fonte de serviço, mgetty
chama setsid()
.)
Leitura adicional
- Jonathan de Boyne Pollard (2018).
setsid
. Guia nosh . Softwares.
- Jonathan de Boyne Pollard (2018).
open-controlling-tty
. Guia nosh . Softwares.
- Jonathan de Boyne Pollard (2015). " Herança e falácia da demonização
". Não há mais problemas com o comando
service
. nosh blurb. Softwares.
- Jonathan de Boyne Pollard (2001). " Não use
fork()
para" colocar o daemon em segundo plano '. ". Erros a serem evitados ao projetar programas do programa Unix . Respostas frequentemente dadas.
- Jonathan de Boyne Pollard. " Login do terminal virtual ". Guia nosh . Softwares.
- Jonathan de Boyne Pollard. " Logon de terminal real ". Guia nosh . Softwares.
- link
- link