"sudo -u peter echo ~" interpretará o valor de ~ antes de executar o comando sudo. Experimente
sudo -s -H -u peter echo \$HOME
ou
sudo -i -u peter echo \$HOME
Além disso, para visualizar todas as variáveis de ambiente configuradas pelo sudo try:
sudo -i -u peter export
# actually, use /usr/bin/env instead of export
UPDATE
Ao usar -i ou -s, você insinua que o SUDO_COMMAND a ser executado é o ambiente de shell do usuário especificado. Então, permitir apenas / bin / echo não é suficiente, seria necessário permitir que todos / bin / bash estivessem disponíveis.
Parece que -H é o suficiente para definir a variável de ambiente HOME, mas não é possível fazer o eco com $ HOME porque esse é um recurso de um shell. Outros programas podem ler o valor de HOME via getenv () ou métodos similares.
sudo -H -u peter /usr/bin/env | grep SUDO_COMMAND
SUDO_COMMAND=/usr/bin/env
sudo -i -u peter /usr/bin/env | grep SUDO_COMMAND
SUDO_COMMAND=/bin/bash -c /usr/bin/env