Qualquer permissão especial ssh comando remoto trabalhando no arquivo fifo (também conhecido como pipe nomeado)?

1

Eu preciso redirecionar algumas strings para um arquivo fifo com o comando ssh, mas sempre tenho permissão negada, o comando que eu executei é:

ssh rundeck@nagios1 sudo su - root -c 'printf "Disable_Notification;web01;App:Tomcat:Log:webapp" >> /opt/nagios/nagios.cmd'

Em seguida, recebi este erro:

bash: /opt/nagios/nagios.cmd Permission denied

O arquivo permisson de nagios.cmd é:

prw-rw---- 1 nagios nagios 0 Mar  16 10:32 /opt/nagios/nagios.cmd

No entanto, posso executar este comando com sucesso enquanto me loguei no nagios1 como rundeck user com o comando sudo:

sudo su - root -c 'printf "Disable_Notification;web01;App:Tomcat:Log:webapp" >> /opt/nagios/nagios.cmd'

O nagios1 está executando o RHEL5, o SELinus está configurado como Permissivo. Não vejo nenhuma saída de log (mensagem e segura) enquanto executo o comando remotamente.

    
por NeilWang 06.03.2015 / 10:35

2 respostas

0

O SSH executa um comando shell. Ele concatena seus parâmetros com espaços intermediários e executa esse comando remotamente. Assim, quando você digita isso em seu shell local

ssh rundeck@nagios1 sudo su - root -c 'printf "Disable_Notification;web01;App:Tomcat:Log:webapp" >> /opt/nagios/nagios.cmd'

isto é o que é executado no shell remoto:

sudo su - root -c printf "Disable_Notification;web01;App:Tomcat:Log:webapp" >> /opt/nagios/nagios.cmd

Como você pode ver, o redirecionamento é aplicado no shell remoto externo chamado por sshd , não no shell interno lançado por su . Você precisa de uma camada adicional de cotação: uma para proteger caracteres especiais do shell local para que eles atinjam o shell remoto e outra para proteger caracteres especiais do shell remoto externo para que eles atinjam o shell remoto interno chamado por su ( mais um terço ao redor da corda para imprimir de modo que passe por aquela casca interna).

ssh rundeck@nagios1 'sudo su - root -c '\''printf "Disable_Notification;web01;App:Tomcat:Log:webapp" >> /opt/nagios/nagios.cmd'\'

Você pode fazer com um nível de cotação a menos fazendo a impressão em um shell não privilegiado e canalizando-o para um comando privilegiado (que não precisa ser um shell) que apenas grava no arquivo.

ssh rundeck@nagios1 'printf "Disable_Notification;web01;App:Tomcat:Log:webapp" | sudo tee /opt/nagios/nagios.cmd'

E você pode até fazer a impressão localmente, o que elimina outro nível de cotação necessária.

printf "Disable_Notification;web01;App:Tomcat:Log:webapp" | ssh rundeck@nagios1 sudo tee /opt/nagios/nagios.cmd

E, em vez de usar print … | … , você pode usar uma string aqui (supondo que seu shell local seja ksh, bash ou zsh).

ssh rundeck@nagios1 sudo tee /opt/nagios/nagios.cmd <<<"Disable_Notification;web01;App:Tomcat:Log:webapp"
    
por 07.03.2015 / 01:07
0

Consulte esta resposta , combinada com alguns outros sudo e ssh para alocar um Pseudo TTY.

ssh -t rundeck@nagios1 "sudo -u root sh -c 'printf \"Disable_Notification;web01;App:Tomcat:Log:webapp\" >> /opt/nagios/nagios.cmd'"
    
por 06.03.2015 / 15:32