Arch Linuxでrpcbindが起動するのを防ぐ方法は?

Arch Linuxでrpcbindが起動するのを防ぐ方法は?

私のArch LinuxのSystemdがrpcbind自動的に起動します。systemdこれを止めるにはどうすればよいですか?にはリモートファイルシステムはありません/etc/fstab。 rpcbindが起動する唯一の理由は、マルチユーザーターゲットには必要ですが、ディレクトリにサービスがないためです。実際に始まる理由をどうやって知ることができますか?

答え1

一つあるArch Trackerでバグを表示して開く

最良の方法はサービスを隠すことです。

systemctl mask rpcbind.service

Lennart Poetteringのブログ記事シリーズをご覧ください。管理者向けシステム、パート5ブロックの詳細:

3. サービスをブロックできます。これはサービスを無効にするのと同じですが、ステロイドです。サービスが自動的に開始されないようにするだけでなく、サービスが手動で開始されることもありません。これは通常使用されず、ユーザーに混乱を与える可能性があるため、systemdの隠し機能です。ただし、具体的な方法は次のとおりです。

$ ln -s /dev/null /etc/systemd/system/ntpd.service
$ systemctl daemon-reload
サービスファイルをシンボリックリンクすると、/dev/nullsystemdに問題のサービスを開始せずに実行を完全に防止するように指示できます。保存したユニットファイルは、同じ名前のユニットファイルを/etc/systemd/system上書きします。/lib/systemd/system前者のディレクトリは管理者領域であり、後者のディレクトリはパッケージ管理者領域です。シンボリックリンクをインストールすることで、/etc/systemd/system/ntpd.servicesystemdがアップストリームに提供されているサービスファイルを読み取らないようにしてください/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'

関連情報