アプリケーション開発ポータルサイト
ServerNote.NET
カテゴリー【Debian
【Debian】SFTP専用のsshdを別ポートでデュアルに起動する
POSTED BY
2023-01-08

提携会社から自社のサーバへ定期的にファイルをアップロードしてもらう場合、SFTP(SSHプロトコルを用いたファイル転送)がよく使われる。
しかしSSHポート22番は通常利用しているので、ポート番号を変更してsshdをもう1つ立ち上げ、それをSFTPファイルアップロード専用に開放する方法。

1、専用アカウントのセットアップ

専用グループ「partner」を作成。ここでは2000番とする。

vigr
partner:x:2000:

vigr -s
partner:!::

提携先ユーザの作成。ここではteikei01(2002番)とする。

vipw
teikei01:x:2002:2000:Teikei User:/sftp-home/teikei01:/bin/bash

vipw -s
teikei01:*:18270:0:99999:7:::

提携先ユーザのホームディレクトリ作成。ここでは/sftp-home/teikei01とする。
このディレクトリの所有者はrootでなくてはならない。

sudo -s
cd /
mkdir -p sftp-home/teikei01

提携先ユーザがファイルをアップロードするディレクトリを掘る。(uploadsとする)
このディレクトリの所有者はteikei01とし、誰でも読み書き可能とする。

cd sftp-home/teikei01
mkdir uploads
chown teikei01:partner uploads
chmod a+w uploads

提携先ユーザのパスワードを設定する。

passwd teikei01

2、ポートを変更したsshdのデュアル立ち上げ

従来システムにあるsshdはそのままに、設定ファイル・起動ファイルすべて別に用意した別ポートsshdを立ち上げる。
ここでは新ポート番号 22522番 とする。

★設定ファイル作成

cd /etc/ssh
cp -p sshd_config sshd_22522_config
vi sshd_22522_config

<変更箇所>

Port 22522
PermitRootLogin no
PasswordAuthentication yes
PermitEmptyPasswords no
PidFile /var/run/sshd_22522.pid
Subsystem       sftp    internal-sftp
Match User teikei01
        ChrootDirectory /sftp-home/teikei01
        ForceCommand internal-sftp

ポートを22522、pidを別に、パスワード認証をOKとし、teikei01ユーザが来たらホームディレクトリに閉じ込める設定。

★自動起動サービスデフォルトファイル作成

cd /etc/default
cp -p ssh ssh_22522
vi ssh_22522

<変更箇所>

SSHD_OPTS="-f /etc/ssh/sshd_22522_config"

★自動起動スクリプトファイル作成

cd /etc/init.d
cp -p ssh ssh_22522
vi ssh_22522

<変更箇所>

# Provides:           sshd_22522

if test -f /etc/default/ssh_22522; then
     . /etc/default/ssh_22522

# /run/sshd は /run/sshd_22522 へすべて変更(↓sed例)
sed 's/\/run\/sshd/\/run\/sshd_22522/g'

# "sshd" は "sshd_22522" へすべて変更(↓sed例)
sed 's/"sshd"/"sshd_22522"/g'

status_of_proc -p /run/sshd_22522.pid /usr/sbin/sshd sshd_22522 && exit 0 || exit $?

Usage: /etc/init.d/ssh_22522

★自動起動サービスファイル作成

cd /lib/systemd/system
cp -p ssh.service ssh_22522.service
vi ssh_22522.service

<変更箇所>

EnvironmentFile=-/etc/default/ssh_22522
Alias=sshd_22522.service

これにて準備完了、ssh_22522の起動が可能なはず。

# 起動
systemctl start ssh_22522

# ステータス表示
systemctl status ssh_22522

# 終了
systemctl stop ssh_22522

# 自動起動登録
systemctl enable ssh_22522 # /etc/systemd/system/sshd_22522.serviceが生成される

# 自動起動解除
systemctl disable ssh_22522

これ以降は/etc/init.dでも操作可能

/etc/init.d/ssh_22522 {start|stop|restart}

提携先に教えるのは、ユーザー名 teikei01、パスワード、ホスト名、ポート番号(22522)で、
sftpでログインしてもらって、uploadsディレクトリにファイル置いといてください、という感じになる。

ファイアウオール内の場合ルーターを適切に設定すること。表向きは22番とする場合、22番を開放し、
このサーバーの22522番へポートフォワードする設定になる。

3、テストの要点

・まずsshで接続を試みて、コンソールを握れないことを確かめる。握れてしまったらセキュリティホールになる。

ssh -p 22522 teikei01@127.0.0.1
teikei01@127.0.0.1's password:
This service allows sftp connections only.
Connection to 127.0.0.1 closed.

となればOK。

・次にsftp接続して、uploadsディレクトリにファイルputができるかどうか確認。自分のhomeのtest.txtをアップしてみる。

sftp -oPort=22522 teikei01@127.0.0.1
teikei01@127.0.0.1's password:
Connected to 127.0.0.1.
sftp> dir
uploads
sftp> cd uploads
sftp> lcd /home/hogeuser
sftp> put test.txt
Uploading test.txt to /uploads/test.txt
sftp> dir
test.txt
sftp> quit

などとなればOK。

※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
【WEBMASTER/管理人】
自営業プログラマーです。お仕事ください!
ご連絡は以下アドレスまでお願いします★

【キーワード検索】