2015年3月19日木曜日

sftpの権限だけのユーザを作成する(ディレクトリの制限も)

今回満たしたい要件は下記です
・ssh接続をさせない
・sftp接続は可能
・サーバ内のとあるディレクトリ配下しか利用させない。閲覧もさせたくない。
・umask 002でファイル配置
・ログインはパスワード(鍵ファイルではない)


・まずはユーザを作成します

adduser sftp-user -g www

※-g www はグループを指定しています。
(これは通常のユーザと同じにしてあります。そうすることにより、sftp-userが配置したファイルを通常ユーザが利用できる状態になります。(umask 002の設定しているので))

passwd sftp-user


・それでは、実際に今回の要件を満たす設定をしていきます。
修正するファイルは下記のみです。
/etc/ssh/sshd_config

○sshd_config 1カ所目
Subsystem sftpと記載のある箇所をかきの様に書き換えます。

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

Subsystem sftp internal-sftp -u 002

sftp-serverからinternal-sftpへの変更は、ディレクトリ制限をする都合上こちらのほうが都合がいいという理由です。
-u 002はumask 002という意味になります。
これで、sftpで作成されたファイルはumask 002の状態となります。

○sshd_config 2カ所目
ファイルの最終行に下記を追加してください。

Match User sftp-user
PasswordAuthentication yes
PubkeyAuthentication no
RSAAuthentication no
ChrootDirectory /home/neostage
ForceCommand internal-sftp -u 002


解説
・Subsystem sftp internal-sftp
これは、sftpでディレクトリ制限を付与するときにstfp-serverよりも楽に設定ができる記述のようです。
・Match User ユーザ名
これ以降の設定は、指定したユーザのみ適応されるという記述になります。
・PasswordAuthentication yes
パスワード認証にする
・PubkeyAuthentication no
公開鍵認証しない
・RSAAuthentication no
RSA認証しない
・ChrootDirectory
sftpの際のrootディレクトリとなる。これ以降のディレクトリしか操作出来ない
・ForceCommand internal-sftp -u 002
sftpにinternal-sftpを利用し、umaskを002設定する

上記設定後にsshdを再起動します。
/etc/rc.d/init.d/sshd restart

※再起動時には絶対に接続中の端末はログアウトしないでください。
再起動後は、別のターミナルで接続確認を行い、問題ないことを確認してください。
そうしないと、一生SSHでログインできない環境が出来上がってしまいます!


★上記設定のハマりポイント!
ChrootDirectory で指定しているディレクトリのPermissionには気をつけてください。
必ず、所有者はroot、グループもroot、権限は755で作成してください。
ChrootDirectory で指定している全ての階層のディレクトリが対象です。これをやらないとsftpが使えません!

0 件のコメント:

コメントを投稿