SFTP 専用シェルを作る


ユーザーにシェル操作を禁止するために /bin/false などをログインシェルに設定するという手段がありますが, SFTP が使いたい場合に利用できません。 sshd_config をいじるというのが正攻法だと思いますが,ここでは手抜きをして専用シェルを作成して用いるという方法を紹介します。

以下のシェルスクリプトを作成して,

#!/bin/sh

if [ "$1" = "-c" -a "$2" = "/usr/lib/openssh/sftp-server" ]; then
   exec /bin/sh "$@"
else
   exec /bin/false
fi

要するにログイン時の実行コマンドが sftp-server であれば,ログインシェルを /bin/sh であるかのように扱うという方法です。

もちろん細かい設定を行いたければ sshd_config をいじるべきですが,単に ssh でシェル操作を禁止したいという場合はこれで十分だと思います。もちろん,最低限このシェルスクリプトが書き換えられない程度のパーミッション設定くらいはするべきでしょう。

ちなみにユーザーシェルの設定は次のコマンドで行います。

sudo usermod -s /path/to/sftp-only-shell restricted-user