dockerのrsyncデーモンに対する権限拒否の問題

dockerのrsyncデーモンに対する権限拒否の問題

フォローしようとしています。この記事非常に単純なrsyncデーモンDockerコンテナの実行に問題があります。 rsyncデーモンを含むすべてをrootとして実行する必要があるにもかかわらず、ファイルの受信に失敗し、エラー13権限が拒否されました。ここでは、問題を簡単に再現できるように簡単な例を用意していますが、問題を再現するためにネットワークを必要としません。

❯ cat rsync_daemon.Dockerfile      
FROM alpine
RUN apk add --no-cache rsync \
    && mkdir -p /opt/share \
    && echo "testcontent" > /opt/share/testfile \
    && echo "[share]" > /etc/rsyncd.conf \
    && echo "path = /opt/share" >> /etc/rsyncd.conf  \
    && echo "hosts allow = *" >> /etc/rsyncd.conf \
    && echo "read only = false" >> /etc/rsyncd.conf

CMD rsync --daemon --port 9999 && while sleep 1; do /bin/true; done
❯ mkdir context # create empty dir to use as docker context
❯ docker build -t rsync_manual -f rsync_daemon.Dockerfile context

ビルドプロセスは事故なく進行し、準拠していることを確認できます。

docker run -d --rm --name rsyncd_manual rsync_manual

分離されたコンテナは正常に実行され開始されます。

docker exec -it rsyncd_manual sh

これは対話型シェルをコンテナに挿入してテストします。デーモンには問題はありませんが、デーモンはファイルを受け取ることができません。

/ # ls -la /opt/
total 12
drwxr-xr-x    1 root     root          4096 Sep 30 02:21 .
drwxr-xr-x    1 root     root          4096 Sep 30 02:22 ..
drwxr-xr-x    2 root     root          4096 Sep 30 02:21 share
/ # ls -la /opt/share/
total 12
drwxr-xr-x    2 root     root          4096 Sep 30 02:21 .
drwxr-xr-x    1 root     root          4096 Sep 30 02:21 ..
-rw-r--r--    1 root     root            12 Sep 30 02:21 testfile
/ # ls
bin    dev    etc    home   lib    media  mnt    opt    proc   root   run    sbin   srv    sys    tmp    usr    var
/ # rsync -r rsync://localhost:9999/share dest
/ # ls -la dest
total 12
drwxr-xr-x    2 root     root          4096 Sep 30 02:23 .
drwxr-xr-x    1 root     root          4096 Sep 30 02:23 ..
-rw-r--r--    1 root     root            12 Sep 30 02:23 testfile
/ # cat dest/testfile
testcontent
/ # mkdir src
/ # echo 'testdata' > src/testdata
/ # rsync -r src rsync://localhost:9999/share
rsync: [generator] recv_generator: mkdir "/src" (in share) failed: Permission denied (13)
*** Skipping any contents from this failed directory ***
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1327) [sender=3.2.5]
/ # ps aux
PID   USER     TIME  COMMAND
    1 root      0:00 /bin/sh -c rsync --daemon --port 9999 && while sleep 1; do /bin/true; done
    8 root      0:00 rsync --daemon --port 9999
   79 root      0:00 sh
 1382 root      0:00 sleep 1
 1383 root      0:00 ps aux

何が起こっているのか知っている人はいますか?

答え1

うん、これは変です…

chmod g+w /opt/share/それが働くことを許可しなさい。しかし、他のテスト(ホストのディレクトリをrsyncデーモン共有にバインドする上記のテストよりも少し単純化されていません)ではこれを行う必要がありますchmod o+w

/opt/share/私が知りたいのは、Perms rsyncがあるので書くことができない理由ですdrwxr-xr-xrsync私が知っている限り、Rsyncはrootとして実行されます。私がそう言うのは間違っていますか?

関連情報