运行Python的CGI脚本的Apache服务器上的须藤权限 [英] Running a Python CGI Script with Sudo Privileges on the Apache Server
问题描述
我是新来了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 =黑>
< DIV 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>
< DIV CLASS =容器>
< DIV CLASS =页眉>< / DIV>
< DIV 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 ='黑'>中
打印< DIV ID ='导航栏'>中
打印< UL>中
打印< A HREF ='/'>家庭和LT; / A>< /李>中
打印< A HREF ='/'>关于< / A>< /李>中
打印< A HREF ='/'>创建帐户< / A>< /李>中
打印< A HREF ='/'>登录和LT; / A>< /李>中
打印&下; A HREF =/> LinkHere&下; / A>&下; /利>中
打印< / UL>中
打印< / DIV>中
打印< DIV CLASS ='集装箱'>中
打印< DIV 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 =黑>
< DIV 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>
< DIV CLASS =容器>
< DIV CLASS =页眉>< / DIV>
< DIV 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屋!