首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >主动到被动ftp解决方案

主动到被动ftp解决方案
EN

Server Fault用户
提问于 2010-08-01 19:16:36
回答 1查看 680关注 0票数 2

我有一个ftp客户端(.NET应用程序,我没有源程序),它只执行主动模式,需要将数据推送到只能说被动的设备ftp服务器上。

我无法在两端修改软件,但两者之间的一切都是公平的。(路由、windows或linux软件、防火墙技巧.)

有什么ftp代理软件吗?或者某种我可以尝试的解决方案?

EN

回答 1

Server Fault用户

回答已采纳

发布于 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命令来设置文件功能,如下所示:

代码语言:javascript
复制
sudo setcap 'cap_net_bind_service=+ep' /path/to/file

但是,如果这不起作用(尽管功能确实存在,但当我修补代理套件时,setcap命令并不常见),下面是另一个解决方法。

早在2004年左右,我就写了一个小补丁,它在启动后立即放弃了除了CAP_NET_BIND_SERVICE以外的所有功能,所以即使是一些潜在的安全漏洞也不会那么危险。通常您可能不需要此修补程序,但是如果您患有这种名为“安全妄想症”的疾病,并且您的文件传输发生在Internet的一些黑暗角落,而不是您舒适的office LAN,那么这个修补程序可能是个好主意。

要查看ftp代理是否作为完全根权限运行,请检查getpcaps是否返回如下内容:

代码语言:javascript
复制
yourserver root# getpcaps `pidof ftp-proxy`
Capabilities for `16982': =eip cap_setpcap-eip

修补版本应该像这样返回:

代码语言:javascript
复制
yourserver root# getpcaps `pidof ftp-proxy`
Capabilities for `9522': = cap_net_bind_service+ep

最后,这是我在数以百万计的卫星上写的补丁,我希望它仍然可以应用。

代码语言:javascript
复制
--- 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);
+        }
+
票数 2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/166098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档