![]() |
1
437
好的,感谢那些指出系统功能的人
现在要注意的是:
|
![]() |
2
44
|
![]() |
3
32
另一个例子是Postfix,它使用多个通过管道进行通信的守护进程,其中只有一个或两个(除了接受或发出字节外几乎没有其他功能)作为根运行,其余的以较低的权限运行。 |
![]() |
4
30
2017年更新:
使用 authbind比CAP_NET_BIND_服务或定制内核要好得多。
作为Joshua关于破解内核的绝妙建议(=除非您知道自己在做什么,否则不推荐)的后续建议:
易于理解的对于普通内核或旧内核,您不需要。
你看这条线
并将其更改为
如果不希望出现不安全的ssh情况,请将其更改为: 通常,我会使用您需要的最低设置,例如http为79,在端口25上使用SMTP时为24。
就这些了。
下面是编译内核的方法: https://help.ubuntu.com/community/Kernel/Compile
简言之,如果您想保持安全,请使用iptables;如果您想确保此限制不再困扰您,请编译内核。 |
![]() |
5
30
或者修补内核并删除检查。 (最后选择,不推荐)。
在里面
内核将不再检查特权端口。 |
![]() |
6
25
这具有使用脚本服务器的优点,而且非常简单。 |
![]() |
7
25
出于某种原因,没有人提到将sysctl net.ipv4.ip_unprivileged_port_start降低到您需要的值。
有人可能会说,存在一个潜在的安全问题:非特权用户现在可能会绑定到其他特权端口(444-1024)。 但是,通过阻止其他端口,您可以使用iptables轻松解决此问题:
根据情况,我将在sysctl、CAP、authbind和iptables重定向之间进行选择。这是伟大的,我们有这么多的选择。 |
![]() |
8
19
文件功能并不理想,因为它们在包更新后可能会中断。
理想的解决方案IMHO应该是能够创建具有可继承性的shell
下面是一个有点复杂的方法:
结果是具有指定用户和组的进程,以及
|
![]() |
9
19
快速的答案是获取一份最新(尚未发布)版本的libcap
from git
并编译它。复制结果
按顺序,我们是
这里有很多事情要做。
首先,我们以root用户身份运行,因此默认情况下,我们获得了一整套功能。其中包括切换uid&吉德
我们需要解决的下一个问题是,如何在我们完成任务后继续设置功能
如果您有兴趣了解更多信息,请访问
manual page
详细解释了这一点。跑步
|
![]() |
10
19
|
![]() |
11
16
另外两种简单的可能性: 对于“绑定到低端端口并将控制权交给您的守护进程”的守护进程,有一个古老的(不流行的)解决方案。它被称为inetd(或xinetd)。缺点是:
赞成的意见:
更健壮 |
![]() |
12
15
我的“标准解决方案”使用socat作为用户空间重定向器:
注意这不会扩展,分叉很昂贵,但这是socat的工作方式。 |
![]() |
13
14
Linux支持
capabilities
支持比“此应用程序以根用户身份运行”更细粒度的权限。这些能力之一是
|
![]() |
14
13
TLDR:对于“答案”(在我看来),跳到>&燃气轮机;TLDR<&书信电报;在这个答案中加入一部分。 好的,我已经弄明白了(这次是真的),这个问题的答案,我的这个答案也是为我的晋升道歉的一种方式 another answer (无论是在这里还是在推特上)我认为是“最好的”,但在尝试之后,发现我错了。从我的错误中学习孩子们:在你自己真正尝试之前,不要推销任何东西!
一些
正如OP明智地指出的那样,它是 最好避免这种情况(如果可能的话,针对所有守护进程!)。
您不能将与功能相关的选项用于
iptables 建议(OP也提到)是“第二个最好的解决方案”-P >>TLDR<&书信电报;
在这里,我们完成了以下工作:
|
![]() |
15
12
您可以稍后使用 systemd socket activate . 不需要任何功能、iptables或其他技巧。 这是本简单示例中相关systemd文件的内容 python http server
文件
|
![]() |
16
11
systemd 是一个sysvinit替代品,它可以选择启动具有特定功能的守护进程。选项功能=,CapabilityBoundingSet=in systemd.exec(5) |
![]() |
17
10
端口重定向对我们来说最有意义,但我们遇到了一个问题,我们的应用程序将在本地解析一个url,该url也需要重新路由;(这意味着你 shindig ). 这还允许您在访问本地计算机上的url时重定向。
|
![]() |
18
7
启动时:
|
![]() |
19
4
还有“djb方式”。您可以使用此方法以root用户身份在tcpserver下的任何端口上启动流程,然后它将在流程启动后立即将流程的控制权交给您指定的用户。
|
![]() |
20
3
使用 privbind 实用程序:它允许非特权应用程序绑定到保留端口。 |
![]() |
21
3
然后以普通用户身份在8080端口上运行程序。
然后,您将能够访问
|
![]() |
22
1
由于OP只是开发/测试,因此不太圆滑的解决方案可能会有所帮助: setcap可用于脚本的解释器,以向脚本授予功能。如果不接受全局解释器二进制文件上的setcaps,则制作二进制文件的本地副本(任何用户都可以),并在该副本上获得setcap的root。Python2(至少)可以与脚本开发树中解释器的本地副本一起正常工作。不需要suid,因此root用户可以控制用户可以访问哪些功能。
|
![]() |
23
1
wasn't supported for IPv6 . 但显然,它现在在ip6tables v1.4.18和Linux内核v3.8中得到了支持。 我还发现预路由重定向对于在机器内启动的连接不起作用。要处理来自本地计算机的连接,请添加输出规则,另请参见 iptables port redirect not working for localhost
我还发现预路由重定向
also affects forwarded packets
然而,该方法的一个缺点是,侦听端口8080的应用程序不知道传入连接的源地址(例如,出于日志记录或其他识别目的)。 |
![]() |
24
0
2015年9月的答复: ip6tables现在支持IPV6 NAT: http://www.netfilter.org/projects/iptables/files/changes-iptables-1.4.17.txt 您将需要内核3.7+
|
![]() |
Gagan_iOS · Apple App Store IPV6要求 7 年前 |
![]() |
Li Jinyao · 如何使用route命令配置默认ipv6路由 7 年前 |
![]() |
Shir · 通过特定网络接口发送IPv6多播数据包 7 年前 |
![]() |
vdTOG · 使用IPv6 IP地址重写规则不起作用 7 年前 |