AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 789293
Accepted
rudib
rudib
Asked: 2025-01-09 21:08:25 +0800 CST2025-01-09 21:08:25 +0800 CST 2025-01-09 21:08:25 +0800 CST

FUSE em podman sem raízes e sem privilégios

  • 772

Pergunta

Adicionar CAP_SYS_ADMINainda é a única maneira de fazer o fuse funcionar dentro de um contêiner sem raiz (com sobreposição nativa ou fuse-overlayfs/outros métodos)?


Exemplos

Podman em podman

Este exemplo de https://www.redhat.com/en/blog/podman-inside-container

podman run --user podman --security-opt label=disable --device /dev/fuse -ti quay.io/podman/stable podman run -ti docker.io/busybox echo hello

funciona para mim sem problemas. Mas me faz supor que está usando fusermountdentro do contêiner ou que é possível usá-lo, o que não funciona quando se usa a mesma configuração.

Além do mais, parece não montar nada:

podman run --user podman --security-opt label=disable --device /dev/fuse -ti quay.io/podman/stable
# running commands in container
cat /proc/mounts > /home/podman/before
podman run -d docker.io/busybox sleep 100
cat /proc/mounts > /home/podman/during
diff /home/podman/before /home/podman/during
# (no difference)

Parece que omitir /dev/fusetambém funciona (testado com sobreposição nativa):

podman run --user podman --security-opt label=disable -ti quay.io/podman/stable podman run -ti docker.io/busybox echo hello

Ligações

Apenas adicionando bindfsà imagem

FROM quay.io/podman/stable

RUN dnf -y install bindfs

E executando um contêiner

podman run --user podman --security-opt label=disable --device /dev/fuse -ti built_image_from_above:latest
# inside the container
cd ~ && mkdir test1 test2
bindfs --no-allow-other test1 test2
fusermount: mount failed: Operation not permitted

Estou assumindo que o comportamento será o mesmo para outras montagens de fusíveis, como sshfs. Isso pode ser um problema de permissão dentro do contêiner ou o host está negando?


Ideias

precisa de privilégio

Essa resposta implica que para usar o fuse, você precisa ter privilégios.

Setuid é mencionado, mas não tenho certeza de como isso é significado. Dentro do continer:

ls -l $(which fusermount3)
-rwsr-xr-x. 1 root root 40800 Jul 17 00:00 /usr/bin/fusermount3

sobreposição sem raiz

Também tentei remover a linha mount_programde storage.confe executar podman system reset, como descrito aqui . Mas não tenho certeza se isso é apenas sobre overlay ou também fuse. Se eu não adicionar /dev/fuse, o dispositivo não estará presente no continer:

Outra desvantagem do fuse-overlayfs é que ele requer acesso a /dev/fuse. Quando as pessoas tentam executar o Podman e o Buildah em um contêiner confinado, retiramos os privilégios CAP_SYS_ADMIN, mesmo quando executados como root. Isso nos força a usar um namespace de usuário para que possamos montar volumes. Para fazer isso funcionar, os usuários precisam adicionar /dev/fuse ao contêiner. Assim que tivermos overlay nativo para o modo sem root (sem CAP_SYS_ADMIN), /dev/fuse não será mais necessário.


Versões

Host: Fedora 41
Podman: 5.3.1
fuse
  • 1 1 respostas
  • 38 Views

1 respostas

  • Voted
  1. Best Answer
    rudib
    2025-01-10T21:22:17+08:002025-01-10T21:22:17+08:00

    Parece que encontrei uma solução (fiz o exemplo o mais curto possível):

    podman run --device /dev/fuse -ti fedora:41
    # inside the container
    cd ~ && mkdir test1 test2
    unshare -pfr --user --mount --kill-child /bin/bash
    # now inside the process within the new ns
    bindfs --no-allow-other test1 test2
    # mounts ok
    

    Fonte: https://zameermanji.com/blog/2022/8/5/using-fuse-without-root-on-linux/#alternative-approach

    Era um problema de capacidade, porque, durante o teste, funcionava com qualquer um dos sinalizadores:

    • --privileged(desabilita a maioria dos mecanismos de segurança)
    • --cap-add=all(desabilita apenas a queda de letras maiúsculas)

    Parece que montagens de fuse sem privilégios são possíveis quando executadas a partir de novos userns e mountns. Não tenho certeza se podman poderia preparar os namespaces - ele pode manipular userns, mas não encontrei nada sobre mountns. Mas executar unshare -pfr --user --mount --kill-child /bin/bashno contêiner parece funcionar bem.

    A bandeira --security-opt label=disabletambém não parece ser necessária.

    • 0

relate perguntas

  • Por que usuários sem privilégios não podem aninhar montagens FUSE, mas podem montar FUSE dentro de NFS com root_squash?

  • Você tem permissão para modificar o diretório de backup de "bindfs"?

  • Montagem de sobreposição FUSE com dois pontos no caminho

  • O aufs pode ser usado como sistema de arquivos fuse como unionfs-fuse?

  • Montando exfat com regras udev automaticamente

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve