You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Alpine:3.18.3的自定义TomCat镜像无法移除Shell访问求助

解决Alpine镜像中无法移除Root Shell访问权限的问题

问题原因

你遇到的问题核心有两点:

  • Alpine Linux基于BusyBox,chsh和usermod命令在修改登录shell时,可能因BusyBox的简化实现未正确生效;且这两个命令修改的是登录shell,而docker exec是直接调用shell二进制程序,不走登录流程,所以不受该设置限制。
  • 只要镜像中存在/bin/ash这类shell文件,即便修改了root的shell为/sbin/nologin,用户依然可以通过docker exec -it <容器ID> /bin/ash直接启动shell。

可行解决方案

方案1:直接修改/etc/passwd文件(确保登录shell生效)

跳过chsh/usermod,直接编辑Alpine的用户配置文件,替换root的shell字段:

RUN sed -i 's/root:x:0:0:root:\/root:\/bin\/ash/root:x:0:0:root:\/root:\/sbin\/nologin/' /etc/passwd

方案2:彻底移除shell二进制文件(禁止直接调用shell)

如果要完全阻止shell访问,可删除镜像中的shell文件,注意先确认Tomcat启动脚本不依赖shell:

RUN rm -f /bin/ash /bin/sh

更稳妥的方式是创建非root用户运行Tomcat,同时配置无shell:

# 创建非root用户并设置无shell
RUN adduser -D tomcat -s /sbin/nologin
# 切换用户运行Tomcat
USER tomcat
# 移除shell文件(可选,需确认Tomcat启动无需依赖)
RUN rm -f /bin/ash /bin/sh

方案3:通过Docker运行参数限制

启动容器时,禁止分配TTY并固定启动命令,避免用户通过docker exec -it进入容器:

docker run -d --tty=false --entrypoint=/usr/local/tomcat/bin/catalina.sh your-tomcat-image run

建议结合前两种方案使用,避免镜像中残留的shell被绕过调用。


内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 18:03:10