Shell
任何適用於 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 命令以 rundeck 使用者身份登錄到 nagios1 時,我可以成功執行此命令:
sudo su - root -c 'printf "Disable_Notification;web01;App:Tomcat:Log:webapp" >> /opt/nagios/nagios.cmd'
nagios1 正在執行 RHEL5,SELinus 設置為 Permissive。遠端執行命令時,我沒有看到任何日誌輸出(消息和安全)。
SSH 執行一個 shell 命令。它將其參數與中間的空格連接起來並遠端執行該命令。因此,當您在本地 shell 中鍵入它時
ssh rundeck@nagios1 sudo su - root -c 'printf "Disable_Notification;web01;App:Tomcat:Log:webapp" >> /opt/nagios/nagios.cmd'
這是在遠端 shell 中執行的內容:
sudo su - root -c printf "Disable_Notification;web01;App:Tomcat:Log:webapp" >> /opt/nagios/nagios.cmd
如您所見,重定向應用在由 呼叫的外部遠端 shell 中
sshd
,而不是在由 啟動的內部 shell 中su
。您需要額外的引用層:一層保護特殊字元免受本地 shell 的影響,以便它們到達遠端 shell,另一種保護特殊字元免受外部遠端 shell 的影響,以便它們到達由su
(加上三分之一)呼叫的內部遠端 shell圍繞要列印的字元串,以便它穿過該內殼)。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 … | …
您可以使用此處的字元串(假設您的本地 shell 是 ksh、bash 或 zsh)。ssh rundeck@nagios1 sudo tee /opt/nagios/nagios.cmd <<<"Disable_Notification;web01;App:Tomcat:Log:webapp"