Contents
sFTP専用ユーザの作成!
FTPは通信が全く暗号化されておらず、非常に脆弱である為、FTPは極力利用せず、代わりにsFTPを利用頂くようにして下さい。
そして、ホームページ等の制作・更新などでは、sFTPしか利用できない作業専用アカウントを使用します。例えばホームページ制作を制作会社に委託する場合、委託先毎にsFTPアカウントを発行しても制作会社の中で担当者間で共有利用したり、引き継いだり等様々な状況で利用される事がよくあります。そうした実態を踏まえて、sFTPアカウントで実行できる権限に制限を設ける必要があります。
早速、sFTP専用ユーザを作成します。
以下のような条件のsFTP専用ユーザを作ろうと思います。
- sFTP専用ユーザのみパスワード認証を許す。(公開鍵認証が理想ではある・・・)
- 接続元IP制限を設ける。※事前に接続元IPアドレスを確認して下さい。
- ドキュメントルートの一階層上までしかアクセスを許可しない。
- SSH接続を許可しない。
以下の設定は管理者用アカウント(sudo権限あり)で作業して下さい。
まだsftp専用アカウントグループが無い初めての設定の場合はグループを作成します。
$ sudo groupadd sftpusers
次にユーザを作成します。ユーザ名を本番サーバ用のsftp専用ユーザとしてprod_sftpとします。
$ sudo useradd prod_sftp $ sudo passwd prod_sftp ユーザー prod_sftp のパスワードを変更。 新しいパスワード: ←新しいパスワードを入力 新しいパスワードを再入力してください: ←同じパスワードを確認で入力 passwd: すべての認証トークンが正しく更新できました。
ユーザを作成後sftp専用グループに入れて、グループに入った事を確認します。
$ sudo usermod -G sftpusers prod_sftp $ groups prod_sftp prod_sftp : prod_sftp sftpusers
これでsFTP専用ユーザの作成は完了です。次にsFTPサーバの設定が済んでいる方は、「sFTP専用ユーザに接続元IP制限をかける。」へスキップして下さい。
sFTPサーバの基本設定
$ sudo vi /etc/ssh/sshd_config
コンフィグファイルを設定変更します。下記の設定が済んでいない場合は、設定するようにしましょう。PermitRootLoginはnoにする。rootユーザで直接SSH接続できなくなります。
PermitRootLogin no
続いて、PasswordAuthenticationもno。
PasswordAuthentication no
これでsshでパスワード認証を禁止します。ssh公開鍵認証を行うようにして下さい。
以上が基本設定となります。次にsFTP専用ユーザのサーバ設定です。
sFTP専用ユーザに接続元IP制限をかける。
下記の設定でsFTP専用ユーザの設定を行います。sFTP専用ユーザは、先ほど作ったsftpusersに所属すユーザがsFTP専用ユーザとしてます。SSHでの接続はできません。sFTP専用ユーザの利用者から接続するIPアドレスを事前に確認するようにして下さい。
$ sudo vi /etc/ssh/sshd_config
コンフィグファイルの末尾に下記を追記して下さい。2つ目以降のsFTP専用ユーザ設定の場合は、AllowUsersの部分だけ追記してください。
# sFTP only Match group sftpusers ChrootDirectory /var/www PasswordAuthentication yes X11Forwarding no AllowTcpForwarding no AllowUsers prod_sftp@100.100.100.100 stg_sftp@200.200.200.200 ForceCommand internal-sftp Match all
上記の設定例はsftpusersグループ(sftp専用ユーザ)に対して以下のように設定してます。
- prod_sftpユーザは、100.100.100.100からの接続しか許可しません。(この例では更にstg_sftpユーザは、200.200.200.200からの接続しか許可しません。このようにIP制限の設定をユーザ毎に列挙できます。)
- ドキュメントルートが/var/www/htmlの時、ドキュメントルートの一階層上(/var/www)までしかアクセスできません。
- sftpusersグループのみパスワード認証を許可します。
- sFTPの接続を許可し、SSHの接続は許可しません。
設定が完了したらsshdを再起動させて、変更内容を適用します。
$ sudo systemctl restart sshd
設定が終わったら接続確認をするようにしましょう。
sFTP専用ユーザに接続確認
sFTP専用ユーザの接続確認を利用者に接続情報をお渡しして、接続確認してもらってください。
ホスト名 ※接続先サーバ名
(IPアドレス ※接続先サーバのIPアドレス)
アカウント名 prod_sftp ※sFTP専用ユーザ名
パスワード ※sFTP専用ユーザのパスワード
プロトコル sFTP
ポート番号 22
利用者が接続できない場合は、サーバのログに接続の形跡が残っているか確認します。
$ sudo tail /var/log/secure
- アクセスログに異なるIPアドレスがある場合は、先方から提示されたIPに誤りがある可能性があります。利用者の接続環境が固定IPではなく接続元IPアドレスが変わってしまっている事等もよくあります。
- アクセスログにそもそも接続の形跡がない場合は、利用者が別の場所に接続しようとしているか、ネットワーク上のどこかに問題がある可能性があります。
なかなか、接続がうまくいかず原因が特定しにくい場合は、下記の様にすると接続状況をリアルタイムにログでチェックする事もでき、チャットや電話などで直接状況を話しながら原因を特定する作業を進めやすくなります。
$ sudo tail -f /var/log/secure
以上となります。
※また、固定IPを持っていないsFTP専用ユーザの利用者に対しては、VPNをご契約いただく事をお勧めして下さい。VPN( インターリンク マイIP 等)を利用するとモバイル等の環境からでも固定IP環境を得る事が出来ます。