前回の記事で、rsync -aを指定するとパーミッションまでまるっとコピーしてくれるという話を書いた。
パーミッションがコピーされない(怒)
cronにrsyncコマンドを仕込み、実行させる。コンテンツを同期して、同期先のファイルを確認するが、なぜか意図したパーミッションになっていない。
オプションをあえて変更して叩いてみても、所有者:vtryo グループ:vtryoになってしまう。
↑www-data www-dataでコピーしてほしい。
なんのための-aなんだよと頭を抱えた。
実行ユーザが肝
同期先のファイルが実行したユーザ名に割り当てられる→ユーザがsshして同じファイルを作成した
という挙動になるのか、他ユーザでcronを叩くとそのユーザ名でファイルが同期された。
Qiitaあたりで記事を探すと、あるではないか答えが!
owner ファイル所有者をそのままコピー (root のみ有効)
rootのみ!?!?
つまり、cronでコマンドを叩くユーザはrootでないと、パーミッションまで同期してくれなかった。
そもそも一般ユーザで実行しようとしていた理由
rootで実行するとなると、EC2にrootログインしなければならないと思ったからだ。
sshd_configでPermitRootLoginをyesにするのは、気が引ける。その結果、なんとか一般ユーザでやりたかった。
セキュリティグループがしっかりしてれば問題ない
とはいえ、このEC2にはセキュリティグループが割り当てられているし、踏み台経由でしかサーバにログインできないようにしてある。
- sshの許可を限定しておく(EC2間のみ、踏み台からのみ)
- 踏み台のsshポート番号はデフォルトから変えておく
とりあえずこれでパーミッションごと同期できた。