내 백업 사용자가 모든 UMASK, 사용자, 그룹 및 권한을 사용하여 모든 프로세스에서 생성된 모든 파일에 액세스할 수 있도록 하려면 어떻게 해야 합니까?

내 백업 사용자가 모든 UMASK, 사용자, 그룹 및 권한을 사용하여 모든 프로세스에서 생성된 모든 파일에 액세스할 수 있도록 하려면 어떻게 해야 합니까?

root내 Duplicati 컨테이너는 . 이는 파일 생성 및 프로세스 실행 관점에서 매우 유용하며, 혼란과 불필요한 권한을 최소화합니다. 그러나 이는 동일한 파일 시스템/OS에 로컬로 백업된 소스 파일에 액세스할 때 의도하지 않은 부작용이 있습니다. 이제 기본적으로 모든 파일에 액세스할 수 없습니다. 그것도 훌륭하지만...

...파일이 다르게 생성됩니다. 이는 임의의 다양한 파일(권한) 구성을 사용하여 파일과 디렉터리를 생성하는 프로세스(사용자 지정 Dockerfile 및 공개 레지스트리의 컨테이너에서도 실행됨)에 의해 생성됩니다.

완벽한 세상에서 Duplicati UID는 모든 소스 파일 생성 프로세스에서 사용되는 모든 그룹에 있을 것입니다. 그러나 일부 프로세스, 컨테이너 등은 이상하거나 제어할 수 없는 UMASK, 기본 파일 생성 모드를 사용하고 심지어 일부 파일은 의도적으로 사용자 소유자 이상의 읽기 권한을 갖지 않습니다.

그래서 내 질문은 다음과 같습니다다른 사용자로 컨테이너에서 Duplicati를 계속 실행하면서 마치 root(로컬) 파일 시스템에 있는 것처럼 실행하여 모든 파일을 백업할 수 있도록 하려면 어떻게 해야 합니까?

분명히 chown각 실행 전에 권한이나 파일을 다시 부여할 수 있지만 이로 인해 특정 권한이 있을 때만 실행되는 일부 앱이 중단되거나 다른 보안 모범 사례가 중단될 수 있습니다.




2022-08-09 17:58 (UTC+1) 편집:@telcoM 덕분에 custom-cont-init.d스크립트를 만들었습니다(사용 중인 Linuxserver.io 컨테이너에서 제공).

apt update && apt install -y libcap2-bin && apt clean
setcap cap_dac_override=+ep /usr/bin/mono-sgen

cap_dac_override이제 다음을 사용하여 프로세스에서 적절한 기능이 켜지는 것을 볼 수 있습니다 getpcaps.

root@dc42a0e3e0d7:/# ps auxnww
    USER     PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
       0       1  0.0  0.0    200    28 ?        Ss   Aug08   0:00 /package/admin/s6/command/s6-svscan -d4 -- /run/service
       0      16  0.0  0.0    204    16 ?        S    Aug08   0:00 s6-supervise s6-linux-init-shutdownd
       0      18  0.0  0.0    196     4 ?        Ss   Aug08   0:00 /package/admin/s6-linux-init/command/s6-linux-init-shutdownd -c /run/s6/basedir -g 3000 -C -B
       0      27  0.0  0.0    204    20 ?        S    Aug08   0:00 s6-supervise s6rc-oneshot-runner
       0      28  0.0  0.0    204    20 ?        S    Aug08   0:00 s6-supervise s6rc-fdholder
       0      35  0.0  0.0    180     4 ?        Ss   Aug08   0:00 /package/admin/s6/command/s6-ipcserverd -1 -- /package/admin/s6/command/s6-ipcserver-access -v0 -E -l0 -i data/rules -- /package/admin/s6/command/s6-sudod -t 30000 -- /package/admin/s6-rc/command/s6-rc-oneshot-run -l ../.. --
       0     471  0.0  0.0    204    20 ?        S    Aug08   0:00 s6-supervise duplicati
   20031     473  0.0  0.1 146324 14756 ?        Ssl  Aug08   0:00 mono Duplicati.Server.exe --webservice-interface=any --server-datafolder=/config --webservice-allowed-hostnames=*
   20031     481 17.6  2.1 2273276 175044 ?      Sl   Aug08 249:35 /usr/bin/mono-sgen /app/duplicati/Duplicati.Server.exe --webservice-interface=any --server-datafolder=/config --webservice-allowed-hostnames=*
       0     501  0.0  0.0   6872   492 pts/0    Ss+  Aug08   0:00 /bin/bash
       0    1278  0.0  0.0   7040  3556 pts/1    Ss   17:33   0:00 /bin/bash
       0    1315  0.0  0.0   8468  2796 pts/1    R+   17:52   0:00 ps auxnww
root@dc42a0e3e0d7:/# cat /config/custom-cont-init.d/
21-extra-group-id       31-setcap-dac-override
root@dc42a0e3e0d7:/# cat /config/custom-cont-init.d/31-setcap-dac-override
apt update && apt install -y libcap2-bin && apt clean
setcap cap_dac_override=+ep /usr/bin/mono-sgen
root@dc42a0e3e0d7:/# getpcaps 471
471: = cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap+ep
root@dc42a0e3e0d7:/# getpcaps 473
473: = cap_dac_override+ep
root@dc42a0e3e0d7:/# getpcaps 481
481: = cap_dac_override+ep

첫 번째 소규모 백업은 이전 파일 시스템 권한 오류 없이 테스트되었지만 더 크거나 느린 백업의 경우에는 여전히 해당 백업을 얻습니다. 내가 원하는 방식으로 작동하도록 하기 위해 내가 놓친 다른 것이 있습니까?


2022-08-30 13:09 (UTC+1) 편집: 허용된 답변이 작동할 수도 있지만 저에게는 작동하지 않았습니다. 저는 Docker Swarm에서 이 컨테이너를 실행하고 있습니다 The cap_add and cap_drop options are ignored when deploying a stack in swarm mode.Docker Compose 참조 문서.

답변1

이 문제는 Linux 기능을 사용하여 가장 잘 해결될 수 있습니다(참고자료 참조 man 7 capabilities).

백업 작업의 경우 CAP_DAC_READ_SEARCH볼 수 있는 파일 시스템 네임스페이스의 모든 부분에 존재하는 모든 것을 읽고 백업할 수 있으면 충분할 수 있습니다. 복구 작업의 경우 CAP_DAC_OVERRIDE어디에서나 쓸 수 있어야 CAP_CHOWN하고 소유권, 권한 및 ACL을 복구 CAP_FOWNER할 수 있어야 합니다 .CAP_FSETID

Docker에는 컨테이너의 기능을 구성할 수 있는 도구가 있습니다. 이것이 바로 이러한 도구의 용도입니다.

관련 정보