どえらい苦労したので記念に(?)メモしておく。
##やりたいこと
FTPユーザーを新規で作って、特定のディレクトリのみにアクセスさせたい。
よくあるやつですね。
環境依存もありますがめちゃくちゃハマりました。
##やったこと
今回の環境では、目的のディレクトリに直接FTPユーザーにアクセスさせるのはできなかったので、
homeディレクトリ配下にFTPユーザー用のディレクトリを作り、
そこにアップしたものをinotify-toolsでサーバ内転送させるという飛び道具系。
###まず、ユーザー作成とchrootの設定
大体以下記事のような手順です。
(最後の鍵の指定はせず)
https://qiita.com/kooohei/items/5cf0bb6e5c1e372fc55b
実際の順番は違いますが、↑↑ここでめちゃくちゃハマりました。。。
直接/home/sftp_user配下にアップしようとしてPermission deniedがでてアップできなかったのですが、
/home/sftp_user配下にディレクトリを作ってそこにアップすればいいことに気づかず。。。
###転送設定
次に、inotify-toolsを使ったファイル転送設定です。
inotify-tools自体は監視ツールです。
指定したファイルやディレクトリの状況を監視し、変化があれば任意の処理を実行させることができます。
まずインストール。
$ yum install inotify-tools
次に、転送処理をするためのシェルを書きます。
#!/bin/sh
from=【監視(転送元)ディレクトリ】
to=【転送先ディレクトリ】
inotifywait --format "%f" -mq -e CREATE,MODIFY $from | while read file; do
cp -fr $from$file $to$file
echo "[moved] $from$file -> $to$file"
done
inotifywait
でファイルの監視をします。
上記ではCREATE,MODIFY
で追加と更新を監視します。
echo なんちゃら
のところはログ用なので書かなくてもいいです。
その他、指定可能なイベント名など、以下の記事が詳しく書かれています。
https://qiita.com/stc1988/items/464410382f8425681c20
ここまで来ると、あとはこのwatch.shを実行すればいいのですが、
実行するだけだと、ログアウトしたりターミナルを閉じてしまうと監視処理も止まってしまうので、
###転送処理を永続化させる
nohupで永続化させます。
$ nohup sh ./watch.sh &
永続化をやめたいときは、指定したプロセスはps x
で確認できるので、kill 【プロセスID】
して落としましょう。
##余談
実は今回の環境にはPleskが入っており、これまではPlesk経由でFTPユーザーを管理していた模様(多分proftpdかな)。
都合、Pleskを使わなくなったのでPleskごとプロセスを落としたが、これが仇になり・・・proftpdが生きているのかどうかを調べるところから始まり、chrootによるアクセス制御に移行し・・・とかなりめんどくさいことになった。。。
多分他にもっといい方法あるはず。。。