我创建了一些基本有效的系统服务:
位置:
/etc/systemd/system/multi-user.target.wants/publicapi.service
内容:
[Unit]
Description=public api startup script
[Service]
Type=oneshot
RemainAfterExit=yes
EnvironmentFile=-/etc/environment
WorkingDirectory=/home/techops
ExecStart=/home/techops/publicapi start
ExecStop=/home/techops/publicapi stop
[Install]
WantedBy=multi-user.target
当我尝试在命令行中以techops用户身份重新启动服务时,得到以下输出:
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to start 'publicapi.service'.
Multiple identities can be used for authentication:
1. Myself,,, (defaultuser)
2. ,,, (techops)
Choose identity to authenticate as (1-2):
我希望只有技术人员才能重新启动服务,并且我希望以技术人员身份登录时不出现此提示。我怎样才能做到这一点?
我读到polkit-1或sudoers有不同的方法,但是我不确定。
[UPDATE] 2019-01-27 4:40 pm
感谢您对Thomas和Perlduck的全面回答。它帮助我提高了对systemd的了解。
根据在没有密码提示的情况下启动服务的方法,我很抱歉我没有真正强调真正的问题:
实际上,对我来说最重要的是,除了techops之外,没有其他用户可以停止或启动该服务。但是至少使用前两种方法,我仍然可以运行,service publicapi stop
并且==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
再次获得提示。当我选择默认用户并知道密码后,就可以停止所有服务。我想拒绝该用户执行此操作,即使该用户具有密码。重要的背景信息,以更好地理解为什么这对我来说是更重要的部分:
defaultuser是唯一暴露于ssh的用户,但是该用户无法执行其他任何操作(除非您拥有其他用户的密码,否则请更改为其他用户) 。但是此刻,他可以启动或停止服务,但是该用户不能这样做。
如果有人获得defaultuser的密码并通过ssh登录,则此刻他可以停止所有服务。这就是我的意思,“我希望只有技术人员才能重新启动服务”。抱歉,我最初提出的问题不那么准确。我认为,嘲笑技术用户可能会绕过此问题,但事实并非如此。问题本身是没有密码提示就不运行命令。(当我执行时,作为techops用户,我可以轻松地做到这一点/home/techops/publicapi start
)。问题本身就是阻止defaultuser启动这些服务。
我希望任何解决方案都能做到这一点。
我从托马斯的方法开始。sudo的方法适用于我不想按执行说明的命令执行时询问用户密码的问题,例如
sudo systemctl start publicapi.service
sudo systemctl stop publicapi.service
第二种方法不适用于我。如果没有密码提示==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
,我将无法启动该服务,并且当我拥有该用户的密码时,我可以以defaultuser身份登录。
使用第三种方法,该服务甚至不再在启动过程中启动,因此我不确定这种方法是否完全适合我。我什至不能用systemctl enable publicapi.service
它导致以下错误:
Failed to enable unit: Unit file mycuisine-publicapi.service does not exist.
当我将所有服务移回/ etc / systemd / system /并执行时,不会发生该错误systemctl enable publicapi.service
。然后该服务在启动时再次启动。
所有这些方法都会或多或少地帮助绕过techops用户的密码提示,但是当我运行service publicapi stop
或systemctl stop publicapi
使用defaultuser时,如果我有密码,则可以停止服务。但是我的目标是完全阻止defaultuser启动或停止服务。
/etc/sudoers
文件是否有该用户的参考。
systemctl --user ...
用户techops
身份而不是以root 用户身份运行。无论是我的建议还是@PerlDuck的建议,都没有授予sudo
您defaultuser的任何权限,而只授予了techops用户。