systemd의 시스템 장치(사용자가 작동하는 장치(기본값))의 경우 systemd가 사용자와 그룹을 서비스에 동적으로 할당하여 샌드박싱을 구현하도록 systemctl --system
지정할 수 있습니다 .DynamicUser=yes
그러나 읽을 때수동사용자 단위( )에서 작동하는지 여부와 방법에 대한 언급을 찾을 수 없습니다 systemctl --user
. 그래서 내 질문은 다음과 같습니다
DynamicUser
사용자 단위로 사용할 수 있나요 ?- 그렇다면 정확히 어떻게 처리됩니까(즉, 시스템 장치에서 사용하는 것과 비교하여 차이점/특이점은 무엇입니까)?
공식적이거나 평판이 좋은 출처의 문서가 바람직하지만, 사용할 수 없는 경우도 이해할 수 있습니다. 미리 감사드립니다.
답변1
DynamicUser=yes
나는 사용자 단위에 별 의미가 없다는 점에서 @Iarsks의 의견에 동의합니다 .
분명히 사용자를 생성하거나 전환할 수는 없습니다. 귀하의 조직이 사용자 조직이어야 하는 경우에도 이를 원하지 않습니다.
그렇다면 왜 단위 DynamicUser=
에 추가합니까 --user
? 당연한 대답은 "보안에 좋다고 들었기 때문이다"일 것이다. 이런 경우에는 무엇인지 생각해보고 DynamicUser=
의미가 있는 부분을 선택하세요.
결정하는 데 도움이 되는 두 가지 리소스는 다음과 같습니다.
- 개발자의 기능 설명:http://0pointer.net/blog/dynamic-users-with-systemd.html
man systemd.exec
:https://www.freedesktop.org/software/systemd/man/systemd.exec.html
DynamicUser=
--user
버스에 적합한 다양한 기능을 활성화합니다 . 다음 기능을 켜는 것을 고려할 수 있습니다.
RemoveIPC=yes
. 장치가 정지되면 해당 사용자/그룹에 속한 모든 IPC가 파기되므로 주의하세요.--user
해당 버스에서 다른 서비스를 실행하지 않는 한 이는 아마도 좋은 일입니다 .NoNewPrivileges=yes
비밀번호 없는 구성이나 기능을RestrictSUIDSGID=yes
악용하는 스크립트를 방지합니다 . 이 설정은sudo
사용자 모드나 시스템 모드에서 실행될 때 암시적으로 적용됩니다 .User=
RestrictSUIDSGID=yes
NoNewPrivileges=yes
ProtectSystem=strict
ProtectHome=read-only
서비스가 임의의 파일 시스템 위치에 쓰는 것을 방지 합니다 . 서비스가 특정 콘텐츠에 액세스할 수 있도록 하려면 에서 해당 경로를 지정합니다ReadWritePaths=
. 또는 다음 몇 가지 옵션을 사용하여 이와 같은 임시 경로를 만듭니다. 이 기능 은ProjectHome=
권한이 없는 사용자 네임스페이스를 사용할 수 있는 경우에만 사용자 버스에 사용할 수 있습니다.PrivateTmp=yes
:/tmp
다른 서비스에서 쓸 수 없는 비공개 계정을 만듭니다. 임시 파일도 자동으로 정리됩니다. 이는 권한이 없는 사용자 네임스페이스를 사용할 수 있는 경우 사용자 버스에만 사용할 수 있습니다.RuntimeDirectory=
:사용자/그룹이 소유하고 장치가 종료되면 자동으로 삭제되는 쓰기 가능한 런타임 디렉터리를 생성합니다.StateDirectory=
,CacheDirectory=
LogsDirectory=
이러한 특정 목적을 위해 쓰기 가능한 디렉토리를 할당하십시오.