运行Python的CGI脚本的Apache服务器上的须藤权限 [英] Running a Python CGI Script with Sudo Privileges on the Apache Server

查看:177
本文介绍了运行Python的CGI脚本的Apache服务器上的须藤权限的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是新来了Apache 2.2.22 HTTP服务器上使用Ubuntu 12.04的Python CGI。我写一个脚本,将创建其他Python脚本。这些创建的脚本必须有使用chmod + x的权限来执行。该脚本创建脚本必须提供这些权限,我无法弄清楚如何得到它这样做。

在code,创建该文件,我很好奇这样的:

 使用os.system('须藤使用chmod + x%的s.py'%(FNAME))

这是企图给创建的文件使用chmod + x的权限。该命令使用os.system不给创建的脚本使用chmod + X也许是因为它不是由使用sudo特权服务器上运行的权限。我怎样才能得到服务器给脚本创建脚本sudo的权限?

完整code如下。它是一个用户账号创建系统的一部分:

 #!的/ usr / bin中/蟒蛇
进口CGI,OS
进口cgitb
cgitb.enable()#获取表单字段
形式= cgi.FieldStorage()#获取POST数据
FNAME = form.getfirst(其中fname)#拉FNAME现场数据
PASSW = form.getfirst(PASSW)#拉LNAME现场数据#开始HTML生成
打印内容类型:text / html的;字符集= UTF-8#打印头
打印尝试:
    开放(用户/%s.py'%(FNAME)):
            打印'''
            <!DOCTYPE HTML>
            < HTML和GT;
            < HEAD>
            <联系媒体=屏幕类型=文/ CSS相对=样式的href =/ style.css文件>< / LINK>
            <间的charset =UTF-8>
            < META HTTP的当量=刷新内容=3; URL = / cgi-bin目录/的createAccount / createAccount.html>
            < META NAME =关键词内容=聊天,chat.ngrok.com>
            <标题>请等待和LT; /标题>
            <车身的bgcolor =黑>
            < D​​IV ID =导航栏>
            < UL>
            <立GT;< A HREF =/>家庭和LT; / A>< /李>
            <立GT;< A HREF =#>关于< / A>< /李>
            <立GT;< A HREF =/>创建帐户< / A>< /李>
            <立GT;< A HREF =/>登录和LT; / A>< /李>
            <立GT;< A HREF =/> LinkHere< / A>< /李>
            < / UL>
            < / DIV>
            < D​​IV CLASS =容器>
            < D​​IV CLASS =页眉>< / DIV>
            < D​​IV ID =火>
            < BR>
            < H1>!对不起,该用户名已被占用和LT; / H1>
            < / DIV>
            < /身体GT;
            < / HTML>
            '''
除了IO错误:
    createU =开放('用户/%s.py'%(FNAME),W)
    createU.write('''#!的/ usr / bin中/蟒蛇
    打印内容类型:text / html的;字符集= UTF-8
    打印
    打印<!DOCTYPE HTML>中
    打印< HTML和GT;
    打印< HEAD>中
    打印<联系媒体='屏'类型='文字/ CSS相对='样式'SRC ='/ style.css中'>< /链接>中
    打印< /标题>测试与LT; /标题>中
    打印< /头>中
    打印<车身的bgcolor ='黑'>中
    打印< D​​IV ID ='导航栏'>中
    打印< UL>中
    打印< A HREF ='/'>家庭和LT; / A>< /李>中
    打印< A HREF ='/'>关于< / A>< /李>中
    打印< A HREF ='/'>创建帐户< / A>< /李>中
    打印< A HREF ='/'>登录和LT; / A>< /李>中
    打印&下; A HREF =/> LinkHere&下; / A>&下; /利>中
    打印< / UL>中
    打印< / DIV>中
    打印< D​​IV CLASS ='集装箱'>中
    打印< D​​IV CLASS ='头'>< / DIV>中
    打印< /身体GT;
    打印< / HTML>中''')
    createU.close()
    使用os.system('须藤使用chmod + x%的s.py'%(FNAME))    打印'''
    <!DOCTYPE HTML>
    < HTML和GT;
    < HEAD>
    <联系媒体=屏幕类型=文/ CSS相对=样式的href =/ style.css文件>< / LINK>
    <间的charset =UTF-8>
    < META NAME =关键词内容=聊天,chat.ngrok.com>
    <标题>请等待和LT; /标题>
    <车身的bgcolor =黑>
    < D​​IV ID =导航栏>
    < UL>
    <立GT;< A HREF =/>家庭和LT; / A>< /李>
    <立GT;< A HREF =#>关于< / A>< /李>
    <立GT;< A HREF =/>创建帐户< / A>< /李>
    <立GT;< A HREF =/>登录和LT; / A>< /李>
    <立GT;< A HREF =/> LinkHere< / A>< /李>
    < / UL>
    < / DIV>
    < D​​IV CLASS =容器>
    < D​​IV CLASS =页眉>< / DIV>
    < D​​IV ID =火>
    < BR>
    < H1>加载...请稍候<!/ H1>
    < / DIV>
    <形式的行动=./ test.pyNAME =FNAME方法=后>
    '''
    打印'<输入类型=隐藏的名字=PASSW值=%S/>' %(PASSW)
    打印'''
    < /表及GT;
    < SCRIPT TYPE =文/ JavaScript的> document.forms [FNAME]提交();< / SCRIPT>
    < /表及GT;
    < /身体GT;
    < / HTML>
    '''


解决方案

您所创建的文件中的用户/目录,但然后尝试到该目录以外的文件模式。

您chmod命令应使用os.system(使用chmod + X用户/%s.py'%(FNAME))

I am new to python CGI using Ubuntu 12.04 on the Apache 2.2.22 http server. I am writing a script that will create other python scripts. These created scripts must have "chmod +x" permissions to execute. The script creating scripts must provide these permissions and I cannot figure out how to get it to do this.

In the code that creates the file, I am curious about this:

 os.system('sudo chmod +x %s.py' %(fname))

This is what attempts give the created file "chmod +x" permissions. The os.system command does not give the created script "chmod +x" privileges perhaps because it is not run by the server with sudo privileges. How can I get the server to give the script creating the script sudo permissions?

The complete code is below. It is part of a user account creation system:

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

# Retrieve form fields
form   = cgi.FieldStorage()                     # Get POST data
fname  = form.getfirst("fname")                 # Pull fname field data
passw  = form.getfirst("passw")                 # Pull lname field data

# Begin HTML generation
print "Content-Type: text/html; charset=UTF-8"  # Print headers
print ""

try:
    with open('Users/%s.py' %(fname)):
            print '''
            <!DOCTYPE html>
            <html>
            <head>
            <link media="screen" type="text/css" rel="stylesheet" href="/style.css"></linK>
            <meta charset="UTF-8">
            <META http-equiv="refresh" content="3;URL=/cgi-bin/createAccount/createAccount.html">
            <meta name="keywords" content="chat, chat.ngrok.com">
            <title>Please Wait</title>
            <body bgcolor="black">
            <div id="navbar">
            <ul>
            <li><a href="/">Home</a></li>
            <li><a href="#">About</a></li>
            <li><a href="/">Create Account</a></li>
            <li><a href="/">Login</a></li>
            <li><a href="/">LinkHere</a></li>
            </ul>
            </div>
            <div class="Container">
            <div class="Header"></div>
            <div id="fire">
            <br>
            <h1>Sorry, this username is already taken!</h1>
            </div>
            </body>
            </html>
            '''
except IOError:
    createU = open('Users/%s.py' %(fname),'w')
    createU.write('''#!/usr/bin/python
    print "Content-type: text/html; charset=UTF-8" 
    print ""
    print "<!DOCTYPE html>"
    print "<html>"
    print "<head>"
    print "<link media='screen' type='text/css' rel='stylesheet' src='/style.css'></link>"
    print "</title>Test</title>"
    print "</head>"
    print "<body bgcolor='black'>"
    print "<div id='navbar'>"
    print "<ul>"
    print "<a href='/'>Home</a></li>"
    print "<a href='/'>About</a></li>"
    print "<a href='/'>Create Account</a></li>"
    print "<a href='/'>Login</a></li>"
    print "<a href='/'>LinkHere</a></li>"
    print "</ul>"
    print "</div>"
    print "<div class='Container'>"
    print "<div class='Header'></div>"
    print "</body>"
    print "</html>"''')
    createU.close()
    os.system('sudo chmod +x %s.py' %(fname))

    print '''
    <!DOCTYPE html>
    <html>
    <head>
    <link media="screen" type="text/css" rel="stylesheet" href="/style.css"></linK>
    <meta charset="UTF-8">
    <meta name="keywords" content="chat, chat.ngrok.com">
    <title>Please Wait</title>
    <body bgcolor="black">
    <div id="navbar">
    <ul>
    <li><a href="/">Home</a></li>
    <li><a href="#">About</a></li>
    <li><a href="/">Create Account</a></li>
    <li><a href="/">Login</a></li>
    <li><a href="/">LinkHere</a></li>
    </ul>
    </div>
    <div class="Container">
    <div class="Header"></div>
    <div id="fire">
    <br>
    <h1>Loading... Please Wait!</h1>
    </div>
    <form action="./test.py" name="FNAME" method="post">
    '''
    print '<input type="hidden" name="passw" value="%s" />' %(passw)
    print '''
    </form>
    <SCRIPT TYPE="text/JavaScript">document.forms["FNAME"].submit();</SCRIPT>
    </form>
    </body>
    </html>
    '''

解决方案

You are creating the file in the Users/ directory but then you try to chmod outside of that directory.

Your chmod command should be os.system('chmod +x Users/%s.py' %(fname))

这篇关于运行Python的CGI脚本的Apache服务器上的须藤权限的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