vsftpd ログを解析して、正常にアップロードされたファイルに対して追加の処理を実行しようとしています。
username
ユーザーになるので、ホームディレクトリを作成し
filename
ます。これはログのファイル名です。「/ foo.txt」などの不安定な結果が得られますが、それは問題ではありません
#!/bin/sh
sudo tail -F /var/log/vsftpd.log | while read line; do
if sudo echo "$line" | grep -q 'OK UPLOAD:'; then
username=$(echo "$line" | cut -d" " -f8 | sed 's/\[\(.*\)\]/\1/')
filename=$(echo "$line" | cut -d, -f2 | sed 's/^[ \t]*//')
home="/home/vsftpd/$username"
if sudo ls "$home$filename" &> /dev/null; then
# do something with $filename
echo "some text"
fi
fi
done
ファイルがアップロードされると、「some text」というテキストが期待されます。代わりに、それが報告するのを見ることができます:
ls: cannot access /home/vsftpd/user1"/foo.txt": No such file or directory
シェルでコマンドを実行できますが:
$ sudo ls /home/vsftpd/user1"/foo.txt"
/home/vsftpd/user1/foo.txt
アクセス許可に関連していると推測していますが、sudoとして実行しており、ディレクトリにフルアクセスを許可しています。何か案は?