如何确保我的 Bash 安装在更新后不再受到ShellShock错误的影响?
如何让 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 …
我正在尝试创建一个为 PHP 脚本提供服务的网络服务器。目前,它的工作原理如下:
php index.phpphp从 STDOUT读取输出并将其返回给客户端除了参数没有传递给 PHP 脚本之外,所有这些都有效,因为:
var_dump($_GET);
Run Code Online (Sandbox Code Playgroud)
返回:
数组(0){}
$_GET调用时如何将参数传递给 PHP 二进制文件?
我正在使用Apache 2.2并希望在大多数站点中将X-Frame-Options标头设置为“拒绝”。我可以使用mod_headers无条件地打开它。但是,有一个 CGI 脚本会返回必须装帧的内容,因此我需要为该脚本关闭它。有没有办法做到这一点?
我正在使用 Debian 的 Apache 2.2.9。
我想向您询问您所知道的 PHP/Apache 配置方法,以及它们的优缺点。我自己开始:
---------------- PHP 作为 Apache 模块----------------
优点:速度快,因为您不需要每次都启动 exe,尤其是在mpm-worker模式下。您还可以在此模式下使用各种PHP 加速器,如 APC 或 eAccelerator。
缺点:如果您在 mpm-worker 模式下运行 apache,您可能会面临稳定性问题,因为任何 php 脚本中的每个故障都会导致该 apache 进程的整个线程池不稳定。同样在这种模式下,所有脚本都代表 apache 用户执行。这不利于安全。mpm-worker 配置需要在线程安全模式下编译 PHP。至少 CentOS 和 RedHat 默认存储库没有线程安全的 PHP 版本,因此在这些操作系统上,您至少需要自己编译 PHP(有一种方法可以在 Apache 上激活 worker mpm)。线程安全的 PHP 二进制文件的使用被认为是实验性的和不稳定的。另外,许多 PHP 扩展不支持线程安全模式,或者没有在线程安全模式下进行良好测试。
---------------- PHP 作为 CGI ----------------
这似乎是最慢的默认配置,它本身似乎是一个“骗局”;)
---------------- PHP 作为 CGI 通过 mod_suphp ----------------
优点:suphp 允许您代表脚本文件所有者执行 php scipts。这样您就可以安全地将同一台机器上的不同站点分开。此外,suphp 允许每个虚拟主机使用不同的 php.ini 文件。
缺点:CGI 模式下的 PHP 意味着较低的性能。在这种模式下,你不能使用像 APC 这样的 php 加速器,因为每次产生新进程来处理脚本时,前一个进程的缓存都没用。顺便说一句,你知道在这个配置中应用一些加速器的方法吗?我听说了一些关于将 shm 用于 …
所以,我是 CGI/Perl 的新手,我正在尝试将基于 perl 的 Web 应用程序移动到新服务器。
我的新服务器是 CentOS 7,它运行 Apache HTTPD 2.4.6。
我正在尝试通过 HTTP 请求获得基本的 Perl CGI。
Web 请求返回“500 内部服务器错误”
错误日志显示“权限被拒绝”:
[Tue May 12 16:56:44.604660 2015] [cgi:error] [pid 12302] [client 10.0.2.2:56693] AH01215: (13)Permission denied: exec of '/var/www/html/cgi-test/first.pl' failed
[Tue May 12 16:56:44.604708 2015] [cgi:error] [pid 12302] [client 10.0.2.2:56693] End of script output before headers: first.pl
Run Code Online (Sandbox Code Playgroud)
我的 CGI 脚本在 /var/www/html/cgi-test/first.pl
它看起来像这样:
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello, World.";
Run Code Online (Sandbox Code Playgroud)
在 cgi-test 目录中,权限如下所示:
drwxr-xr-x. 2 root root 21 May 12 16:48 . …Run Code Online (Sandbox Code Playgroud) 多年来,我已经习惯于在“vi”中编辑 Perl CGI 脚本并同时打开浏览器来测试它们。最近,当我这样做时,我收到了“500”服务器错误,当我从 shell 运行脚本时,我得到“错误解释器:文本文件繁忙”。唯一的解决方案是每当我想测试脚本时退出“vi”,这是一种极大的痛苦,应该完全没有必要。那是怎么回事?我正在运行一个 Debian 服务器,我会定期更新它,我假设它是从一些所谓的“升级”开始的:)
我一直认为 PHP 作为 Apache 模块安装效果更好,但最近,本地论坛上有人指出,将 PHP 作为 CGI 运行在安全性方面更好。我已经做了一些谷歌搜索,似乎Dreamhost 将其 PHP 安装默认为通过 CGI 工作。现在我有点困惑。
据我所知(我不是系统管理员,只是一个 Web 开发人员),当 PHP 作为 Apache 模块安装时存在用户权限问题。通过 CGI 使用 PHP 时存在速度问题(或者曾经是)。
现在安装 PHP 的推荐方法是什么?在共享和专用主机上。
我看过很多有类似问题的帖子,但似乎没有一个对我有用
我有以下 /etc/apache2/httpd.conf 文件:
<Directory /var/www/index.py>
Options +ExecCGI
</Directory>
<Directory /var/www>
Options +ExecCGI
AllowOverride None
Order allow,deny
Allow from all
AddHandler cgi-script .py
DirectoryIndex index.py
</Directory>
<Directory /var/www/tiles>
AddHandler mod_python .py
PythonHandler TileStache::modpythonHandler
PythonOption config /home/TileStache/tilestache.cfg
</Directory>
Run Code Online (Sandbox Code Playgroud)
当我尝试访问主页时:只是主机名:http : //exampleHost.com 我在错误日志中收到以下错误:
Options ExecCGI is off in this directory: /var/www/index.py
Run Code Online (Sandbox Code Playgroud)
但是当我去http://exampleHost.com/index.py 时它工作正常。
所以我猜有什么东西覆盖了 /var/www 目录?我在 /var/www 目录中没有 .htaccess 文件。
我通过fcgiwrap与nginx. 由于脚本被编译,我可以在编译过程中得到编码错误,但有时我收到CGI错误只是说明
An error occurred while reading CGI reply (no response received)
Run Code Online (Sandbox Code Playgroud)
是否有任何调试方法可以识别 CGI 请求/进程有什么问题?
如何设置调试系统以将错误传送到 nginx 日志中?
cgi ×10
apache-2.2 ×4
php ×3
fastcgi ×2
http ×2
perl ×2
500 ×1
amazon-ec2 ×1
apache-2.4 ×1
bash ×1
debian ×1
debugging ×1
http-headers ×1
installation ×1
lighttpd ×1
nginx ×1
python ×1
security ×1
suphp ×1
vi ×1