我使用的是 Red Hat 7.2,我需要运行用户守护程序。正如这里所说https://access.redhat.com/solutions/1293513Red Hat 7不支持systemd的用户模式。我的主要目标是启动将由所有者用户使用的单个守护进程的不同实例。任何人都可以建议一些没有 systemd 用户模式的替代方法吗?
答案1
对于大多数用例(例如让用户管理自己的单元文件),RHEL7 的 systemd 219 可以正常工作,您只需启用它即可。例如,适用于 Linux 的 Tableau Server 附带了启用用户实例的用户服务:
# cat /etc/systemd/system/[email protected]
[Unit]
Description=User Manager for UID %i
After=systemd-user-sessions.service
# These are present in the RHEL8 version of this file except that the unit is Requires, not Wants.
# It's listed as Wants here so that if this file is used in a RHEL7 settings, it will not fail.
# If a user upgrades from RHEL7 to RHEL8, this unit file will continue to work until it's
# deleted the next time they upgrade Tableau Server itself.
After=user-runtime-dir@%i.service
Wants=user-runtime-dir@%i.service
[Service]
LimitNOFILE=infinity
LimitNPROC=infinity
User=%i
PAMName=systemd-user
Type=notify
# PermissionsStartOnly is deprecated and will be removed in future versions of systemd
# This is required for all systemd versions prior to version 231
PermissionsStartOnly=true
ExecStartPre=/bin/loginctl enable-linger %i
ExecStart=-/lib/systemd/systemd --user
Slice=user-%i.slice
KillMode=mixed
Delegate=yes
TasksMax=infinity
Restart=always
RestartSec=15
[Install]
WantedBy=default.target
在与实例交互时,.bashrc
您仍然需要 XDG_RUNTIME_DIR :.profile
# cat /home/$(id -un 29575)/.bashrc
#!/bin/bash
[ -z "${XDG_RUNTIME_DIR}" ] && export XDG_RUNTIME_DIR=/run/user/$(id -ru)
# systemctl daemon-reload
# systemctl enable [email protected]
Created symlink from /etc/systemd/system/default.target.wants/[email protected] to /etc/systemd/system/[email protected].
# systemctl start [email protected]
# su -l -s /bin/bash -c "systemctl --user status" $(id -un 29575)
● hostname
State: running
Jobs: 0 queued
Failed: 0 units
Since: Tue 2020-09-22 12:12:48 UTC; 5min ago
CGroup: /user.slice/user-29575.slice/[email protected]
├─18802 /lib/systemd/systemd --user
└─18804 (sd-pam)
答案2
https://access.redhat.com/solutions/1293513,在讨论 --user 之后,表示 RH 一般不支持普通用户停止和启动系统守护进程的能力;然后,它继续展示如何设置 sudo 以允许这些用户成为管理员来启动给定的守护进程(例如以 root 身份运行的日志守护进程)。但这篇文章忽略了 OP 问题的关键,这似乎允许用户控制以该用户身份运行的 systemd 中的进程;不是系统守护进程,而是用户级守护进程。 ——用户触及了它,但文章很快就偏离了主题。
我怀疑他们希望您弄清楚给定服务的副本可以以 root 身份启动,然后删除权限并在命令执行期间成为用户。您需要了解如何在 moin 服务启动时从 root 删除到(例如)testuser ID 和权限。
简而言之:用户需要提升到 root 权限才能启用或控制守护进程,该守护进程本身会作为启动脚本的一部分授予用户权限。许多守护进程(例如 ntpd -u)将在调用过程中删除权限,通过该方法,我们可以让用户控制用户守护进程,而无需使用 RH 本身甚至讨厌的 systemd冰箱艺术的 --user 部分。
是的,它会短暂地成为 root,是的,这是一个安全问题;是的,如果母公司支持其最爱的儿子的最爱的所有部分,那就更好了。但我们有我们所拥有的。