23 python lighttpd cgi amazon-ec2
如何让 EC2 微实例从 lighthttpd 提供 CGI 脚本?例如Python CGI?
嗯,这花了半天时间,但我已经使用 lighttpd 服务器在免费的 Amazon AWS EC2 微实例上运行了 Python cgi。我认为将所有步骤放在一个地方会帮助我的新手。通过以下简单步骤,您只需 15 分钟即可完成设置!
对于阅读本文的更有经验的用户,我的问题是:我所做的是否存在任何安全漏洞?(请参阅文件和目录权限。)
[显然,您需要注册 Amazon EC2 并将您的密钥对保存到 *.pem 文件中。我不会讨论这个,因为亚马逊会告诉你如何去做。]
登录您的 AWS 账户并启动您的 EC2 实例。网络上有关于这样做的教程。请注意,Amazon 提供给您的默认实例大小为“小”。这不是“微型”,因此它会花费您金钱。一定要手动选择“微”。(微型实例仅在第一年免费......)
查找正在运行的实例的公共 DNS 代码。为此,单击仪表板顶部窗格中的实例,您最终会看到底部窗格中填充的“公共 DNS”字段。(您可能需要稍微调整一下。)公共 DNS 看起来像:
ec2-174-129-110-23.compute-1.amazonaws.com
启动您的 Unix 控制台程序。(在 Max OS X 上,它被称为终端,位于 Applications -> Utilities 文件夹中。)
cd 到桌面系统上的目录,该目录包含包含 AWS 密钥对的 *.pem 文件。
使用如下命令通过 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
您的 EC2 实例应该可以让您进入。
要安装 lighttpd,您需要对 EC2 实例进行 root 访问。问题是:亚马逊不会让您以 root 身份登录。(至少不是直截了当。)但是有一个解决方法。键入此命令:
sudo /bin/bash
系统提示字符将从 $ 变为 #。直到整个过程的最后一步,我们才会退出“sudo”。
安装 lighttpd 应用程序(我的版本为 1.4.28-1.3.amzn1):
yum install lighttpd
为 lighttpd 安装 FastCGI 库(不需要,但为什么不呢?):
yum install lighttpd-fastcgi
测试您的服务器是否正常工作:
/etc/init.d/lighttpd start
如果您现在尝试从桌面上的浏览器访问您的服务器,它将失败。原因:默认情况下,Amazon AWS 不会向您的 EC2 实例开放任何端口。因此,您必须手动打开端口。
在桌面浏览器中转到您的 EC2 仪表板。单击左侧窗格中的“安全组”。一个或多个安全组将出现在右上角的窗格中。选择在您启动实例时分配给您的 EC2 实例的那个。
右下方窗格中将出现一个名为“允许的连接”的表。弹出菜单将让您选择“HTTP”作为连接方法。
表中该行的其他值应为:tcp, 80, 80, 0.0.0.0/0
现在从浏览器的桌面点击您的 EC2 实例的服务器。使用您之前用于 SSH 的公共 DNS 地址。您应该会看到 lighttpd 通用网页。如果你不这样做,我帮不了你,因为我是个菜鸟。:-(
回到控制台程序,cd 到 lighttpd 的配置目录:
cd /etc/lighttpd
要启用 CGI,您需要取消注释 <modules.conf> 文件中的一行。(我本可以启用 Fast CGI,但最好是小步走!)您可以使用“ed”编辑器执行此操作,如下所示:
ed modules.conf
/include "conf.d\/cgi.conf"/
s/#//
w
q
创建 CGI 程序所在的目录。(/etc/lighttpd/lighttpd.conf 文件决定了它的位置。)我们将在默认位置创建我们的目录,所以我们不必对配置文件进行任何编辑:
cd /var/www/lighttpd
mkdir cgi-bin
chmod 755 cgi-bin
差不多好了!当然你需要把一个测试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
重启你的 lighttpd 服务器:
/etc/init.d/lighttpd restart
测试您的 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
要退出之前给出的“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 得到了很多帮助,我很想回馈一些东西。
小智 3
(奇怪的帖子,所以希望这不会是一个奇怪的回复)。
关于安全缺陷:将 cgi-bin 脚本存储在 Web 服务器的文档根目录中被认为是普遍的不良做法。甚至 W3C 在其万维网安全常见问题解答中的“C 等编译语言是否更安全……”下也回避了这一问题:
考虑以下场景。为了方便起见,您决定使用 .cgi 扩展名来识别服务器的 CGI 脚本。稍后,您需要对解释的 CGI 脚本进行一些小更改。您使用 Emacs 文本编辑器打开它并修改脚本。不幸的是,编辑后在文档树中留下了脚本源代码的备份副本。虽然远程用户无法通过获取脚本本身来获取源代码,但他现在可以通过盲目请求 URL 来获取备份副本:
Run Code Online (Sandbox Code Playgroud)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/" )
Run Code Online (Sandbox Code Playgroud)
这需要 lighttpd 的 cgi 和 alias 模块。
归档时间: |
|
查看次数: |
7518 次 |
最近记录: |