서비스에서 PrivateTmp=true를 사용할 때 서비스 ID는 어디에서 나오나요?

서비스에서 PrivateTmp=true를 사용할 때 서비스 ID는 어디에서 나오나요?

systemd 서비스를 구성하면 PrivateTmp=true서비스가 개인 tmp디렉터리를 사용하게 됩니다. 대신 /tmp이러한 서비스는 다음과 같은 디렉터리를 사용합니다.

/tmp/systemd-private-94ebb0a353a34259b6c794fe503c35f8-colord.service-Rb11Zg/tmp

94ebb0a353a34259b6c794fe503c35f8시작 ID( /proc/sys/kernel/random/boot_id)이고 그 뒤에 오는 6자리 ID는 무엇입니까 service-? 어떤 파일에 저장되어 있나요?

답변1

systemd-private 디렉터리 이름 끝에 있는 6개의 임의 문자는 디렉터리 이름이 고유하고 생성 시 기존 디렉터리와 충돌하지 않도록 하기 위한 것입니다. systemd v245부터 이는 고유한 임시 디렉터리를 생성하고 고유성을 보장하기 위해 임의의 접미사를 생성하는 setup_one_tmp_dir()함수 src/core/namespace.c호출 입니다.mkdtemp()mkdtemp()

특정 장치에 대한 현재 임시 디렉터리 경로를 systemd에서 직접 추출하는 방법을 찾지 못했지만, 정말로 필요한 경우 다음 두 단계를 통해 해당 정보를 얻을 수 있습니다.

  • PID를 실행 systemctl show some.service -p MainPID하고 추출합니다(또는 셀에 있는 한 프로세스의 PID를 얻습니다).
  • 관심 /proc/ThePID/mountinfo있는 설치를 검색 하고 거기에서 경로를 추출하십시오./tmp/var/tmp

기계 장치 조합에 대해 여러 개의 systemd-private 디렉토리가 존재하는 경우에만 이 작업을 수행해야 합니다. systemd가 어떤 이유로든 실행이 중지된 장치에 대해 이러한 디렉터리를 삭제하기 때문에 이는 그 자체로는 드문 경우입니다. 물론 누군가가 시스템화된 개인 디렉터리를 만들어 혼란을 줄 수도 있으므로 systemd-private-$bootID-some.service-*보안이 염려되는 경우에만 이 작업을 수행하지 마세요.

관련 정보