ユースケース
- 複数のデザイン会社がサイトに静的コンテンツをuploadしたい
- デザイン会社ごとにログインユーザーを分けたい
- 無駄なポートは開けたくない
- php拡張子も許容
- AWS上でAmazon Linux2を使っている
このようなケースの場合、FTP、FTPS、SFTP、SCPが選択肢に挙げられる。ちょっと調べた限りmacだとscpクライアントに良いものが無い。ソフトウェアエンジニア相手ならscpコマンドでええやんと言えるのだが。。。余計なポートも開けたくないし当然暗号化はしないといかん。というわけで、SFTPを選択することになった。
ソリューション
手抜きで恐縮だが、結論から言うと、ほぼ以下でできる。
が、このままだとuploadしたときに 744で書き込まれてしまい、upload後に他のユーザーが上書きできなくなる。Centos7の既定のumaskは022で*1であり、仮に775でuploadしても755に変えられてしまう。
というわけで、umaskを明示的に設定した。
ForceCommand internal-sftp -u 002
これでほかのユーザーでも同じグループに所属していれば上書きできるようになる。
蛇足
本題から外れるので言及しないが、実際にはALBで冗長化しているためuploadしたあとに各ノードにファイルを同期してやる必要もあり、unixユーザーの追加作業もあいまってこの構成は運用負荷が高めである。phpやめようぜと調整し、S3にホストしてIAMを都度振り出すように運用すのがイケてるエンジニアなんだろう。あるいは最近出たNFSのマネージドサービスを使うとか。。。
*1:必ずしもそうではないようだが https://www.pupha.net/archives/151/