以非root身份运行的Docker容器为何能绑定80端口?
非root用户运行容器能绑定80端口的原因
核心原因是你使用的微软官方.NET ASP.NET基础镜像已经做了针对性配置,具体如下:
dotnet二进制已被赋予CAP_NET_BIND_SERVICE权限
Linux系统中,CAP_NET_BIND_SERVICE是特殊权限位,拥有该权限的进程无需以root身份运行,即可绑定1024以下的特权端口(如80、443)。微软官方的mcr.microsoft.com/dotnet/aspnet:7.0镜像默认给/usr/bin/dotnet文件添加了这个权限,你可以在容器内执行以下命令验证:getcap /usr/bin/dotnet输出会类似:
/usr/bin/dotnet cap_net_bind_service=ep这是官方镜像的安全优化
为遵循容器运行的安全最佳实践(尽量避免root用户运行进程),微软在ASP.NET基础镜像中预先配置了该权限,让非root用户既能安全运行应用,又能使用标准HTTP端口,无需额外修改端口号或提升权限。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

