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'

관련 정보