为什么 /dev/shm/ 的内容会被自动删除

Aru*_*run 12 linux ssh

在 RHEL 7.2 机器上,如果我在控制台会话中创建一个 POSIX 共享内存,然后/dev/shm从 SSH 会话中查询它的存在,它会在第一次显示共享内存文件,但之后它被神秘地删除了。

最后,我将测试用例分解为以下步骤:

  1. 在 box1 上,做 touch /dev/shm/sample
  2. tailf /dev/shm/sample在 box1 上。它将是可访问的。
  3. 在 box2 上,做 ssh user@box1 "ls -l /dev/shm/"

    -rw------- 1 user user        1 Aug 25 17:12 sample
    
    Run Code Online (Sandbox Code Playgroud)
  4. 再次执行第 3 步,这次我看不到文件。
  5. 在 box1 上,tailf 显示该文件已被删除。

    tail: '/dev/shm/sample' has become inaccessible: No such file or directory
    
    Run Code Online (Sandbox Code Playgroud)

我观察到,与该特定用户对应的所有文件都从 中删除/dev/shm,即使那是包含文件的目录树。

我试图监视文件,sshd 上的 strace 等。

我尝试使用以下规则进行审计,但没有运气:

## 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
Run Code Online (Sandbox Code Playgroud)

有人可以解释这里出了什么问题吗?

Son*_*nny 20

从我的回答

经过数小时的搜索和阅读,我找到了罪魁祸首。这是一个设置systemd。将/etc/systemd/logind.conf包含默认的配置选项,与他们每个人的注释。该 RemoveIPC选项yes默认设置为。该选项告诉 systemd清理未登录的“用户帐户”的进程间通信(IPC)。这不会影响“系统帐户”

就我而言,文件和目录是为用户帐户而不是系统帐户创建的。

有两种可能的解决方案:

  1. 使用/为系统用户创建文件——使用系统选项(adduser -radduser --system)创建的用户
  2. 编辑/etc/systemd/logind.conf,取消注释该行RemoveIPC=yes,将其更改为RemoveIPC=no,保存并重新启动系统

就我而言,我选择了选项 #2,因为用户已经创建。

参考: