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

如何在Fedora基础镜像的Dockerfile中限制用户仅执行指定命令?

实现Fedora容器中普通用户仅执行指定命令的方案

可以实现,下面是几种可靠的解决方法,同时先帮你修复之前误操作导致的命令失效问题:

先修复权限问题

你之前执行chmod 700 /bin导致所有命令失效,是因为Fedora中/bin是指向/usr/bin的软链接,修改软链接权限会影响整个目录的访问权限。执行以下命令恢复:

RUN chmod 777 /bin

方案一:sudo白名单配置(最易用)

通过sudo给用户配置仅能执行指定命令的权限,无需密码验证:

  1. 创建用户后,在Dockerfile中添加sudo规则文件:
# 创建普通用户
RUN useradd -m restricteduser

# 添加sudo白名单规则
RUN echo "restricteduser ALL=(ALL) NOPASSWD: /usr/bin/touch, /usr/bin/echo, /usr/bin/git" >> /etc/sudoers.d/restricteduser
# 设置规则文件权限为只读,避免被篡改
RUN chmod 0440 /etc/sudoers.d/restricteduser
  1. 用户执行命令时需前缀sudo,比如sudo touch test.txt,其他未在白名单中的命令无法通过sudo执行,直接执行也会因权限不足失败。

方案二:创建受限命令目录(无需sudo)

构建一个仅包含允许命令的目录,修改用户PATH仅指向该目录,同时限制系统命令目录的访问权限:

# 创建普通用户
RUN useradd -m restricteduser

# 创建专属命令目录
RUN mkdir -p /home/restricteduser/bin
# 软链接允许的命令到该目录
RUN ln -s /usr/bin/touch /home/restricteduser/bin/touch
RUN ln -s /usr/bin/echo /home/restricteduser/bin/echo
RUN ln -s /usr/bin/git /home/restricteduser/bin/git

# 修改用户PATH,仅使用专属目录
RUN echo 'export PATH="/home/restricteduser/bin"' >> /home/restricteduser/.bashrc

# 限制系统命令目录权限,普通用户无法直接访问/usr/bin下的其他命令
RUN chmod 750 /usr/bin

注意:如果git依赖其他系统命令(如git clone需要curl或ssh),需将这些依赖也软链接到专属目录,或改用方案一的sudo方式(sudo会继承root的完整PATH)。

方案三:容器级系统调用限制(高安全性)

使用Docker的seccomp配置文件,仅允许指定命令所需的系统调用,彻底禁止其他命令的执行可能。这种方式适合严格的安全场景,但配置较复杂,需针对每个命令梳理依赖的系统调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 11:48:12