No seu pipe, apenas o echo é executado com privilégios elevados, acredito que você precisa de um sudo antes de socat.
Eu criei um usuário de teste e quero limitar esse usuário "teste" para executar apenas o seguinte comando via visudo.
echo "show stat" | socat stdio /var/run/haproxy.sock
visudo
test ALL=(root)NOPASSWD:/usr/bin/socat stdio /var/run/haproxy.sock
ls -lat /var/run/haproxy.sock
srwxr-xr-x 1 munin haproxy 0 May 22 22:32 /var/run/haproxy.sock
eu corri o seguinte comando
test#sudo echo "show stat" | socat stdio /var/run/haproxy.sock
A mensagem de erro
2013/05/22 23:13:14 socat[21289] E connect(3, AF=1 "/var/run/haproxy.sock", 23): Permission denied
Posso saber o que foi configurado incorretamente no Visudo
O echo
está sendo executado como root
, mas o socat
não está. Tente isso:
echo "show stat" | sudo socat stdio /var/run/haproxy.sock
Você pode definir um soquete unix normal (não privilegiado) como:
stats socket /var/run/haproxy/socket.sock mode 666