SmallStyle


2012-08-09

_ SFTP で chroot する

とあるサーバーにファイルをコピーするのに SFTP を利用するときに,アップロード用のディレクトリ以外は見せたくなかったので,chroot できるように設定した.条件としては,アップロードするユーザーは SFTP 専用のユーザーとし,それ以外の操作はできないようにする.また,認証は公開鍵認証とする.以下,設定手順の覚え書き.

ユーザーの作成

まずは SFTP 専用のユーザーを作成し,鍵ファイルを作成する.

# useradd sftpuser
# su - sftpuser
$ mkdir .ssh
$ chmod 700 .ssh
$ ssh-keygen
$ cat id_rsa.pub >> authorized_keys

SFTP の設定

sftp 時に chroot できるように OpenSSH サーバーの設定を変更する.特定のユーザーの場合において,強制的に internal-sftp を利用するよう指定し,さらに ChrootDirectory を指定することで,クライアントに対してファイルシステムのルートディレクトリを変更することができる.

# sshd_config
Match User sftpuser
  ForceCommand internal-sftp
  ChrootDirectory /opt/sftpuser

ここでは Match ブロックの条件を User とし,特定のディレクトリに対して chroot したが,Group や Host などでも条件を指定できるので,状況に応じて使い分けできる.ChrootDirectory についても %u でユーザー名の指定もできる.

ワーキングディレクトリの作成

chroot の上位ディレクトリはすべて root が所有していなければならず,他のユーザーやグループが書き込みできるようになっていない必要がある.

# mkdir /opt/sftpuser
# chown root.root /opt/sftpuser
# chmod 755 /opt/sftpuser

書き込み用のディレクトリの作成

ワーキングディレクトリは SFTP ユーザーは書き込み権限をもたないため,書き込み可能なディレクトリを作成する.

# mkdir /opt/sftpuser/files
# chown sftpuser.sftpuser /opt/sftpuser/files
# chmod 755 /opt/sftpuser/files

これで当初の目的のとおりの環境を作成することができた.実際に WinSCP など SFTP に対応したクライアントでアクセスすると,chroot 先の上位ディレクトリには移動できず,書き込み可能なディレクトリにのみファイルをアップロードできた.

上記は以下のサイトを参考にしました.


about me

いろいろと興味を持ったことを書いてます.ちょっとしたことは hb(@smallstyle) on Twitter で書いてます.

Archive

2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|12|