systemd에서 단위 디렉터리를 화이트리스트에 추가하는 방법

systemd에서 단위 디렉터리를 화이트리스트에 추가하는 방법

단위에는 다양한 옵션(예: 서비스)이 있습니다.체계. 그 중 3개는 ReadWriteDirectories, ReadOnlyDirectories이라고 합니다 InaccessibleDirectories. 저는 가상 머신에서 Debian 8.5를 사용하고 있습니다. 일부 (최신?) 버전의 systemd에서는 ReadWritePaths, ReadOnlyPaths및 이라고 합니다 InaccessiblePaths. 이 옵션을 사용하여 액세스할 수 있는 디렉토리를 화이트리스트에 추가할 수 있습니까?

특정 디렉토리에만 액세스할 수 있는 것으로 알려진 애플리케이션이 있습니다. 이 디렉토리에 대한 액세스를 제한하고 싶습니다. 하지만 이 디렉터리를 지정하는 데 사용하면 ReadWritePaths아무런 효과가 없는 것 같습니다. 이것맨페이지설명하다

ReadWriteDirectories=에 나열된 디렉터리는 네임스페이스 내에서 액세스할 수 있으며 외부와 동일한 액세스 권한을 갖습니다.

그러나 이 옵션에 지정되지 않은 디렉터리는 동일한 방식으로 액세스할 수 있는 것으로 보입니다. 지정되지 않은 모든 콘텐츠에 대한 액세스를 거부하는 방법은 무엇입니까? 아니면 내 시스템이 작동하지 않는 걸까요? 새 버전의 맨페이지를 제외한 모든 항목을 블랙리스트에 추가 하는 것이 가능하다고 생각할 수도 있습니다 InaccessibleDirectories=/(옵션이 호출됨) InaccessiblePaths.

InaccessiblePaths=에 나열된 항목은 네임스페이스 내의 프로세스에 액세스할 수 없으며 ReadWritePaths= 또는 ReadOnlyPaths=로 지정된 항목을 포함한 다른 마운트 지점은 계산되지 않을 수 있습니다.

ReadWriteDirectories그렇다면 디렉터리 화이트리스트를 사용 하고 ReadOnlyDirectories설정하는 것이 가능한가요 ? 가능하지 않다면, ReadWriteDirectories아무것도 하지 않는 것처럼 보이면서도 왜 존재하는 걸까요?

답변1

ReadWritePaths그 유사품은 다음 옵션과 함께 사용할 때만 정말 유용합니다.블랙리스트특정 경로. 애플리케이션이 특정 경로에만 액세스할 수 있어야 한다는 것을 알고 있는 경우 다음을 조합하여 수행할 수 있습니다.

  • ProtectSystem=strict특정 디렉토리를 설정 하고 사용을 위해 화이트리스트에 추가하세요 ReadWritePaths.
  • ReadOnlyPaths특정 디렉토리를 설정 하고 화이트리스트에 추가하세요 ReadWritePaths. 를 사용하여 이 작업을 수행하면 /수행하는 작업의 상위 집합을 수행합니다 ProtectSystem(아마도 원하지 않는 /dev, /proc 및 /sys도 제한함). PrivateDevices, ProtectKernelTunables및를 사용하여 ProtectControlGroups이러한 디렉터리를 보호 할 수도 있습니다 .

답변2

최근 문서에 따르면 (링크 1,링크 2), 2018년 이후:

InaccessiblePaths=파일 시스템 계층 구조에서 네임스페이스 내의 프로세스와 그 아래에 있는 모든 프로세스는 에 나열된 경로에 액세스할 수 없습니다. ReadWritePaths=, ReadOnlyPaths=또는 BindPaths=그 안에 중첩할 수 없기 때문에 이는 예상보다 더 제한적일 수 있습니다 . BindReadOnlyPaths=더 유연한 옵션을 보려면 를 참조하세요 TemporaryFileSystem=.

[ TemporaryFileSystem=]는 장치가 호출하는 프로세스와 관련이 없는 파일이나 디렉터리를 숨기는 데 사용할 수 있으며 필요한 파일이나 디렉터리는 BindPaths=및 또는 와 결합하여 계속 액세스 할 수 있습니다 BindReadOnlyPaths=.

따라서 원하는 동작을 얻을 수 있습니다.

[Service]
TemporaryFileSystem=/
BindPaths=/var/readwrite
BindReadOnlyPaths=/var/readonly

답변3

구체적으로 문의하셨기 때문에읽기 권한 화이트리스트:

다음을 사용하여 이를 달성할 수 있습니다 InaccessiblePaths.

[Service]
...
InaccessiblePaths=/
ReadOnlyPaths=/etc/myapp.conf

바라보다시스템 실행(5)

관련 정보