DockerでSFTPの起動

はじめに

今回は /home/docker/sftp の下に環境を作ります
パーミッションの設定をしくじると、繋がらない、書き込みできないので注意が必要

ユーザー情報 users.conf の作成

ユーザー名:パスワードを必要数分記述

foo:123
bar:abc

コンテナ作成ファイル compose.yml の作成

7,8行目の、foo, bar の部分はユーザーの数だけ記述する必要があります

services:
  sftp:
    image: atmoz/sftp:latest
    container_name: sftp
    volumes:
      - /home/docker/sftp/users.conf:/etc/sftp/users.conf:ro
      - /home/docker/sftp/data/foo:/home/foo/upload
      - /home/docker/sftp/data/bar:/home/bar/upload
    ports:
      - "2222:22"
    # 接続に時間ががかる対策
    # https://github.com/atmoz/sftp/issues/341
    ulimits:
      nofile:
        soft: 65536
        hard: 65536
    # 自動起動
    restart: always

共有フォルダの作成

# mkdir -p /home/docker/sftp/data
# chmod -R 777 data

Dockerコンテナの起動

# docker compose up -d
# chmod -R 777 data/*

コンテナ再起動用スクリプト

#! /bin/bash

ContainerName='sftp-server'

# 共有フォルダの作成
mkdir -p /home/docker/sftp/data
chmod 777 data

echo コンテナ削除
docker stop ${ContainerName}
docker rm ${ContainerName}

echo コンテナ作成と起動
docker compose up -d
chmod 777 data/*

echo Finish!

ユーザー情報のパスワードをハッシュ化

パスワードを平文ではなく、ハッシュで保存するには

# openssl passwd -6 パスワード
$6$cMfxL7iiNcFzXg6Y$7PL3BcJ5C4zSbC00OUMN2s0F21wI7NzF4hMH/qW9npR.SoT10uB4wd/QVcrurLsAn7ob4TJieCt24lzrlf1LH.

openssl でハッシュを求め、users.conf に :e をつけて記述します

foo:$6$cMfxL7iiNcFzXg6Y$7PL3BcJ5C4zSbC00OUMN2s0F21wI7NzF4hMH/qW9npR.SoT10uB4wd/QVcrurLsAn7ob4TJieCt24lzrlf1LH.:e
bar:abc

ユーザー追加スクリプトの作成

面倒くさいので、ユーザーを追加し users.conf に追記と、利用者に教えるパスワードを表示するスクリプトを作成
compose.yml のマウントフォルダの追加はされないので、手作業で

#! /bin/bash

# ユーザ名が引数で指定されているか判定
if [ -n "$1" ]; then
    USER="$1"
else
    echo
    echo "sftp用ユーザの追加"
    echo
    echo "  USAGE: ./add_sftp_usr.sh UserName"
    echo
    exit 1
fi

# パスワード生成
PASSWD=$(pwgen 16 1 -cnysB)↲
echo
echo "--- Password ---"
echo "${PASSWD}"

# パスワードのハッシュ生成
HASH=`openssl passwd -6 ${PASSWD}`
# echo "--- Hash ---"
# echo "${HASH}"
echo

# users.confに追加
printf "%s\n" "${USER}:${HASH}:e" >> users.conf

実行結果
同じユーザーを指定すると上書きされず足されていくので、そこも手作業で

# ./add_sftp_usr.sh foo

--- Password ---
9;*P,mA{/s;p3~+k↲

コメント

タイトルとURLをコピーしました