Li man sudo
no seguinte:
--preserve-env
Indica à política de segurança que o usuário deseja preservar suas variáveis de ambiente existentes. A política de segurança pode retornar um erro caso o usuário não tenha permissão para preservar o ambiente.
Mas eu me pergunto, mesmo que não tenha essa permissão, o que me impede de correr
sudo env MY_VAR=$MY_VAR <cmd>
?
Pergunta interessante. Em primeiro lugar, definir o ambiente manualmente é tedioso, portanto,
--preserve-env
obviamente, é melhor.Para o aspecto de segurança: a configuração do sudo pode impedir a execução
env
com o sudo ou, melhor ainda, permitir a execução de uma lista específica de comandos que não incluienv
.Eu consideraria uma configuração sudoer que não está restrita a uma lista limitada de comandos como acesso root completo. Não é apenas
env
. Por que não fazersudo bash -c 'export MY_VAR="$MY_VAR"; exec <cmd>'
. É problemático como ter um shell restrito do qual você não deve escapar. Se você não limitar estritamente o que pode ser executado, provavelmente haverá uma rota de fuga.Esta parte da página de manual do sudoer apóia isso na minha opinião:
Portanto, se um usuário tiver permissão para usar todos os comandos, incluindo
env
ele/ela pode (por padrão) também usar--preserve-env
. Se a configuração permitir apenas um comando específico, o padrão é NOSETENV para que o usuário não possa--preserve-env
nem chameenv
para ignorá-lo.TL;DR: é improvável que você não tenha permissão para usar,
--preserve-env
mas pode usarenv
.