É possível desativar o requiretty?

39

Estou tentando configurar um script de implantação usando o Capistrano Em uma etapa, o cap deploy:setupscript está se conectando ao meu servidor e tentando executar comandos que criam diretórios. Então eu vejo um erro:msudo: sorry, you must have a tty to run sudo

Existe uma solução sugerida para desativar o requiretty no meu servidor. https://unix.stackexchange.com/a/49078/26271

Eu estou querendo saber se é seguro fazer?

desenvolvedor
fonte

Respostas:

40

Há uma vantagem de segurança muito limitada em se ter requirettyum servidor. Se algum código não raiz for explorado (um script PHP, por exemplo), a requirettyopção significa que o código de exploração não poderá atualizar diretamente seus privilégios executando sudo.

Pode haver outra maneira de o invasor obter root e, é claro, o invasor ainda poderá desfigurar seu site, mas não permitir que o invasor ganhe root significa que outros serviços em execução como usuários diferentes continuarão funcionando normalmente e o invasor vencerá ' não conseguir apagar os logs do sistema. Se nenhuma das suas sudoregras fizer algo perigoso como criar um diretório , isso não é uma preocupação.

Além disso - e mais condenável requiretty- não é necessário privilégio para criar um tty, por exemplo, com expectativa . Portanto, você também pode desativar requiretty: por si só, ele não fornece uma vantagem de segurança. Ele fornece uma vantagem leve de auditabilidade quando executado pelos usuários (porque os logs dão uma idéia melhor de quem chamou sudoe de onde eles vêm), mas não quando executado a partir de um trabalho em segundo plano.

Gilles 'SO- parar de ser mau'
fonte
11
Você quer dizer que, se o usuário pode executar expect(ou screenpor exemplo), ele requirettyé inútil do ponto de vista da segurança? (Eu não entendo muito bem o que você entende por "condenável" nessa frase)
Georges Dupéron
@ GeorgesDupéron Sim, é isso. Como qualquer pessoa pode criar um tty, a requirettyopção não impede que alguém use o sudo.
Gilles 'SO- stop be evil'
3
requirettypode impedir que um usuário vaze sua senha em texto não criptografado, se estiver executando um comando sudo que exija uma senha via ssh. Está lá para forçar o usuário a chamar ssh -t.
Chris Betti
11
@ Chris Betti - por que isso é uma coisa boa, para impor ssh-t ...?
Rop
Meu pensamento na época era que, nesse caso, se você estiver executando um comando sudo remoto que solicita uma senha, é melhor aproveitar o programa askpass da máquina remota do que preencher a senha em texto não criptografado pelo console. Sinceramente, não tenho idéia se isso fornece segurança aprimorada, além de possivelmente impedir a situação em que sua senha é ecoada na tela enquanto você digita. Acredito que estava pensando que um programa askpass não seria invocado sem um tty ou pseudo-tty.
Chris Betti