LoginSignup

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

CentOS6 FTPアップロード時のPermission Deniedについて

【概要】

現在サーバー内のWikiをバックアップする、
シェルスクリプトを作成しています。

【やりたいこと】

Cronでスケジューリングし定期的に動作するもので、
動作としてはWikiのDBをdumpしてWiki本体のディレクトリとともに、
「tar.gz」にて固めて社内のサーバーにFTP接続してアップロードする
というものです。

【問題点】

しかし、FTP接続後に固めたtar.gzのファイルをアップロードを行う場面で、「Permission Denied」と言われてしまいます。
パスは「/home/growi-backup/backup/[バックアップファイル名].tar.gz」です。
以下試したポイント。
・/home配下の関連ディレクトリパーミッションを777にする
  → ダメでした
・SELinuxの確認
  → 無効化済みでした
・rootと一般ユーザーでのスクリプト実行
  → 結果変わらずダメでした
・ポートの確認
  → 対象のポートは既に開放済みでした
・アップロード先の権限確認
  → 権限は十分なものが付与されていました

【エラー内容】

/home/growi-backup/backup/[バックアップファイル名].tar.gz: Permission denied.

【実際のスクリプト内容】

#!/bin/bash

TODAY=`date +"%Y%m%d"`
INSTALL_PATH=/opt/crowi-plus
BACKUP_PATH=/home/growi-backup/backup
GROWI_DB_NAME=crowi
BACKUP_LIFETIME=+90

# ftpコマンドインストール済みであること
FTP_HOST=sample.co.jp
FTP_USER=sampleuser
FTP_PW=sampleuser
FTP_PORT=1121
FTP_BACKUP_DIR=/Backup/Growi

# Backup
#### upload-files
tar -C ${INSTALL_PATH}/public -cf ${BACKUP_PATH}/upload-files.tar uploads
#### db-data
mongodump -d ${GROWI_DB_NAME} --gzip --archive=${BACKUP_PATH}/dbdump.gz
#### Archive-files+db
tar -C ${BACKUP_PATH} -zcvf ${BACKUP_PATH}/${TODAY}_growi-backup.tar.gz upload-files.tar dbdump.gz

#### delete tmp-files
rm -fR ${BACKUP_PATH}/upload-files.tar
rm -fR ${BACKUP_PATH}/dbdump.gz

find ${BACKUP_PATH} -name "*.tar.gz" -mtime ${BACKUP_LIFETIME} -delete

echo "[`date`] Start saving to remote."

# cd ${SAVE_DIR}
ftp -n <<END || error "バックアップファイルのリモートサーバへの保存に失敗しまし た。"
open ${FTP_HOST} ${FTP_PORT}
user ${FTP_USER} ${FTP_PW}
cd ${FTP_BACKUP_DIR}
binary
prompt
put ${BACKUP_PATH}/${TODAY}_growi-backup.tar.gz
END

echo "[`date`] Save to remote is complete."

echo "[`date`] Backup is all complete."
0

2Answer

Comments

  1. @Zauberkugel

    Questioner
    回答ありがとうございます。
    元々SCP派でSCPにて予定していたのですが、今回の案件のクライアントより「FTP環境があるからそっちなら工数削減できるし宜しく。」と言われ・・・(それでいいのかという)

    なのでvsftpはあまり触れたことがなかったので、助かります。
    頂いた話を元にもう少し粘ってみようと思います!

Scriptではなく手動でFTPコマンドを実行するとどうなるでしょうか。
適宜エラーハンドリング、ログ出力されていないとScriptからだけでは原因解析は難しいかもしれません。

例えば

  • ユーザ名を入力した時点でコケる
  • パスワードを入力した時点でコケる
    • 転送先のサーバのvsftpdにてuserlistが指定されてないか確認してください。
    • こちらの方の記事など良さそうです
  • ログインできるけど格納先のパスがない
    • 転送先のサーバのvsftpdにてchrootが指定されていないか確認してください。
  • ファイルputのタイミングでコケる
    • 格納先の権限(は、もう確認済みですね)
    • 格納先の空き容量(i-nodeも忘れずに)

また格納先のvsftpdのログを確認したり、通信をtcpdumpでキャプチャするのも有効です。

0

Your answer might help someone💌