SFTPでchrootは設定しつつも、SSHではログインできないユーザーを作成するメモ書きです。
サーバを複数人で共有で使いたいのですが、こんな感じの要件を満たす必要が出てきました。
- ユーザーはSFTPのみを使用
- そのユーザーアカウントではSSH接続を禁止したい (でもSFTPは使いたい)
- 他人のディレクトリを覗かれないようにchrootしたい
- SFTPユーザーにはパスワード認証でログインしてもらう
- SSHの場合は鍵認証のみに制限する
ちょっと細かいですがやってみましたので、忘れないようにメモをしたいと思います。
目次
スポンサーリンク
SFTPユーザーの作成とホームディレクトリの設定
sftpuser1 は /home/www/worklog.be にchrootを設定。
sftpuser2 は /home/www/example.com にchrootを設定。
上記のように設定したいと思います。まずはシェルに/sbin/nologinを指定してユーザーを作成します。
# mkdir /home/www # useradd -s /sbin/nologin -d /home/www/worklog.be sftpuser1 # useradd -s /sbin/nologin -d /home/www/example.com sftpuser2
次は作成されたホームディレクトリのパーミッションを変更します。
# chmod 755 /home/www/worklog.be # chown root:root /home/www/worklog.be # chmod 755 /home/www/example.com # chown root:root /home/www/example.com
この設定を忘れるとSFTP時にエラーが出てしまいます。(詳細は末尾)
このままだとSFTPで接続してもパーミッション不足で何も出来ないので、必要なディレクトリやファイルを適時作成しておきます。
# mkdir /home/www/worklog.be/htdocs # chown sftpuser1:sftpuser1 /home/www/worklog.be/htdocs
sshd_configの設定
ユーザー周りの設定が終わったら、SFTPでchrootさせる設定をsshd_configに追加します。
# vi /etc/ssh/sshd_config ----- # override default of no subsystems #Subsystem sftp /usr/libexec/openssh/sftp-server <= コメントアウト Subsystem sftp internal-sftp <= 追加 # 下記を追加 Match User sftpuser* ChrootDirectory ~ PasswordAuthentication yes X11Forwarding no AllowTcpForwarding no
変更をしたらsshdを再起動させます。
Match Userの部分で正規表現でユーザーを範囲指定できるので、プレフィックスか何かでSFTP専用ユーザーを識別できるようにしといた方が楽だと思います。
Match User以降に書いた設定でSFTPユーザーの挙動を制御できるので、ここでPasswordAuthentication yesを設定する事によってSFTPユーザーのみのパスワード認証を許可する事ができます。
SFTPでも鍵認証は使えますが、鍵認証って何?って人が相手の場合はやっぱりパスワード認証を使いたいところです。
Subsystemの項はこのように全体設定しなくても、Match User以降で上書き設定できるという情報があるのですが、CentOS6でやったら上手くいかなかったのでこのようにやりました。
これでSSHユーザーのセキュリティは保ちつつ、しっかり制限をしたSFTPユーザーのchroot設定が出来ました。
エラーログ
少しつまづいたポイント等、/var/log/secure に出力されたエラーログと一緒に残しておきます。
error: subsystem: cannot stat…
sshd_configをこう書くとSFTP接続できず、上記のようなエラーログが出力されます。
de default of no subsystems Subsystem sftp /usr/libexec/openssh/sftp-server Match User sftpuser* ChrootDirectory ~ PasswordAuthentication yes X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp
ForceCommandで上書きできるからSubsystemは変更しなくても良いとの情報がありましたがうまく行かず。
これは環境依存なのか…?
bad ownership
ホームディレクトリより上の所有者がrootに設定されていないと出るエラーです。
chown root:rootしておきましょう。
SFTPソフトでPermission denied
SFTPソフトで接続した時にPermission deniedと表示され、ウィンドウに何も表示されないのはディレクトリのパーミッションが不足しているのが原因です。
chmod 755でchrootに設定したディレクトリを変更しておきましょう。
SFTPのchrootについては以上です。