[CentOS] sftpサーバ(OpenSSH)でchrootする件

FTPじゃ暗号されなくていやーんとなってきたのでsftpを調査
sftpといってもSSHが外部に公開されるので攻撃されたら困るので、sftpユーザはchrootすることとシェルでログインできないようにする設定

/etc/ssh/sshd_configの最後ぐらいに追記

Match User test-*
  ChrootDirectory ~
  ForceCommand internal-sftp
  #ログを/var/log/secureに落としたい場合
  #ForceCommand internal-sftp -f local5 -l INFO

 
sftpを利用するユーザは「test-*」の命名規則にする
ログイン後chrootされて、「/upload/」 フォルダが読み書き可能
「/」はownerがrootのため、読み込みのみで書き込みはできない
のようにする場合は、以下のような感じ。

adduser test-sftp01
chown root:root /home/test-sftp01/
chmod 755 /home/test-sftp01/
mkdir /home/test-sftp01/upload/
chown test-sftp01:test-sftp01 /home/test-sftp01/upload/

 
chrootしたディレクトリのOwnerがrootでないと以下のようなエラーとなる
/var/log/secure

 fatal: bad ownership or modes for chroot directory component "/home/test-sftp01/" [postauth]

 
sftpでchrootに設定しているユーザがSSHで繋ごうとすると以下のようなメッセージで接続拒否する

This service allows sftp connections only.

 
 
<追記>
CentOS6の場合
(openssh-server-5.3p1-123.el6_9)

#Subsystem      sftp    /usr/libexec/openssh/sftp-server
Subsystem       sftp    internal-sftp

として、大本のsftpのSubsystemを切り替えておかないと
以下のようなメッセージで怒られることが判明、
Match User句でForceCommandでinternal-sftpを指定して
いてもNGな模様。

 subsystem request for sftp
 error: subsystem: cannot stat /usr/libexec/openssh/sftp-server: No such file or directory
 subsystem request for sftp failed, subsystem not found
 The session allows sftp connections only

> CentOS7(openssh-server-7.4p1-13.el7_4)はSubsystemは変更なしでもOKでした。

 
<その他メモ>
Match User の中にsshd_configで個別ユーザに設定できるような制御も可能
→鍵認証のみにする、しない
PasswordAuthentication no
→umaskを変えたい場合
ForceCommand internal-sftp -u 002

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA