AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 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

如果已安装,则防止登录时绑定安装

  • 772

登录时,会创建一个绑定挂载。在~/.pam_mount.conf.xml:

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

每次启动只需执行一次。请注意,我无权访问 fstab 或 systemd 挂载。

绑定安装本身可以工作。但是,它会在每次登录时执行。由于我可以通过 SSH 登录到该框的数十个,数百个,这会很快填满挂载表。就在几分钟前,由于资源耗尽,该盒子无法使用。

检测现有的绑定挂载很容易,但是使用pam_mount.so 我看不到使挂载取决于脚本的结果的方法。

因此我的问题是:

  • 如何防止绑定挂载被多次执行,或者
  • 如何使重复绑定挂载成为无操作以防止挂载累积?

另见:https ://github.com/karelzak/util-linux/issues/448

linux mount
  • 2 2 个回答
  • 471 Views

2 个回答

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

    我想知道您是否正在使用 systemd (默认安装传播)。每次绑定安装的数量似乎增加了一倍以上。也许它在安装选项中表现得更好private......啊。我看到你可以写作unbindable为挂载的选项。如果它接受,那么它可以回答你的问题。只要pam_mount允许挂载失败并且不会中止登录。


    我注意到由于某种原因,您pam_mount似乎没有按设计工作。

    pam_mount 保留您的坐骑的“参考计数”。例如,如果您一次有两个活动登录,则文件系统应该只挂载一次。它在两个会话注销后被卸载。

    如果您在注销时阻止文件系统被卸载,那么您就是在滥用 pam_mount。请注意,它将来可能会以某种方式改变,从而破坏您的设置。

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

    经过pam_mount代码后,我相信我知道发生了什么。这种情况主要源于两个问题:

    • 检测已安装卷的pam_mount方法过于简单。

    • 即使源路径和挂载点相同,内核也会愉快地将重复的绑定挂载堆叠在一起。

    从pam_mount 存储mount.c库中:

    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;
    

    而已。source和target的值由 util-linux的libmount提供 。不幸的是,只有当绑定挂载出现在/run/mount/utab. PAM 挂载点没有。因此,扩展上述检查是不够的。

    但是,对于绑定安装

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

    内核生成/proc/mounts如下条目:

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

    其中源显然与我们在 mount(8) 命令行中指定的路径不匹配。相反,它将底层卷作为源,导致pam_mount的检查失败。

    源路径信息丢失。更好的是 /proc/self/mountinfo:

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

    同样根据 libmount 源 ,第一个 /nix(arg 索引 4)对应于“FS 内挂载的根”。(第二个是 VFS 中的挂载点。)因此,传递给mount(8)的原始路径被卷内的位置所取代。随着卷的安装,/mnt/local我们最终只有/nix. 可以使用 API ( mnt_table_get_fs_root()) 查询此值,但它对pam_mount没有用,因为后者在执行检查时不会从源值中删除挂载点。

    • 1

相关问题

  • 有没有办法让 ls 只显示某些目录的隐藏文件?

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

  • 需要一些系统调用

  • astyle 不会更改源文件格式

  • 通过标签将根文件系统传递给linux内核

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

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

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve