루트 권한 없이 프로세스를 실행하려면 DynamicUser=를 사용하거나 systemd에서 User=가 있는 정적 사용자를 사용할 수 있습니다. DynamicUser에 대한 자세한 설명은 다음 블로그 게시물에서 찾을 수 있습니다.http://0pointer.net/blog/dynamic-users-with-systemd.html
하지만 어느 것이 더 안전한가요? DynamicUser가 동적 사용자를 사용하고 사용자가 시스템 사용자를 필요로 한다는 점 외에 DynamicUser와 User의 정확한 차이점은 무엇입니까?
답변1
DynamicUser
더 안전한 이유는 다음과 같습니다.
ProtectSystem=strict
/dev/
: API 파일 시스템 하위 트리 및 를/proc/
제외하고 전체 파일 시스템 계층 구조는 읽기 전용으로 마운트됩니다/sys/
.ProtectHome=read-only
: 디렉토리/home/
와 이 유닛을 호출하는 프로세스가 읽기 전용으로 설정되어 있습니다/root
./run/user
PrivateTmp=yes
:실행 중인 프로세스에 대한 새 파일 시스템 네임스페이스를 설정하고 네임스페이스 외부의 프로세스에서 공유되지 않는 프라이빗 디렉터리/tmp/
와 디렉터리를 마운트합니다./var/tmp/
이는 임시 파일 처리에 대한 액세스를 보호하는 데 유용하지만 프로세스 간 공유가/tmp/
불가능 해집니다/var/tmp/
. 이 기능을 활성화하면 서비스가 중지된 후 해당 디렉터리에서 서비스에 의해 생성된 모든 임시 파일이 삭제됩니다.RemoveIPC=yes
: 장치의 사용자 및 그룹 프로세스가 소유한 모든 System V 및 POSIX IPC 개체는 장치가 중지될 때 삭제된 것처럼 실행됩니다.
이러한 설정을 사용할 때 명시적으로 설정하여 이러한 설정을 모방하여 User=
효과적으로 동일한 보호를 받을 수 있습니다.
더 나은 접근 방식 DynamicUser=
은 서비스 인스턴스를 만드는 것입니다. 당신 foo.socket
이 어떤 용도로 사용 한다고 가정하십시오 Accept=yes
. 이 경우 누군가가 소켓에 연결할 때마다 foo@%i.service
새 소켓이 생성됩니다. 각 인스턴스에는 DynamicUser=
사용되는 경우 /tmp
공유되는 자체 네임스페이스와 디렉터리가 있습니다.User=
답변2
User
설정하더라도 options 을 지정하는 데 방해가 되는 것은 없습니다 DynamicUser=true
.
~에 따르면문서( User=
강조):
지정된 사용자/그룹명으로 사용시
DynamicUser=
서비스 시작 시 동적으로 할당되고, 서비스 종료 시 해제됩니다.— 정적으로 할당되지 않은 경우(아래 참조). 사용되지 않는 경우DynamicUser=
지정된 사용자 및 그룹은 서비스 시작 전에 사용자 데이터베이스에 정적으로 생성되어야 합니다. 예를 들어 부팅 또는 패키지 설치 시 적용되는 sysusers.d(5) 도구를 사용합니다. 사용자가 존재하지 않으면 프로그램 호출이 실패합니다.
DynamicUser=
그러나 에는 제한이 있다.문서:
...지정되고 해당 이름을 가진 정적 그룹이 존재하는 경우
User=
해당 이름을 가진 정적 사용자가 이미 존재해야 합니다. 마찬가지로Group=
지정하고 해당 이름의 정적 사용자가 존재하는 경우 해당 이름의 정적 그룹이 이미 존재해야 합니다.
기본적으로 이는 옵션을 사용하여 사용자 정의를 지정하고 사용자와 동일한 이름을 가진 그룹이 존재하는 경우 사용자 자체가 시스템에 생성되어야 함을 의미 User
합니다 DynamicUser
. 사용자 정의를 지정하는 경우에도 마찬가지입니다 Group
.
전임자. 을 지정 User=docker
하고 docker
시스템에 그룹이 존재하는 경우 docker
해당 이름을 사용하려면 사용자도 이미 존재해야 합니다.
위의 제한 사항을 해결하는 방법은 기본적으로 시스템에 이미 존재하는 사용자나 그룹을 사용하지 않도록 하는 것입니다.
너무 길어요.
귀하의 질문에 대답하면 보안이 향상되지만 또는 를 사용할지 여부에 대한 질문 DymamicUser=
은 아닙니다 . A에는 실제 사용자가 연결될 수 있지만 해당 사용자는User
DynamicUser
DynamicUser
User
아니요예다음에 추가또는 ./etc/passwd
/etc/group