VTRyo Blog

一歩ずつ前に進むブログ

rsyncでファイルのパーミッションがコピーされない件

f:id:vtryo:20180714203138j:plain 前回の記事で、rsync -aを指定するとパーミッションまでまるっとコピーしてくれるという話を書いた。

blog.vtryo.me

パーミッションがコピーされない(怒)

cronにrsyncコマンドを仕込み、実行させる。コンテンツを同期して、同期先のファイルを確認するが、なぜか意図したパーミッションになっていない。

オプションをあえて変更して叩いてみても、所有者:vtryo グループ:vtryoになってしまう。

f:id:vtryo:20180714202447j:plain

↑www-data www-dataでコピーしてほしい。

なんのための-aなんだよと頭を抱えた。

実行ユーザが肝

同期先のファイルが実行したユーザ名に割り当てられる→ユーザがsshして同じファイルを作成した

という挙動になるのか、他ユーザでcronを叩くとそのユーザ名でファイルが同期された。

Qiitaあたりで記事を探すと、あるではないか答えが!

rsyncオプション

owner ファイル所有者をそのままコピー (root のみ有効)

rootのみ!?!?

つまり、cronでコマンドを叩くユーザはrootでないと、パーミッションまで同期してくれなかった。

そもそも一般ユーザで実行しようとしていた理由

rootで実行するとなると、EC2にrootログインしなければならないと思ったからだ。

sshd_configでPermitRootLoginをyesにするのは、気が引ける。その結果、なんとか一般ユーザでやりたかった。

blog.vtryo.me

セキュリティグループがしっかりしてれば問題ない

とはいえ、このEC2にはセキュリティグループが割り当てられているし、踏み台経由でしかサーバにログインできないようにしてある。

  • sshの許可を限定しておく(EC2間のみ、踏み台からのみ)
  • 踏み台のsshポート番号はデフォルトから変えておく

とりあえずこれでパーミッションごと同期できた。