タイトルそのままなのですが、sudoでrsyncするとパーミッションエラーが表示される。
そのユーザに直接なると、エラーにならないという困った現象に遭遇。
$ sudo -u nobody rsync -avz /tmp/a /tmp/b
building file list ... pop_dir /tmp : Permission denied
rsync: writefd_unbuffered failed to write 26 bytes: phase "unknown": Broken pipe
rsync error: error in rsync protocol data stream (code 12) at io.c(515)
わかってみれば、あっけない話なんですが。
調べてみたところ、まさにこの人と同じ現象。
Rsync pop_dir permission denied!
一瞬喜んだものの、誰からもレスがついておらず。自分まで悲しい気分になりましたよ。
結局、ヒントはここに。
どうやら、sudoで指定する実行ユーザが閲覧権限を持っていないディレクトリから実行すると、エラーが発生する様子。
前述の例で言えば、この時の実行ディレクトリはログインユーザのホームディレクトリでした。
そこにはnobodyの閲覧権限が無いので、エラーが出ると。
/tmpの権限は当然ながら充分に持っているので、悩んでしまいました。
実行前に cd / なりで権限のある場所に移っておけばOK。
実行するのがrsyncを含むshellであれば、コード内でrsync前にcdしておけば問題無しです。


コメント