我有一个ftp客户端(.NET应用程序,我没有源程序),它只执行主动模式,需要将数据推送到只能说被动的设备ftp服务器上。
我无法在两端修改软件,但两者之间的一切都是公平的。(路由、windows或linux软件、防火墙技巧.)
有什么ftp代理软件吗?或者某种我可以尝试的解决方案?
发布于 2010-08-01 19:25:35
有(或者,也许,曾经?)一个非常好的守护进程,名为SuSE代理套件。它拦截FTP流量,并允许将ftp客户端重定向到某个特定的后端服务器,如果我的内存服务于我,它也允许主动<->被动转换。多年来,我一直在相当恶劣的环境中使用这个程序,没有遇到麻烦。
不幸的是,我的旧书签(http://proxy-suite.suse.de)似乎重定向到Novell的页面。几个软件包存储库(FreeBSD,快速搜索后的Debian )似乎仍然包含该软件,因此您可能有一些希望。
FreshPorts似乎对该软件有一个很好的描述:
http://www.freshports.org/net/proxy-suite/
编辑:还有一件事。我不知道这个小问题是否后来得到了修补(它不是2004年我最后一次使用这个东西),但默认情况下,代理套件是作为根用户运行的,因为它需要绑定到低端口。因为它没有利用Linux 功能的优势,所以它作为真正的根运行。
现在,应该可以通过setcap命令来设置文件功能,如下所示:
sudo setcap 'cap_net_bind_service=+ep' /path/to/file但是,如果这不起作用(尽管功能确实存在,但当我修补代理套件时,setcap命令并不常见),下面是另一个解决方法。
早在2004年左右,我就写了一个小补丁,它在启动后立即放弃了除了CAP_NET_BIND_SERVICE以外的所有功能,所以即使是一些潜在的安全漏洞也不会那么危险。通常您可能不需要此修补程序,但是如果您患有这种名为“安全妄想症”的疾病,并且您的文件传输发生在Internet的一些黑暗角落,而不是您舒适的office LAN,那么这个修补程序可能是个好主意。
要查看ftp代理是否作为完全根权限运行,请检查getpcaps是否返回如下内容:
yourserver root# getpcaps `pidof ftp-proxy`
Capabilities for `16982': =eip cap_setpcap-eip修补版本应该像这样返回:
yourserver root# getpcaps `pidof ftp-proxy`
Capabilities for `9522': = cap_net_bind_service+ep最后,这是我在数以百万计的卫星上写的补丁,我希望它仍然可以应用。
--- common/com-misc.c.orig 2006-11-20 13:54:59.000000000 +0200
+++ common/com-misc.c 2006-11-20 14:40:47.000000000 +0200
@@ -36,0 +37 @@
+#include <sys/capability.h>
@@ -748,0 +750,18 @@
+ /*
+ * If running as root, drop all the privileges except CAP_NET_BIND
+ */
+ if (geteuid() == 0) {
+ cap_t caps = cap_init();
+ static cap_value_t capv[] = {CAP_NET_BIND_SERVICE};
+ const int numcaps = sizeof(capv) / sizeof(capv[0]);
+ if (caps == NULL)
+ syslog_error("cap_init() failed; errno = %d", errno);
+ if (cap_set_flag(caps, CAP_PERMITTED, numcaps, capv, CAP_SET) < 0)
+ syslog_error("Could not set permitted capabilities;
errno = %d", errno);
+ if (cap_set_flag(caps, CAP_EFFECTIVE, numcaps, capv, CAP_SET) < 0)
+ syslog_error("Could not set effective capabilities;
errno = %d", errno);
+ if (cap_set_proc(caps) < 0)
+ syslog_error("Could not apply capability set; errno =
%d", errno);
+ cap_free(caps);
+ }
+https://serverfault.com/questions/166098
复制相似问题