簡體   English   中英

為處理來自 html(網頁)的輸入而開發的 Python 腳本未執行 shell 命令

[英]Python script developed to act on input from html (web page) is not executing the shell command

請幫助我的人! 我已經設置了一個 xcat 服務器,以便我可以從中管理我的許多節點。 我想停止直接從我的 xcat 服務器中運行 python 腳本。 我認為為了簡單起見,創建一個網頁作為我的界面並使用 python 作為來自 xcat 服務器的服務器端腳本會更好我發現我的底層 python 腳本並沒有真正完成我想要它做的所有事情。 例如,我的腳本無法啟動或關閉在 xcat 服務器上定義的節點。 為了更好地說明,我的節點 (hs22n12) 是在我的 xcat 服務器 (xcatmn5) 上定義的。 我能夠使用“nodels | grep hs22n12” 在 xcatmn5 上定位該節點並以我認為合適的任何方式操作它,例如通電(“rpower hs22n12 on”)或斷電(“rpower hs22n12 off”)。 但是,當我將此命令構建到我的 python 腳本中以便在我提供來自 html 的輸入時操作它們時,操作不成功。 此處顯示了一些規范:我正在使用 apache,並且我已確認它正在運行 我的 python 腳本在我的 var/www/cgi-bin 中,我可以運行它們我的 htnl 文件位於 /var/www/html請在我的代碼片段下方找到第一個 html 代碼(目前對我來說沒問題並且運行良好)

****<!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <body>
    <div id="title">
    <title> Node Provisioning Application </title>
    </div>
    <form action='cgi-bin/powerOff11.py' method="post">
     Enter Node:  <input type="text"  name ="Node"/>
     <input type="submit" value="submit">
    </form>
    </body>
    </html>**

我將很快添加我的 python 代碼這是我的 python 代碼

#!/usr/bin/python
import cgi
import cgitb
import subprocess
import os
import sys
cgitb.enable()

print "Content-type: text/html\n"

form = cgi.FieldStorage()

Node = form.getvalue('Node')
print"<p>%s</p>"% Node

if Node == None:
    print"<p>No node provided</p>"
else:
    find_node = subprocess.call('nodels | grep ' + Node, shell=True)
    if find_node == 0:
        print("<p>Node not defined yet!</p>")
    else:
        if find_node > 0:
            print"<p>%s</p>"% Node
            p_off = subprocess.call('rpower ' + Node + ' on',shell=True)
            print"<p>%s powering on...</p>"% Node 
        else:
            sys.exit()
        

更新:經過一番挖掘,我能夠為 REST API 啟用 HTTPS 協議,並按照以下說明啟用 HTTPs 證書: https : //xcat-docs.readthedocs.io/en/stable/advanced/restapi /restapi_setup/restapi_setup.html

在我這樣做之后,我實際上能夠通過 https 訪問不同的資源,例如我的 xcat 服務器的存儲庫。 然而,原來的問題變得更加清晰。 每當我嘗試運行需要 root 權限的命令時,我從 http 得到的新響應是:

“錯誤:請求權限被拒絕警告:/usr/share/httpd/.xcat/ 下的客戶端證書未正確設置,請運行'/opt/xcat/share/xcat/scripts/setup-local-client.sh'以‘root’身份生成客戶端證書;否則,xcat 客戶端和 xcatd 之間的 SSL 連接將在沒有證書驗證的情況下建立,並容易受到中間人攻擊。”

這讓我相信我的問題是如何配置 /etc/httpd/conf/httpd.conf 以便能夠請求 root 訪問並從那里發出請求。 請注意,我能夠響應 /usr/bin 目錄中的所有二進制命令,例如(ls、cd 等)(這些命令不需要獲得 root 權限。有人可以指點我如何配置 httpd .conf 這樣我的請求就可以合法地從 /root 到 xcat?謝謝大家的幫助。

這是 xCAT2,我猜?
如果是這樣,您是否授予 apache 進程執行 xCAT 命令的正確權限?

xCAT 策略表用作xCAT 的ACL(訪問控制列表)。

您可以執行以下操作:

mkdef -t policy -o 7.0 name=apache rule=allow

7.0只是一個例子 - 使用任何其他數字,只要它不與任何預先存在的規則沖突 - tabdump policy可能很方便,因為策略表中不應該有太多行。

name使用 apache 進程所有者。

默認情況下,除非受commands=標志限制,否則此新策略規則允許所有命令。

再次感謝您抽出時間回答我的問題。 我已經試過了。 看起來這不是問題,但是您已經將我推向了正確的思考方向,超越了實際代碼,考慮了 httpd 的整個 Web 服務配置以及它如何從 xcatd 發出請求。 我能夠進行一些調整,並注意到我能夠從 xcatd 獲得對 /usr/bin/python 中所有二進制命令的響應(例如 ls),但我無法獲得對需要像 lsdef 這樣的 root 訪問權限的命令的響應。 這讓我相信我遇到的問題是我沒有被授予從 http 客戶端請求 root 權限(運行 root 命令)的權限。 我需要一個已經完成 Web 服務配置的人來看看這個。 我相信問題很可能出在 httpd.conf (仍在閱讀它)但又是坦克。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM