Amazon AWS EC2微实例上的Python CGI-入门指南!


23

如何使light2d的EC2微型实例提供CGI脚本?例如Python CGI?

嗯,花了半天时间,但是我已经使用lighttpd服务器在免费的Amazon AWS EC2微实例上运行了Python cgi。我认为这将帮助我的新手将所有步骤都放在一个位置。通过以下简单的步骤,只需15分钟即可完成设置!

对于阅读本文的经验丰富的用户,我的问题是:我所做的工作是否存在任何安全缺陷?(请参阅文件和目录权限。)

步骤1:启动您的EC2实例并ssh进入它。

[显然,您需要注册Amazon EC2并将密钥对保存到* .pem文件。正如亚马逊告诉您的操作方法,我不会赘述。]

  1. 登录您的AWS账户并启动您的EC2实例。网络上有关于此操作的教程。请注意,Amazon提供给您的默认实例大小很小。这不是“微型”的,所以会花钱。请务必手动选择“微型”。(微型实例仅在第一年是免费的...)

  2. 查找正在运行的实例的公共DNS代码。为此,请在信息中心顶部窗格中单击实例,最终您将在底部窗格中看到“ Public DNS”字段。(您可能需要摆弄一些。)公共DNS看起来像:
    ec2-174-129-110-23.compute-1.amazonaws.com

  3. 启动Unix控制台程序。(在Max OS X上,它称为Terminal,位于“应用程序”->“实用程序”文件夹中。)

  4. cd到桌面系统上的目录,该目录具有* .pem文件,其中包含AWS密钥对。

  5. 使用以下命令将ssh转到您的EC2实例:
    ssh -i <<your *.pem filename>> ec2-user@<< Public DNS address >>

    因此,对我来说,这是:
    ssh -i amzn_ec2_keypair.pem ec2-user@ec2-174-129-110-23.compute-1.amazonaws.com

  6. 您的EC2实例应允许您进入。

步骤2:将lighttpd下载到您的EC2实例。

  1. 要安装lighttpd,您将需要对EC2实例具有root访问权限。问题是:Amazon不允许您以root用户身份登录。(至少不是直接的。)但是有一种解决方法。输入以下命令:
    sudo /bin/bash

  2. 系统提示字符将从$更改为#。在整个过程的最后一步之前,我们不会从“ sudo”退出。

  3. 安装lighttpd应用程序(对我来说是1.4.28-1.3.amzn1版本):
    yum install lighttpd

  4. 为lighttpd安装FastCGI库(不需要,但为什么不这样做?):
    yum install lighttpd-fastcgi

  5. 测试您的服务器是否正常工作:
    /etc/init.d/lighttpd start

步骤3:让外界看到您的服务器。

  1. 如果现在尝试从台式机上的浏览器访问服务器,则它将失败。原因:默认情况下,Amazon AWS不会打开您的EC2实例的任何端口。因此,您必须手动打开端口。

  2. 在桌面浏览器中转到EC2仪表板。单击左侧窗格中的“安全组”。一个或多个安全组将出现在右上方的窗格中。选择启动实例时分配给您的EC2实例的实例。

  3. 名为“允许的连接”的表将出现在右下方的窗格中。弹出菜单将使您选择“ HTTP”作为连接方法。

  4. 该表的该行中的其他值应为:tcp,80、80、0.0.0.0 / 0

  5. 现在,从浏览器的桌面访问您的EC2实例的服务器。使用之前用于SSH的公共DNS地址。您应该看到lighttpd通用网页。如果您不这样做,我将无能为力,因为我真是个菜鸟。:-(

步骤4:将lighttpd配置为服务CGI。

  1. 返回控制台程序,cd到lighttpd的配置目录:
    cd /etc/lighttpd

  2. 要启用CGI,您要取消注释<modules.conf>文件中的一行。(我本可以启用Fast CGI,但是最好的方法是婴儿!)您可以使用“ ed”编辑器执行以下操作:
    ed modules.conf
    /include "conf.d\/cgi.conf"/
    s/#//
    w
    q

  3. 创建CGI程序所在的目录。(/etc/lighttpd/lighttpd.conf文件确定该位置。)我们将在默认位置创建目录,因此无需对配置文件进行任何编辑:
    cd /var/www/lighttpd
    mkdir cgi-bin
    chmod 755 cgi-bin

  4. 差不多好了!当然,您需要将测试的CGI程序放入cgi-bin目录。这是一个:
    cd cgi-bin
    ed
    a
    #!/usr/bin/python
    print "Content-type: text/html\n\n"
    print "<html><body>Hello, pyworld.</body></html>"
    .
    w hellopyworld.py
    q
    chmod 655 hellopyworld.py

  5. 重新启动lighttpd服务器:
    /etc/init.d/lighttpd restart

  6. 测试您的CGI程序。在桌面的浏览器中,单击以下URL,以替换EC2实例的公共DNS地址:
    http://<<Public DNS>>/cgi-bin/hellopyworld.py

    对我来说,这是:
    http://ec2-174-129-110-23.compute-1.amazonaws.com/cgi-bin/hellopyworld.py

步骤5:就这样!收拾干净,谢谢!

  • 要退出前面给出的“ sudo / bin / bash”命令,请输入:
    exit

  • 致谢:感谢:

    wiki.vpslink.com/Install_and_Configure_lighttpd

    www.cyberciti.biz/tips/lighttpd-howto-setup-cgi-bin-access-for-perl-programs.html

    aws.typepad.com/aws/2010/06/building-three-tier-architectures-with-security-groups.html

  • 祝你好运,朋友!对于这个“问题”的非传统性质,我深表歉意,但是我从Stackoverflow获得了很多帮助,以至于我渴望回馈一些东西。


4
我为您发布指南而称赞,但SO是您提出问题。我会推荐Blogspot或类似的东西。如果您想回馈,请回答问题:)

我认为任何“如何”都包含一个隐式问题,即“我如何X?” 将来,我将明确提出这个问题,尽管起初看起来像是学究。但是,由于它可能有助于搜索引擎并避免读者混乱,因此我认为这是值得的。谢谢。

从新成员发布这样的方法非常好。无论如何,它会回答尚未提出的问题。顺便说一句,它为我提供了几天前需要的信息,现在我知道这种服务的存在。顺便说一句,在一个人讲很多云的时候,这篇文章可能对很多人都非常有用。所以他不应该灰心,我赞成。

@ user595585批准的做法是提出一个问题“我怎么做”并自己回答。这样一来,您甚至可以获得更多代表。请参阅常见问题解答。“只要假装自己正处于危险之中,问和回答自己的问题也很好,以问题的形式表达出来。”
C. Ross,

3
@user编辑您的问题,使它成为一个问题,然后用您提供的所有详细信息回答。另外,删除其中的一些括号,您是在谈论在EC2上托管python,而不是lisp。
扯掉

Answers:


3

(奇怪的帖子,所以希望这不会像回复一样奇怪)。

关于安全漏洞:将cgi-bin脚本存储在Web服务器的文档根目录中被认为是一般的不良做法。甚至W3C在其“ 万维网安全性常见问题解答 ”中的“是否使用C语言等已编译的安全语言”下也无法做到这一点:

请考虑以下情形。为了方便起见,您已决定使用.cgi扩展名向服务器标识CGI脚本。稍后,您需要对解释后的CGI脚本进行一些小的更改。您可以使用Emacs文本编辑器将其打开并修改脚本。不幸的是,该编辑将脚本源代码的备份副本留在了文档树中。尽管远程用户无法通过获取脚本本身来获取源代码,但他现在可以通过盲目请求URL来获取备份副本:

    http://your-site/a/path/your_script.cgi~

(这是将CGI脚本限制为cgi-bin并确保cgi-bin与文档根目录分开的另一个很好的理由。)

这并不像在文档根目录中写入文件的能力那样严重。但是,攻击者可以获取cgi的源代码,对其进行定向攻击,并将其用作进入服务器的垫脚石。

为了减轻这种情况,您可以将以下几行添加到lighttpd.conf(或其中的一些变体)以将cgi-bin定向到与/ var / www / lighttpd文档根目录分开的目录。

$HTTP["url"] =~ "/cgi-bin/" { cgi.assign = ( "" => "" ) }
alias.url = ( "/cgi-bin/" => "/usr/lib/cgi-bin/" )

这需要lighttpd的cgi和alias模块。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.