0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ディレクトリ制限付きSFTP設定(鍵+パスワード認証)

Posted at

単にSFTPで接続するだけであれば、SSHの設定さえされていれば接続できてしまうため、
特に問題になることはありません。

ですが、

  • 「SFTP接続するユーザーに制限を付けたい。」
  • 「SFTPユーザーに特定のディレクトリ以外を見せたくない。」

など、要件がある場合、適切な制限を設ける必要があります。

特に、システム管理者以外にSFTP経由でサーバーアクセスを許可する場合は、
誤操作や情報漏洩を防ぐためにも、明確な制御が不可欠です。

まあそもそも、本来SSHとSFTPは用途が異なるものとして、
明確に管理を分けるべきですよね。

ということで、備忘録も兼ねて設定方法をまとめておこうと思います。

ユーザー&ディレクトリ作成

グループの作成(必要であれば)

sudo groupadd sftpusers

ユーザー作成&パスワード設定

# ユーザー作成(サーバーログイン不可設定)
sudo user add -m -d /home/sftpuser -s /sbin/nologin -g sftpusers sftpuser

# パスワード設定
sudo passwd sftpuser

chroot用 ディレクトリ構成・設定

# chroot用のディレクトリは root 所有である必要があります。
sudo mkdir -p /home/sftpuser/upload
sudo chown root:root /home/sftpuser
sudo chmod 755 /home/sftpuser

# アップロード用のディレクトリを sftpuser に付与
sudo chown sftpuser:sftpusers /home/sftpuser/upload

chrootとはなんぞや?
chroot は UNIX/Linuxにおけるセキュリティ機能の1つで
「特定のプロセスに見せるルートディレクトリ(/)を変更する」仕組みです。

つまり、今回は sftpuser のルートディレクトリ(最上位階層)を
/ ではなく、 /home/sftpuser にしてしまう設定をしています。

こうすることで sftpuser からは /home/sftpuser/ として扱われるので
それより上の階層、例えば /home とか /etc などには
アクセスはもちろん中身を見ることも出来なくなります。

公開鍵認証の設定

秘密鍵・公開鍵ペアの作成

# 鍵ペア作成(RSA方式、2048bit)
ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa_sftpuser

実行すると以下が表示されるかと思います。
対話形式でパスフレーズが求められるので、必要に応じて設定してください。
空Enterで無設定にすることも出来ます。


Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):   # 任意。空Enterで無設定でもOK
Enter same passphrase again:
Your identification has been saved in /home/yourname/.ssh/id_rsa_sftpuser.
Your public key has been saved in /home/yourname/.ssh/id_rsa_sftpuser.pub.

すると、現在の場所に2つファイルが作成されます。

  • id_rsa_sftpuser    秘密鍵  (SFTPアクセスする人にのみ渡す。他人には渡さない)
  • id_rsa_sftpuser.pub  公開鍵  (サーバー側に置いておく)

この後、認証キー(authorized_keys)に配置するので
id_rsa_sftpuser.pub(公開鍵)の中身をコピーしておきましょう。

.sshディレクトリ作成

sudo mkdir -p /home/sftpuser/.ssh
sudo chmod 700 /home/sftpuser/.ssh

公開鍵設定

公開鍵配置

# vimでなくても、viでもnanoでも。
sudo vim /home/sftpuser/.ssh/authorized_keys

# ここで先程作成した ~/.ssh/id_rsa_sftpuser.pubの中身を貼り付けて保存します。

パーミッション設定

sudo chmod 600 /home/sftpuser/.ssh/authorized_keys
sudo chown -R sftpuser:sftpusers /home/sftpuser/.ssh

sshd設定

sshd_config編集

sudo vim /etc/ssh/sshd_config

末尾に以下を追加します。

# 一般設定(必要に応じて。既存の設定と重複しないように気を付けて下さい。)
PasswordAuthentication yes    # パスワード認証を有効化
PubkeyAuthentication yes      # 公開鍵認証を有効化
ChallengeResponseAuthentication no    # チャレンジ/レスポンス認証を無効化
PermitRootLogin no                    # rootユーザーのログインを無効化

# sftpuser 用の制限
Match User sftpuser
    ChrootDirectory /home/sftpuser    # sftpuserのroot(最上位)ディレクトリを/home/sftpuserに
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no
    PermitTTY no    # SSHターミナルを完全に無効化
    PasswordAuthentication yes    # パスワード認証を有効化
    PubkeyAuthentication yes      # 公開鍵認証を有効化
    AuthenticationMethods publickey,password    # パスワード・公開鍵認証の両方成功しないとログイン不可

上記、設定の ChrootDirectorysftpuser にとっての最上位ディレクトリ
Chrootとして扱うディレクトリを指定しています。

設定確認と再起動

# 設定確認
sudo sshd -t

# エラーが無ければ再起動して設定を反映
sudo systemctl restart sshd

動作確認

sftpコマンドやWinSCPなどのFTPソフトを使って確認してください。
以下が確認ポイントです。

  • 秘密鍵+パスワードの両方があって接続できること
  • chrootより上の階層にアクセスできないこと
  • TeraTermなどのSSHターミナルから接続が出来ないこと

まとめ

chrootの設定など始めは面食らうかもしれませんが
仕組みや考え方がわかればそれほど難しくないかなと思います。

SSH接続はなじみ深いですが、SFTPはなかなか機会がないと設定することないですよね。
仕組みや流れだけでも頭の片隅に残ればと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?