【发布时间】:2009-10-17 02:51:36
【问题描述】:
我正在尝试从一个从 php 文件开始的 netcat 连接中获取一个值,但它死了:
localhost [127.0.0.1] 2000 (?) : Connection refused
我不知道为什么,但是如果我以 apache 用户 (www-data) 的身份 ssh 它运行良好,这就是我所做的:
1) 开始一个无限循环,为某个日期提供一点延迟:
$ (while true; do nc -l -p 2000 -c "sleep 5; date"; done)&
2) 检查是否正常工作:
$ su www-data
$ nc localhost 2000
Fri Oct 16 21:33:20 COT 2009
3) 如下创建/var/www/test.php:
<pre><?php
exec('nc localhost 2000>>/var/www/dates.txt 2>>/var/www/errors.txt &');
?></pre>
4) 在浏览器上运行:
http://myserver.com/test.php
5) 最后看一下两个 txt,日期是空的(与 #2 中的响应不同)并且错误有“连接被拒绝”错误。
服务器是一个运行 Ubuntu Server 9.04 的 LAMP 集群,带有 DRBD 和 Heartbeat。
让我抓狂的是,这个 test.php 在我的笔记本电脑上运行良好(Ubuntu Desktop 9.04 上的 LAMP),而且服务器似乎已经打开并监听了端口:
$ netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:4743 0.0.0.0:* LISTEN 2326/openhpid
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 3364/mysqld
tcp 0 0 0.0.0.0:2000 0.0.0.0:* LISTEN 9510/nc
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3470/apache2
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2320/sshd
tcp 0 0 127.0.0.1:3551 0.0.0.0:* LISTEN 2354/apcupsd
tcp6 0 0 :::22 :::* LISTEN 2320/sshd
我认为这是一个与编程相关的问题,对吧?如果不是在没有任何 cmets 的情况下关闭它。
提前致谢!!!
【问题讨论】:
-
这可能属于 serverfault.com 但无论如何...你能检查 AppArmor 是否正在执行吗?在
/var/log/kern.log中查找audit。 -
我删除了 AppArmor 来配置集群,该日志中没有审计条目,但是谢谢!
-
您是否尝试在 netcat 调用中添加 -vv 以使 netcat 的输出更详细?