서비스가 시작되기 전에 존재하지 않는 시스템 동적 사용자로 인해 발생하는 순환 종속성을 어떻게 처리합니까?

서비스가 시작되기 전에 존재하지 않는 시스템 동적 사용자로 인해 발생하는 순환 종속성을 어떻게 처리합니까?

나는 dnscrypt-proxy를 다음과 같이 원합니다.동적 사용자루트가 아닌. 그러나 또한 dnscrypt-proxy업스트림 DNS 제공자에 연결할 수 있도록 사용자를 지정하는 nftables에서 방화벽 규칙을 사용하고 싶습니다 .

이제 문제는 nftables네트워크가 시작되기 전에 실행되기를 원한다는 것입니다. 이는 괜찮고 필요한 일이지만 사용자가 dnscrypt-proxy존재하지 않는다고 불평합니다.

서비스 dnscrypt-proxy는 네트워크가 가동된 후에만 실행되므로 사용자는 네트워크가 가동된 후에만 생성됩니다. 이를 처리하는 표준/가장 좋은 방법은 무엇입니까?

  • 동적 사용자 대신 고정 사용자를 지정 dnscrypt-proxy하고 언급된 다른 보안 옵션을 설정해 보아야 할까요?여기수동으로?

  • nftables의 사용자 이름이 아닌 다른 것으로 서비스를 감지해야 합니까?

  • dnscrypt-proxy내 시스템에서 수동으로 사용자를 생성한 다음 systemd가 이미 존재하므로 삭제하지 않고 이를 사용할 수 있습니까 ?

  • 부팅할 때마다 nftables 이전에 실행되는 서비스를 생성하고 해당 사용자를 생성한 다음 dnscrypt 서비스가 중지되면 systemd에서 해당 사용자를 삭제해야 합니까?

방화벽이 이미 실행 중이고 dnscrypt 서비스가 중지되면 어떻게 되나요? 규칙 세트에 언급된 사용자 ID가 더 이상 존재하지 않기 때문에 방화벽이 충돌하거나 어떤 종류의 문제가 발생할 수 있습니까?

답변1

에서 답을 찾은 것 같아요 man 5 systemd.exec. 이 DynamicUser=설정은 시스템의 기존 정적 사용자와 함께 원활하게 실행됩니다.

구성된 이름에 대해 정적으로 할당된 사용자 또는 그룹이 이미 존재하는 경우 해당 사용자 또는 그룹이 사용되며 동적 사용자/그룹은 할당되지 않습니다.

DynamicUser이는 모든 암시적 보안 설정을 한 번에 설정하고 사용자에게 지속되도록 허용하는 것으로 보입니다 . nftables에서 이 사용자를 참조하고 싶기 때문에 이것이 의미가 있는 것 같습니다.

그래서 내가 한 일은:

# systemctl stop dnscrypt-proxy.socket
# systemctl stop dnscrypt-proxy.service
# useradd --user-group --system dnscrypt-proxy
# systemctl edit dnscrypt-proxy.service

그리고 다음을 추가하세요:

[Service]

   DynamicUser   = yes
   User          = dnscrypt-proxy
   Group         = dnscrypt-proxy

구성 파일을 저장하고 서비스와 소켓을 다시 시작하십시오.

# systemctl daemon-reload 
# systemctl start dnscrypt-proxy.service

관련 정보