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 / 454711
Accepted
phg
phg
Asked: 2018-07-12 07:05:32 +0800 CST2018-07-12 07:05:32 +0800 CST 2018-07-12 07:05:32 +0800 CST

impedir a montagem de ligação no login, se montado

  • 772

No login, uma montagem de ligação é criada. Em ~/.pam_mount.conf.xml:

  <volume options="bind" user="phg" mountpoint="/nix" path="/store/nix" />

Isso precisa ser feito apenas uma vez por inicialização. Observe que não tenho acesso às montagens fstab ou systemd.

A montagem de ligação em si funciona. No entanto, ele está sendo executado em todos os logins . Como posso ter dezenas, centenas de logins na caixa via SSH, isso preenche a tabela de montagem rapidamente. Apenas alguns minutos atrás, a caixa foi inutilizada devido à exaustão de recursos por causa disso.

Detectar uma montagem de ligação existente é fácil, mas com pam_mount.so não vejo um meio de fazer a montagem depender do resultado de, digamos, um script.

Daí a minha pergunta:

  • Como posso impedir que a montagem de ligação seja executada mais de uma vez ou
  • como posso tornar as montagens de ligação repetidas sem operação para evitar que as montagens se acumulem?

Veja também: https://github.com/karelzak/util-linux/issues/448

linux mount
  • 2 2 respostas
  • 471 Views

2 respostas

  • Voted
  1. Best Answer
    sourcejedi
    2018-07-12T08:51:16+08:002018-07-12T08:51:16+08:00

    Gostaria de saber se você está usando o systemd (propagação de montagem por padrão). Parece mais que o dobro do número de montagens de ligação a cada vez. Talvez se comporte melhor com privateas opções de montagem... Ah. Vejo que você pode escrever unbindablecomo uma opção para montar. Se ele aceitar isso, poderá responder à sua pergunta. Desde que pam_mountpermita que uma montagem falhe e não aborte o login.


    Percebo que, por algum motivo, o seu pam_mountnão parece estar funcionando como foi projetado.

    pam_mount mantém uma "contagem de referência" de suas montagens. Por exemplo, se você tiver dois logins ativos ao mesmo tempo, o sistema de arquivos deve ser montado apenas uma vez. Ele é desmontado após o logout de ambas as sessões.

    Se você está impedindo que o sistema de arquivos seja desmontado no momento do logout, você está abusando do pam_mount. Esteja ciente de que isso pode mudar no futuro de alguma forma que interrompa sua configuração.

    • 2
  2. phg
    2018-08-25T00:27:40+08:002018-08-25T00:27:40+08:00

    Depois de passar pelo código pam_mount , acredito que sei o que está acontecendo. A situação decorre principalmente de duas questões:

    • A abordagem pam_mount para detectar volumes já montados é muito simplista.

    • O kernel empilhará alegremente montagens de ligação repetidas umas sobre as outras, mesmo que o caminho de origem e o ponto de montagem sejam os mesmos.

    No repositóriomount.c pam_mount :

    128         xcmp = fstype2_icase(vpt->type) ? strcasecmp : strcmp;
    129         if (source != NULL)
    130                 result = xcmp(vpt->volume, source) == 0;
    131         if (target != NULL)
    132                 result &= strcmp(vpt->mountpoint, target) == 0;
    

    É isso. Os valores de origem e destino são fornecidos pela libmount do util-linux. Infelizmente, libmount é capaz de determinar o caminho de origem original de uma montagem de ligação somente se ele aparecer no arquivo /run/mount/utab. Os pontos de montagem PAM não. Assim, não é suficiente para estender a verificação acima.

    No entanto, para a montagem de ligação

    <volume
      options="bind,nodev,exec,nosuid"
      user="yourstruly"
      mountpoint="/nix"
      path="/mnt/local/nix"
      />
    

    o kernel gera uma entrada da /proc/mountsseguinte forma:

    /dev/mapper/VolGroup00-local /nix ext4 rw,relatime 0 0
    

    onde a fonte obviamente não corresponde ao caminho que especificamos na linha de comando mount(8). Em vez disso, ele fornece o volume subjacente como a origem, fazendo com que a verificação por pam_mount falhe.

    As informações do caminho de origem são perdidas. Um pouco melhor é /proc/self/mountinfo:

    934 654 253:6 /nix /nix rw,relatime shared:33 - ext4 /dev/mapper/VolGroup00-local rw
    

    Também de acordo com a fonte da libmount, o primeiro /nix (arg index 4) corresponde à “raiz da montagem dentro do FS”. (O segundo é o ponto de montagem em VFS.) Assim, o caminho original passado para mount(8) é substituído pela localização dentro do volume. Com o volume sendo montado em /mnt/local, acabamos com apenas /nix. Esse valor pode ser consultado usando uma API ( mnt_table_get_fs_root()), mas é inútil para pam_mount porque o último não retira o ponto de montagem do valor de origem ao realizar a verificação.

    • 1

relate perguntas

  • Existe uma maneira de fazer ls mostrar arquivos ocultos apenas para determinados diretórios?

  • Inicie/pare o serviço systemd usando o atalho de teclado [fechado]

  • Necessidade de algumas chamadas de sistema

  • astyle não altera a formatação do arquivo de origem

  • Passe o sistema de arquivos raiz por rótulo para o kernel do Linux

Sidebar

Stats

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

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

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 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

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 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
    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
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +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
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +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