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-*
보안이 염려되는 경우에만 이 작업을 수행하지 마세요.