fifo 파일(명명된 파이프)에 대한 SSH 원격 명령에 대한 특별한 권한이 있습니까?

fifo 파일(명명된 파이프)에 대한 SSH 원격 명령에 대한 특별한 권한이 있습니까?

SSH 원격 명령을 사용하여 일부 문자열을 fifo 파일로 리디렉션해야 하지만 권한이 항상 거부됩니다. 내가 실행한 명령은 다음과 같습니다.

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

그러면 다음 오류가 발생합니다.

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

nagios.cmd의 파일 권한은 다음과 같습니다.

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

그러나 sudo 명령을 사용하여 nagios1에 rundeck 사용자로 로그인하면 다음 명령을 성공적으로 실행할 수 있습니다.

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

nagios1은 RHEL5를 실행 중이고 SElinus는 Permissive로 설정되어 있습니다. 원격으로 명령을 실행할 때 로그 출력(메시지 및 보안)이 표시되지 않습니다.

답변1

SSH는 쉘 명령을 실행합니다. 인수를 사이에 공백으로 연결하고 명령을 원격으로 실행합니다. 따라서 로컬 쉘에 이것을 입력하면

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

원격 쉘에서 실행되는 내용은 다음과 같습니다.

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

보시다시피 리디렉션은 sshd에서 시작한 내부 셸이 아니라 에서 호출한 외부 원격 셸에 적용됩니다 su. 추가 인용 계층이 필요합니다. 하나는 로컬 셸의 특수 문자가 원격 셸에 도달하도록 보호하고, 다른 하나는 외부 원격 셸의 특수 문자가 해당 su문자에 도달하도록 보호하기 위한 것입니다. 내부 껍질을 통과합니다).

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

권한이 없는 셸에서 인쇄하고 파일에 쓰기만 하는 권한 있는 명령으로 파이프하면 참조 수준을 한 단계 줄일 수 있습니다(셸일 필요는 없음).

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

로컬로 인쇄할 수도 있어 다른 수준의 필요한 참조가 필요하지 않습니다.

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

print … | …대신 이 문자열을 사용할 수 있습니다(로컬 셸이 ksh, bash 또는 zsh라고 가정).

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

답변2

인용하다이 답변, 다른 sudo 및 ssh 플래그와 결합하여 의사 TTY를 할당합니다.

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

관련 정보