Por que o conteúdo de / dev / shm / está sendo removido automaticamente?

5

Em uma máquina RHEL 7.2, se eu criar uma memória compartilhada POSIX em uma sessão de console, consulte sua presença em /dev/shm de uma sessão SSH, ela mostrará o arquivo de memória compartilhada durante a primeira vez, mas depois disso excluído misteriosamente.

Por fim, dividi o caso de teste nos seguintes passos:

  1. Na caixa 1, faça touch /dev/shm/sample
  2. tailf /dev/shm/sample na caixa1. Será acessível.
  3. Na caixa 2, faça ssh user@box1 "ls -l /dev/shm/"

    -rw------- 1 user user        1 Aug 25 17:12 sample
    
  4. Execute a etapa 3 novamente e, desta vez, não vejo o arquivo.
  5. Na caixa1, tailf mostra que o arquivo foi excluído.

    tail: '/dev/shm/sample' has become inaccessible: No such file or directory
    

Eu observei que todos os arquivos correspondentes a esse usuário específico estão sendo excluídos de /dev/shm , mesmo que seja uma árvore de diretórios, contendo arquivos.

Eu tentei monitorar o arquivo, strace no sshd, etc.

Eu tentei auditar com as seguintes regras, mas sem sorte:

## This file is automatically generated from /etc/audit/rules.d
-D
-b 1024
# monitor unlink() and rmdir() system calls.
-a exit,always -S unlink -S rmdir

Alguém pode explicar o que está errado aqui?

    
por Arun 26.08.2016 / 03:27

2 respostas

10

Da minha resposta :

After hours of searching and reading, I found the culprit. It's a setting for systemd. The /etc/systemd/logind.conf contains default configuration options, with each of them commented out. The RemoveIPC option is set to yes by default. That option tells systemd to clean up interprocess communication (IPC) for "user accounts" who aren't logged in. This does not affect "system accounts"

In my case, the files and directories were being created for a user account, not a system account.

There are two possible solutions:

  1. Create the files with/for a system user -- a user created with the system option (adduser -r or adduser --system)
  2. Edit /etc/systemd/logind.conf, uncomment the line RemoveIPC=yes, change it to RemoveIPC=no, save, and reboot the system

In my case, I went with option #2 because the user was already created.

References:

    
por 17.02.2017 / 18:18
-1

/dev/shm fornece uma exibição da memória compartilhada que aparece como um sistema de arquivos. Existem chamadas do sistema para criar, usar e excluir segmentos de memória compartilhada. A memória compartilhada deve ser usada por programas cooperativos para permitir o acesso a estruturas de dados compartilhadas. Dependendo do modo em que foram criados, os segmentos de memória compartilhada podem ser removidos quando nenhum processo os estiver usando. Isso evita que a memória compartilhada seja perdida se os programas que os utilizam falharem ou saírem sem limpeza.

Se você tiver um kernel que monte /dev/shm , ele deverá ser listado como tal em /etc/mtab . As permissões devem ser drwxrwxrwxt , o que impede que outros usuários, além do root, removam os arquivos. Se os arquivos de um determinado usuário estiverem sendo removidos de /dev/shm , será o usuário ou a raiz que os está removendo. Verifique: processos sendo executados como usuário; cronjobs rodando como usuário; ou scripts executados durante o login / logout.

Tente fazer login várias vezes sem fazer logoff e verificar o arquivo. Se o arquivo ficar por perto, é improvável que um processo seja executado como o usuário ou uma entrada crontab. Se ele for excluído no primeiro logout, é provável que um script de limpeza seja executado no logout.

Se você deseja criar um sistema de arquivos na memória, há o sistema de arquivos tmpfs . Isso é comumente usado para /tmp , /var/run e outros sistemas de arquivos que devem estar vazios após uma reinicialização. Arquivos em tmpfs podem ser paginados para os arquivos de troca se a memória for usada para outros propósitos.

    
por 26.08.2016 / 05:32

Tags