如何阻止 rpcbind 在 Arch Linux 上启动?

如何阻止 rpcbind 在 Arch Linux 上启动?

我的 Arch Linux 的 systemd 会rpcbind自动启动。我必须做什么才能停止systemd这样做?中没有远程文件系统/etc/fstab。我发现 rpcbind 启动的唯一原因是多用户目标需要它,但目录中没有服务。我怎样才能弄清楚它真正启动的原因?

答案1

有一个打开 Arch 跟踪器上的错误报告

你最好的办法是掩盖服务:

systemctl mask rpcbind.service

请参阅 Lennart Poettering 的系列博文,面向管理员的 systemd,第五部分有关屏蔽的详细信息:

3. 您可以屏蔽服务。这就像禁用一项服务,但只是使用类固醇。它不仅确保服务不再自动启动,甚至确保服务甚至无法再手动启动。这是 systemd 中的一个隐藏功能,因为它并不常用,并且可能会让用户感到困惑。但具体做法如下:

$ ln -s /dev/null /etc/systemd/system/ntpd.service
$ systemctl daemon-reload
通过符号链接服务文件,/dev/null您可以告诉 systemd 永远不要启动有问题的服务并完全阻止其执行。存储的单元文件/etc/systemd/system会覆盖/lib/systemd/system具有相同名称的单元文件。前一个目录是管理员区域,后一个目录是包管理器的区域。通过在您中安装符号链接/etc/systemd/system/ntpd.service,请确保 systemd 永远不会读取上游提供的服务文件/lib/systemd/system/ntpd.service

systemd 将识别符号链接的单元/dev/null并将其显示为屏蔽的。如果您尝试手动启动此类服务(例如通过 systemctl start),则会失败并出现错误。

答案2

如果不存在,wanted/rpcbind.service它很可能不会直接启动,而是通过套接字激活启动。您可以通过在状态输出行中查找indirect而不是static在状态输出行中查找来判断它是否是最近启动的(请注意,会自动将 添加到单元名称中,因为它未包含在命令行中):Loadedsystemctl.service

$ systemctl status rpcbind
● rpcbind.service - RPC bind service
   Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; indirect; vendor preset: enabled)
   Active: active (running) since Fri 2017-03-31 15:39:29 WIB; 37min ago
 Main PID: 6763 (rpcbind)
   CGroup: /system.slice/rpcbind.service
           └─6763 /sbin/rpcbind -w

无论如何,您可以检查是否启用了套接字激活:

$ systemctl status rpcbind.socket
● rpcbind.socket - RPCbind Server Activation Socket
   Loaded: loaded (/usr/lib/systemd/system/rpcbind.socket; disabled; vendor preset: enabled)
   Active: active (listening) since Fri 2017-03-31 15:39:29 WIB; 37min ago
   Listen: /var/run/rpcbind.sock (Stream)
           [::]:111 (Stream)
           0.0.0.0:111 (Stream)

(在上面的示例中,我禁用了该单元,但尚未停止rpcbind在收到请求时启动的现有侦听器。)

执行以下命令应该杀死两者并确保它们永远不会启动:

$ systemctl disable rpcbind.service rpcbind.socket
$ systemctl stop rpcbind.service rpcbind.socket

然后状态检查应该产生如下内容:

$ systemctl status rpcbind.service rpcbind.socket
● rpcbind.service - RPC bind service
   Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; indirect; vendor preset: enabled)
   Active: inactive (dead) since Fri 2017-03-31 16:17:05 WIB; 49s ago
 Main PID: 6763 (code=exited, status=0/SUCCESS)

[...log messages...]
Mar 31 16:17:05 myhost systemd[1]: Stopped RPC bind service.

● rpcbind.socket - RPCbind Server Activation Socket
   Loaded: loaded (/usr/lib/systemd/system/rpcbind.socket; disabled; vendor preset: enabled)
   Active: inactive (dead) since Fri 2017-03-31 16:17:48 WIB; 6s ago
   Listen: /var/run/rpcbind.sock (Stream)
           [::]:111 (Stream)
           0.0.0.0:111 (Stream)

[...log messages...]
Mar 31 16:17:48 myhost systemd[1]: Closed RPCbind Server Activation Socket.
Mar 31 16:17:48 myhost systemd[1]: Stopping RPCbind Server Activation Socket.

答案3

对于 systemd,停止启动时启动的服务的方法是使用该disable选项,因此在本例中您将使用该命令systemctl disable rpcbind,下面是我在 Fedora 20 系统上运行时看到的输出示例;

chris::test::07:08:29-> sudo systemctl disable rpcbind
rm '/etc/systemd/system/multi-user.target.wants/rpcbind.service'
rm '/etc/systemd/system/sockets.target.wants/rpcbind.socket'

相关内容