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 に必要なシステム環境#
- Go 1.12 以上が必要
- データベースが必要 (MySQL / PostreSQL / SQLite)
- CLI テストスクリプトを実行する必要がある場合、Python 環境と Request ライブラリも必要です。
- 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—
その他の文書と関連設定の説明: