JoeZhao

跨出界

Hey, I’m JoeZhao, a software engineer, and a gamer.

SFTPGo インストール設定ガイド

SFTPGo
フル機能で高度に構成可能な SFTP サーバーソフトウェア
完全な機能を持ち、高度に構成可能な SFTP サーバーソフトウェア

これは GitHub 上の作者によるこのソフトウェアの紹介で、実際に使用してみると名副実際で、私のニーズに合っています。しかし、公式サイトのインストールガイドがあいまいなので、自分の試行錯誤の過程を記録しておきます。

以下の操作手順は、全く新しいインストールのUbuntu 18.04.2 LTS (Bionic Beaver)オペレーティングシステムに基づいており、理論的には Debian でも適用可能です。

私は独立した SFTP サーバーを構成したいだけなので、SFTPGo を利用してアカウント管理を行うため、MySQL や PostreSQL のようなデータベースは使用せず、SQLite 3.x を選びました。

バージョン:0.9.0
バージョン:0.9.4-dev

インストール#

SFTPGo に必要なシステム環境#

  1. Go 1.12 以上が必要
  2. データベースが必要 (MySQL / PostreSQL / SQLite)
  3. CLI テストスクリプトを実行する必要がある場合、Python 環境と Request ライブラリも必要です。
  4. Git コマンド
$ sudo add-apt-repository ppa:longsleep/golang-backports
$ sudo apt update
$ sudo apt install golang-go sqlite3 python3 python3-pip git

SFTPGo のインストール#

非常に簡単で、以下のコマンドを実行するだけです:

$ go get -u github.com/drakkan/sftpgo

その後、あなたの$GOPATH/bin/の下にsftpgoコマンドを見つけます。もしあなたが自分の$GOPATHディレクトリを知らない場合は、go envを実行して環境変数を確認してください。

これでインストールは完了ですが、具体的に使用するには簡単な設定が必要です。

PS:国内の場合、ネットワークが通じないことがあるかもしれません。私の方法は、外部のマシンを見つけて、インストールが完了した後に~/goディレクトリを完全にパッケージ化して戻して上書きすることです。

SFTPGo サービスの設定#

設定ファイル#

ソフトリンクまたは$GOPATH/bin/sftpgo/usr/bin/ディレクトリに移動して、システムがsftpgoコマンドを見つけられるようにします。以下はソフトリンクの方法です:

$ sudo ln -s $GOPATH/bin/sftpgo /usr/bin/sftpgo

次に、設定ファイルフォルダーを作成し、SFTPGo の設定を追加します:

$ sudo mkdir -p /etc/sftpgo && cd /etc/sftpgo
$ sudo wget https://raw.githubusercontent.com/drakkan/sftpgo/master/sftpgo.conf

附:sftpgo.confファイルの設定内容

{
  "sftpd": {
    "bind_port": 2022,
    "bind_address": "",
    "idle_timeout": 15,
    "max_auth_tries": 0,
    "umask": "0022",
    "banner": "",
    "upload_mode": 0,
    "actions": {
      "execute_on": [],
      "command": "",
      "http_notification_url": ""
    },
    "keys": [],
    "enable_scp": false,
    "kex_algorithms": [],
    "ciphers": [],
    "macs": [],
    "login_banner_file": "",
    "setstat_mode": 0,
    "enabled_ssh_commands": ["md5sum", "sha1sum", "cd", "pwd"]
  },
  "data_provider": {
    "driver": "sqlite",
    // あなたのsqliteデータベースのパス
    "name": "/etc/sftpgo/sftpgo.db",
    "host": "",
    "port": 5432,
    "username": "",
    "password": "",
    "sslmode": 0,
    "connection_string": "",
    "users_table": "users",
    "manage_users": 1,
    "track_quota": 2,
    "pool_size": 0,
    "users_base_dir": "",
    "actions": {
      "execute_on": [],
      "command": "",
      "http_notification_url": ""
    },
    "external_auth_program": "",
    "external_auth_scope": 0
  },
  "httpd": {
    "bind_port": 8080,
    "bind_address": "127.0.0.1",
    // 以下の3つの設定は0.9.4バージョンで追加され、Webコントロールパネルを提供します
    "templates_path": "/var/www/sftpgo/templates",
    "static_files_path": "/var/www/sftpgo/static",
    "backups_path": "/var/www/sftpgo/backups"
  }
}

Web コントロールパネルの設定#

cd ~
git clone git@github.com:drakkan/sftpgo.git
mkdir -p /var/www/sftpgo
cp ~/sftpgo/templates /var/www/sftpgo/
cp ~/sftpgo/static /var/www/sftpgo/
cp ~/sftpgo/backups /var/www/sftpgo/

