执行su命令时如何防止systemd将进程移动到其他cgroups

问题描述

Systemd 为 PAM 模块提供了 pam_systemd.so,对于很多命令,比如 su 命令,pam_systemd.so 会被调用,进程会被调用移至 systemd 管理的 cgroup。

通常,如果我们将 bash 进程从 cgroup 下的 systemd 创建的相关会话 /sys/fs/cgroup/systemd/user.slice 移动到其他某个 cgroup,那么 systemd 会将新的 bash 进程移动到一个新组中执行session-cxxxx.scope命令后在/sys/fs/cgroup/systemd/user.slice下命名为su

我们想为自己创建的一组进程管理cgroup,如何在不禁用PAM模块中的pam_systemd的情况下防止systemd做这样的例程。

例如

认的 cgroup 根路径是 /sys/fs/cgroup

当手动创建pid为12345和会话ID为99999的'bash'进程时,systemd将在session-99999.scope下创建目录/sys/fs/cgroup/systemd/user.slice/user-0.slice/并将进程12345放入其中。

对于cpu或者memory等其他cgroup,进程12345会放在这些以子系统为界的cgroup下的eache user.slice目录下

如果我们将pid为12345的进程从session-99999.scope移动到其他cgroup中,例如:

我们将其从 /sys/fs/cgroup/systemd/user.slice/user-0.slice/session-99999.scope 移至 /sys/fs/cgroup/systemd/

对于 cpu 组,我们将其从 /sys/fs/cgroup/cpu/user.slice 移动到 /sys/fs/cgroup/my_test_group

然后我们执行'su xxx'命令,创建一个pid为13333的新bash,然后

Systemd 将创建一个名为 session-cxxxxx.scope 的新会话组,例如 session-c10010.scope 下的 /sys/fs/cgroup/systemd/user.slice/user-0.slice/,并将新进程 13333 放入其中。

对于 cpu 组,新进程 13333 将放入 user.slice 而不是 my_test_group。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)