データベース#

データベースファイルを追加します。どこにでも置けますが、デモのために/etc/sftpgoディレクトリに一緒に置きました。

$ cd /etc/sftpgo
$ sudo wget https://raw.githubusercontent.com/drakkan/sftpgo/master/sql/sqlite/20190706.sql
$ sudo wget https://raw.githubusercontent.com/drakkan/sftpgo/master/sql/sqlite/20190728.sql
$ sudo wget https://raw.githubusercontent.com/drakkan/sftpgo/master/sql/sqlite/20191230.sql
$ sudo sqlite3 sftpgo.db < 20190706.sql
sqlite> .exit
$ sudo sqlite3 sftpgo.db < 20190728.sql
sqlite> .exit
$ sudo sqlite3 sftpgo.db < 20191230.sql
sqlite> .exit

全く新しいインストールの場合は、以下の操作を直接実行すれば大丈夫です:

$ cd /etc/sftpgo
$ sudo rm sftpgo.db
$ sudo sqlite3 sftpgo.db
sqlite> CREATE TABLE "users" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "filters" text NULL, "username" varchar(255) NOT NULL UNIQUE, "password" varchar(255) NULL, "public_keys" text NULL, "home_dir" varchar(255) NOT NULL, "uid" integer NOT NULL, "gid" integer NOT NULL, "max_sessions" integer NOT NULL, "quota_size" bigint NOT NULL, "quota_files" integer NOT NULL, "permissions" text NOT NULL, "used_quota_size" bigint NOT NULL, "used_quota_files" integer NOT NULL, "last_quota_update" bigint NOT NULL, "upload_bandwidth" integer NOT NULL, "download_bandwidth" integer NOT NULL, "expiration_date" bigint NOT NULL, "last_login" bigint NOT NULL, "status" integer NOT NULL);
sqlite> .table
users
sqlite>

これでデータベースは完成しました。
注:SQLite の操作に関する説明は、SQLite チュートリアル | 菜鳥チュートリアルを参照してください。

SFTPGo の Systemd サービスの設定#

$ cd /etc/systemd/system
$ sudo wget https://raw.githubusercontent.com/drakkan/sftpgo/master/init/sftpgo.service
$ sudo systemctl daemon-reload
$ sudo systemctl enable sftpgo.service
$ sudo systemctl start sftpgo.service
$ sudo systemctl status sftpgo.service

これでsftpgo.serviceの実行状態を確認できます。

sftpgo.serviceの内容:

[Unit]
Description=SFTPGo sftp server
After=network.target

[Service]
User=root
Group=root
Type=simple
WorkingDirectory=/etc/sftpgo
Environment=SFTPGO_CONFIG_DIR=/etc/sftpgo/
Environment=SFTPGO_LOG_FILE_PATH=
EnvironmentFile=-/etc/sftpgo/sftpgo.env
ExecStart=/usr/bin/sftpgo serve
KillMode=mixed
Restart=always
RestartSec=10s

[Install]
WantedBy=multi-user.target

これで、私たちの SFTPGo ソフトウェアはすでに起動しており、127.0.0.1:8080のサービスが開始されました。これを通じて提供されるREST APIを使用して SFTP のユーザー管理作業を行うことができます。

注:セキュリティ上の理由から、このサービスは内部ネットワークからのみアクセス可能です。外部ネットワークに開放したい場合は、自分で Nginx や Caddy などのツールを使ってプロキシを構築してください。

SFTPGo REST API#

公式には操作パネルは提供されておらず、Python に基づく簡単な CLI ツールのみが提供されています。関連説明はここで確認できます:sftpgo_api_cli

ここで簡単にデモを行います:

$ cd ~
$ sudo mkdir -p /data/sftp/
$ wget https://github.com/drakkan/sftpgo/raw/master/scripts/sftpgo_api_cli.py
$ pip3 install requests
$ python3 sftpgo_api_cli.py add_user test_username --password "test_pwd" --home_dir="/data/sftp/test_username" --uid 33 --gid 1000 --max_sessions 2 --quota_size 0 --quota_files 0 --permissions * --upload_bandwidth 100 --download_bandwidth 60
$ python3 sftpgo_api_cli.py get_users

これで簡単にtest_usernameを作成し、ディレクトリを/data/sftp/test_usernameに制限しました。

新しいバージョンでは公式に簡単な操作パネルが提供されています:

ローカルで直接アクセス:http://127.0.0.1:8080、Web インターフェースでユーザーの作成、削除、状態確認などの操作ができます。

SFTP クライアントFileZillaを使って、正常に接続できるか、アップロードできるかをテストできます。

—EOF—

その他の文書と関連設定の説明:

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。