はじめに
第一回とありますが、このシリーズでは『OSインストールからウェブサーバの構築+α』までの一連の流れを説明していきます(もともとはメモ代わりですが)。
1記事として全てまとめて書いても良いのですが、その場合は非常に長くなってしまうのでいくつかの記事に分割して紹介していきます。
今回は第一回目です。
このセクションでは、新しく記事が公開される度に記事リンクをまとめて置いておきます。
- Ubuntu20.04のInstallおよびSSH、FTP設定【第一回】
- https://www.pr1sm.com/web/ubuntu20-04-install-and-ssh-ftp-settings/
- Nginxの導入および設定&セキュアなHTTPS化【第二回】
- Rust製SSG、Zolaの導入および各種設定【第三回】
- Nginxリバースプロキシで静的コンテンツ専用サーバを作成【第四回】
- WordPress&MariaDBの導入および高速化設定【第五回】
- サイトの安全性を更に高めるWordPressセキュリティ設定【第六回】
なお、このシリーズではホスティングにVultrを使っています。
- Vultr
サーバのスペックおよび構成は以下の通りです。
$ cat /etc/lsb-release
- DISTRIB_ID=Ubuntu
- DISTRIB_RELEASE=20.04
- DISTRIB_CODENAME=focal
- DISTRIB_DESCRIPTION="Ubuntu 20.04.3 LTS"
Vultr : High Frequency Server
- 32GB MVMe
- 1CPU
- 1GB Memory
- Additional Features
- Virtual Private Clouds: ON
今回の編集時に使用するエディタはvimです。文字入力開始(insert)はi
、保存して終了は:wq
、保存せずに終了は:!q
です。フラグの解除はEscキーです。
コマンド表示時の$ コマンド
にあるドルマークは入力可能状態を表しています。意味を表す記号で最初から表示されているため、実際の入力時にドルマークを入力する必要はありません。
これが# コマンド
の場合のシャープはrootユーザー(管理者権限)を意味します。こちらも入力時は同様です。
Ubuntuのインストール
今回はServer版を使いますが、サーバ運用以外でも使う予定がある場合はDesktop版でも構いません。
Ubuntuのダウンロードおよびインストール
まずはUbuntu公式サイトにてUbuntu Serverのisoファイルをダウンロードしておきます。執筆時点ではUbuntu Server 20.04.3 LTSです。
- Ubuntuを入手する
ダウンロードが終われば、Vultrのサーバ新規設定である
Deploy New Instance
のServer Type
で先程ダウンロードしたisoファイルをアップロードします。アップロード後、
My ISOs
で選択できていればあとはDeploy Now
でサーバをデプロイします。
Ubuntuのインストール設定
Deploy後はサーバステータス内のView Consoleにてコンソール画面で操作することが可能です。
起動直後は読み込み等を行っているため、しばらく待機します。
その後
Use UP, DOWN and ENTER keys to select your language.
という文言が出てくるので、ここではEnglish
を選択します。- すると、次は
Instaler update available
という項目が出てくることがあり、ここではUpdate to the new installer
を選択してしばらく待ちます。
- すると、次は
それが終わると次に
Keyboard configuration
の項目が表示されるので、Layout: Japanese
を選択し、Done
を選びます。1.ただし、もし使用しているキーボードが日本語文字列ではない場合は対応した言語を選択してください。
次は
Network connections
の項目ですが、ここは特に変更する箇所はないのでそのままDone
を選択します。もし変更したいところがあれば適宜行ってください。Configure proxy
も同様に変更箇所は特に無いのでDone
を選びます。Configure Ubuntu archive mirror
では自動的にミラーアドレスが表示され、日本ではhttp://jp.archive.ubuntu.com/ubuntu
が表示されているので、そのままDone
を選びます。次に
Guided storage configuration
が表示され、変更がなければDone
を選びますが、ストレージの構成を変更にしたい場合はCustom storage layout
を選んだあとにDone
を選択します。- カスタム設定にした場合は
Storage configuration
が出てきますが、例えばディスクのファイルシステムをxfsに変更したい場合はAVAILABLE DEVICES
の下にある/dev/vda localdisk 32.000G
を選択し、Add GPT Partition
を選ぶとAdding GPT partition to /dev/vda
が表示されます。 Adding GPT partition to /dev/vda
ではFormat
を選び、現在のext4
からxfs
を選択し、Create
します。- すると再び
Storage configuration
に戻り、現在の構成が表示されますが、これで問題が無ければDone
を選んでください。 - カスタム設定の最後には
Confirm destuctive action
が表示され、 ディスクを初期化しても良いかと聞かれるので問題がなければContinue
を選びます。
- カスタム設定にした場合は
次は
Profile setup
を行います。Your name
は自分の名前を入力しますが、これはユーザ名とは別のものです。Your server's name
はサーバ自体の名前を入力します。コンソールではYour server's name@username
という位置です。Pick a username
はユーザ名を入力します。Choose a password
には好きなパスワードを入力し、確認としてConfirm your password
には同じパスワードを入力します。
次は
SSH Setup
ですが、今回はSSH(Secure SHell)接続を行うため、必ずInstall OpenSSH server
にチェックを付けてください。チェックを付けたらDone
を選びます。- チェックを付けると
Import SSH identity
が出てきますが、ここでは新規作成を行うのでNo
のままでOKです。
- チェックを付けると
最後に
Featured Server Snaps
では必要な機能があればチェックを入れますが、今回はこの項目で何もチェックを入れませんのでDone
を選択します。全項目の設定が終わればインストールが開始されるので、インストールが完全に終了するまで待機します。
Install complete!
ではなく、下記にReboot Now
が表示されるまで待つ必要があります。表示されたら再起動を行います。なお、再起動の際、セットしたUbuntuのisoファイルがそのままになっているとずっとインストール項目に移動しつづけてしまいます。なので、Vultrのサーバステータスから自身のサーバを選択し、
Settings
、Custom ISO
の順で移動するとRemove ISO
があるのでISOを除去しておきましょう。除去後は自動で再起動が行われます。
Ubuntu初期設定
アップデート
Ubuntuのインストールを完全に終わらせた場合は既にアップデートのインストールは完了しています。
$ sudo apt update
を入力することで現在のアップデート状況をチェックすることができます。
$ sudo apt upgrade
によってアップデートをインストールすることができます(推奨)。
$ sudo apt dist-upgrade
もしくは$ sudo apt full-upgrade
では完全なアップデートのために障害となるパッケージは削除される可能性があります。
なお、パッケージ管理コマンドにはapt
とapt-get
がありますが、apt-get
ではインストールしていないパッケージが必要となる場合にアップグレードが停止します。
そのため、基本的には柔軟な動作を行うapt
が推奨されています。
厳格にパッケージを管理したい場合にはapt-get
を使うと良いでしょう。
TeraTermの導入
Vultrのコンソール画面のままでは非常に扱いにくいので、ここでは大変便利なターミナルエミュレータであるTeraTermを導入します。
- Tera Term Home Page
TeraTermをダウンロードして展開後、
ttermpro.exe
というファイルがあるのでそれを起動します(ショートカットを作っておくと便利です)。起動後、
File
、New connection...
の順で選択するとTera Term New connection
という画面が出てくるので、Host:
には先程作成したサーバのIPを入力し、TCP port#
には22
を入力します。すると
SECURITY WARNING
と共にfingerprintが表示されますが、そのままContinue
を選んでください。SSH Authentivation
の項目が表示されるので、User name:
にサーバのユーザ名を入力し、Passphrase:
にはパスワードを入力後、OK
を選択するとサーバにログインすることができます。
この後すべてのコンソール内の操作はTeraTerm経由で行われます。
netplanの設定変更
再起動後、コンソールにA start job is running for wait for network to be configured
という文章が表示され、非常に長く待たなければならないケースが発生する場合があります。
これを解決するにはnetplan
の設定を変更する必要があります。
$ sudo vim /etc/netplan/00-installer-config.yaml
00-installer-config.yaml
# This is the network config written by 'subiquity'
# 各インターフェースにoptional:trueを追加する
network:
ethernets:
enp1s0:
dhcp4: true
optional: true
enp6s0:
dhcp4: true
optional: true
version: 2
:wq
で上書き保存し、その後$ sudo netplan apply
で設定の変更を適用させます。
文字化け対策
現時点のサーバは日本語に対応しておらず、仮に入力した場合には文字化けが発生してしまいます。
そのため、別途日本語パッケージをインストールして適用させなければなりません。
- まずは
$ locale -a
で現在の言語設定を確認します。初期状態では以下のようになっており、日本語が入っていません。
C
C.UTF-8
en_US.utf8
POSIX
$ sudo apt install language-pack-ja-base language-pack-ja
で日本語パッケージをインストールします。インストール後はシステム表示を一部英語にしたまま日本語表示可能にします。理由としてはエラーメッセージなどは英語の方が検索に引っかかりやすいためです。
$ sudo vim ~/.bashrc
で言語設定を行います。
bashrc
# 最後に記載する
case $TERM in
linux) LANG=C ;;
*) LANG=ja_JP.UTF-8;;
esac
その後は
$ source .bashrc
で設定を反映させます。ただし、システム表示は日本語化状態となっているため、反映させるには$ sudo reboot
によるサーバの再起動が必要となります。- もしシステムを含む全部を日本語表示にしたい場合は
$ echo 'export LANG=ja_JP.UTF-8' >> ~/.bashrc
および$ echo 'export LANGUAGE="ja_JP:ja"' >> ~/.bashrc
を入力することで、日本語訳に対応している項目はすべて日本語で表示されます。
- もしシステムを含む全部を日本語表示にしたい場合は
次に
$ sudo vim ~/.vimrc
でエディタであるvimの編集も行います。
vimrc
" settings
set fenc=utf-8
set encoding=utf-8
set fileencodings=utf-8
set fileformats=unix,dos,mac
vimの場合は保存した時点で自動的に反映されます。
以上で文字化け対策の完了です。
セキュアなSSH設定
現時点では簡易的なSSH接続を行っているため、セキュリティ的には脆弱です。
そのため、一定以上の安全性を確保するためにSSHの設定を更新します。 新規に作成した鍵を使ったログイン方法を追加します。 まず、TeraTermのメニューバーにある 次に すると 下部に 公開鍵と秘密鍵を保存した後、公開鍵( アップロードした公開鍵を認証用に設定します。 設定が完了することで鍵でのログインが可能となります。 実際にログインするには、通常ログインと同じようにTera Termメニューバーで 鍵でのログインはできるようになりましたが、そもそも現段階では鍵でしかログインができないというわけではなく、パスワードを用いた通常ログインがまだ可能になっています。 そのため、更に安全性を高めるために新たな設定を行います。 この時点でSSHのポート番号を変更していれば、次のログインからはそのポート番号でしかログインできません。 SSHのために様々な変更を行いましたが、さらなるセキュリティ対策を行うためにUFW(Uncomplicated FireWall)というファイアウォールの設定も追加しておきましょう。 まずは 次に 更に そして 最後に鍵認証の追加
Setup
を選択します。SSH Key Generator
を選択します。TTSSH: Key Generator
という項目が表示されます。Key type
にED25519
を選び、Generate
を選択します。Key passphrase:
が表示されるため、この鍵に対するパスワードを設定します。Comment:
は有り無しどちらでも構いません。Confirm passphrase:
にも同様のパスワードを入力したら、Save public key
およびSave private key
を自身のデバイスの任意の場所に保存します。id_ed25519.pub
)をTeraTermの画面にログインした状態でドラッグアンドドロップします。Tera Term: File Drag and Drop
という項目が出現するので、何も入力せずにOK
を選択します。/home/ユーザ名
にアップロードされます。$ pwd
で現在のディレクトリを確認し(移動していなければ/home/ユーザ名
が表示される)、$ ls
で現在のディレクトリのファイルも確認する(指定したディレクトリにアップロードしていればid_ed25519.pub
が表示される)$ mkdir .ssh
でSSH用のディレクトリを作成する。$ chmod 700 .ssh
でファイルのパーミッション(許可)を変更する(3つの数字は順に所有者:グループ:その他)。700では所有者のみが読み込み書き込み実行できます。$ mv id_ed25519.pub .ssh/authorized_keys
で公開鍵を移動します。$ chmod 600 .ssh/authorized_keys
でauthorized_keys
ディレクトリを所有者のみ読み書き可能に切り替えます。New connection...
を選び、Host:
、TCP port#
に同じポート番号を入れてSSH Authentication
を表示させます。User name:
は同じユーザ名を、Passphrase:
には鍵のパスワードを入力します。Authentication methods
にはUse RSA/DSA/ECDSA/ED25519 key to log in
を選択し、Private key file:
には先程保存した秘密鍵であるid_ed25519
(拡張子無し)を選択します。OK
でログインすることができます。sshd_configの設定
$ sudo vim /etc/ssh/sshd_config
でコンフィグ編集を行います。sshd_config
# 同じ項目が既に入っていればそちらはコメントアウトしてください。
# SSHの初期ポート番号は狙われやすいので必ず変更する
Port 22
# Port 好きなポート番号
# パスワード無しでのログインは絶対に許可してはならないので"no"
PermitEmptyPasswords no
# チャレンジレスポンス認証を使用しない
ChallengeResponseAuthentication no
# Rootでのログインはセキュリティ上よろしくないので"no"
PermitRootLogin no
# ログインの成功失敗ログが出力されるようにする
SyslogFacility AUTHPRIV
# 出力されるログを詳細なものに切り替える
LogLevel VERBOSE
# PAM(Pluggable Authentication Module)認証。パスワードやチャレンジレスポンスは使わないので"no"
UsePAM no
# 鍵認証のみを使いたいのでパスワード認証は"no"
PasswordAuthentication no
# TCPポートフォワーディングを禁止する(SSH経由で別サーバとの接続を行う場合は"yes")
AllowTcpForwarding no
# Unixドメインソケットによる転送を禁止する(SSH経由で別サーバとの接続を行う場合は"yes")
AllowStreamLocalForwarding no
# X11フォワーディングを禁止する(-Xオプションを使う場合は"yes")
X11Forwarding no
#
# 以下の項目は間違えると修正するまでSSH接続ができなくなるので注意
#
# 接続を許可するユーザを設定(任意)
# AllowUsers yamada
# AllowUsers tanaka@192.168.1.*
# AllowUsers *@192.168.1.2
# 接続を許可するグループを設定(任意)
# AllowGroups hogehoge
# 接続を拒否するユーザを設定(任意)
# DenyUsers ec2-user
$ sudo service sshd restart
でSSHを再起動させます。UFWの設定
$ sudo ufw default DENY
ですべてのポートを拒否します。この時点ではまだ有効になっていないのですぐに遮断されることはありません。$ sudo ufw allow SSHポート番号
で先程指定したSSHポート番号を許可します。$ sudo ufw limit SSHポート番号
を加えることで、30秒間に6回以上のアクセスが同一IPから行われた場合、そのIPをブロックできます。$ sudo ufw enable
によってUFWが起動されます。Command may disrupt existing ssh connections. Proceed with operation (y|n)?
という文言(コマンドが既存のSSH接続を中断する可能性)が出てくることがありますが、大抵は問題ありませんのでy(yes)
を選びます。$ sudo ufw reload
で設定を反映させます。
SFTPの設定
次はSFTP(SSH File Transfer Protocol)の設定を行います。
FTPとはクライアントとサーバ間で、ファイルのアップロードやダウンロードを行うことのできる便利な機能であり、自身の端末にあるファイルをサーバに送ったり、サーバ側のファイルをこちらに受信することが可能となります。
SFTPとはSSHにFTP機能を加えたプロトコルであり、よりセキュアにファイルの送受信を行うことができます。
通常のFTPサーバにはvsftpd(Very Secure FTP Daemon)と呼ばれるオープンソースの著名なFTPサーバがあります。
ただし、SFTPではsftp-server(もしくはinternal-sftp)というシステムが使われており、FTPとは動作するプログラムが異なります(vsftpdの設定を行ってもSFTPには意味が無い)。
今回の導入後、実際のFTP接続には非常に扱いやすい無料のFTPクライアントソフトウェアであるFileZillaを使います。事前にダウンロードしておきましょう。
- FileZilla
SFTP専用ユーザの追加
今回の設定ではSFTPでのみログインができるユーザを新たに作成します。
※もし使うのが管理者のみで他のユーザが必要とならない場合はユーザ追加の設定は行わなくてもOKです。
$ sudo useradd ユーザ名
でSFTP用ユーザを作成します。ユーザ名は各自決めてください。次に
$ sudo passwd ユーザ名
で先程作成したユーザにパスワードを作成します。そして
$ sudo usermod -d / ユーザ名
により、そのユーザのホームディレクトリを/
に設定します。その後
$ sudo mkdir /home/ユーザ名
およびsudo chown root:root /home/ユーザ名
、$ sudo chmod 755 /home/ユーザ名
で作成したユーザが読み書き可能なディレクトリを作成します。それが完了すると、
$ sudo groupadd グループ名
でSFTP専用ユーザのグループ名を作成します。こちらも名前は自由です。$ id ユーザ名
で現在のグループをチェックできます。
現時点では作成したユーザが同じく新規に作ったグループに属していないため、
$ sudo usermod -G グループ名 ユーザ名
でグループ設定を変更させます。- 後に同じ権限を持ったユーザを更に追加したくなった場合は、ユーザ作成後、同様の方法でグループ設定を変更すればOKです。
このままでは作成したユーザは読み書きができないため、
$ cd /home/ユーザ名
で移動後、$ sudo mkdir test
でディレクトリを作成し、更に$ sudo chown ユーザ名:ユーザ名 test
で権限を与えます。最後に
$ sudo vim /etc/ssh/sshd_config
でグループに対しての動作を指定します。- 鍵認証を行う場合はSSH接続のセクションと同じ方法で鍵を作成し、指定された場所に公開鍵を設置してください。
sshd_config
# 末尾に記述する
# 指定したグループに対しての設定
Match group グループ名
# 初期ディレクトリを指定
ChrootDirectory /home/%u
# コマンド強制でSFTP接続のみを許可し、chroot対応しやすいinternal-sftpを使う
ForceCommand internal-sftp
# パスワード認証を行う場合は"yes"
PasswordAuthentication yes
# 鍵認証を行う場合はキーの場所を指定(%uはそれぞれのユーザ名を意味する)
# AuthorizedKeysFile /home/%u/.ssh/authorized_keys
# TCPポートフォワーディングを禁止する(SSH経由で別サーバとの接続を行う場合は"yes")
AllowTcpForwarding no
# Unixドメインソケットの転送を禁止する(SSH経由で別サーバとの接続を行う場合は"yes")
AllowStreamLocalForwarding no
# X11フォワーディングを禁止する(-Xオプションを使う場合は"yes")
X11Forwarding no
- すべての設定が完了したため、
$ sudo service sshd restart
により、sshdを再起動させます。
もしコマンドでSFTPログインを行いたい場合はsftp ユーザ名@IPアドレス
を入力します。
鍵認証でのSFTPログインコマンドはsftp -i /公開鍵の場所/ ユーザ名@IPアドレス
です。
FileZillaで接続する
まずFileZillaを起動した後、
ファイル
、サイトマネージャー
の順で選択します。すると、サイトマネージャーの項目が出てくるので、左下にある
新しいサイトを選択します。
選択後、
自分のサイト
に新規サイトが現れるので、右上の一般
タブ内のプロトコルに使用するタイプを選びます(FTP,SFTP,FTPS)。ホスト
はサーバのIPを入力してください。ポート
は設定したポート番号を入力します。- SFTPの場合はSSH接続に使うポート番号を入力します。
- 通常FTPの場合(vsftpdなど)は設定したlistenポート番号を入力します。
その後、
ユーザー
にはログインを行うユーザ名を入力します。パスワード
はそのユーザ名に設定したパスワードを入力します。- もしパスワード認証を無効化している場合は、後述する鍵認証を使ったSFTP接続を参照してください。
右下部にある
接続
を選択することで、サーバに接続が開始されます。ユーザ名およびパスワードが間違っていなければ無事接続成功となります。- もしユーザ名とパスワードが間違っていないのにエラーが発生する場合は、FTPサーバの設定が間違っている可能性があります。左上のログにエラー文が表示されるので、それを参考に調べてみてください。
あとはユーザの権限次第でサーバへの読み書きや転送などを行うことが可能です。
鍵認証を使ったSFTP接続
ここまでの設定ではSSH接続によるログインは公開鍵と秘密鍵を使っています。
これをそのまま利用することで、FileZillaでもSFTP接続することができます。
まずはFileZillaメニューバーの
編集
、設定
を選んで設定画面を表示します。次に表示されたページの種類一覧で
SFTP
を選択します。右側に
公開鍵認証
の項目が表示されるので、鍵ファイルの追加
を選んでください。秘密鍵が格納されたファイルを選択
が出てきますが、ここでSSH接続に使っているid_ed25519
を選択し開く
を選びます。- 秘密鍵の方を選ぶ必要があるので注意(
.pub
は公開鍵なので誤り)。
- 秘密鍵の方を選ぶ必要があるので注意(
すると、
FileZilla はファイル「id_ed25519」の形式をサポートしていません。FileZilla がサポートしている形式に変換しますか?
というダイアログが出てくるので、はい
を選択します。- 秘密鍵にパスワードを入力した場合はここでパスワードが求められますので入力します。
その後
PuTTY private key files(*.ppk)
という形式で保存することができるので、認識のディレクトリに保存します(例:id_ed25519.ppk
で保存)保存が完了したら
OK
を選んで設定画面を閉じます。再び
サイトマネージャー
へ戻り、自身のサイトの一般
タブ内のログオン タイプ
で鍵ファイル
に切り替えます。ユーザー
の下が鍵ファイル
に変更されているので、参照
を選んで先程保存した.ppk
ファイルを選びます。すべての設定が完了したので
接続
を選択してサーバに接続します。不明なホスト鍵
というダイアログが出てきますが、誤りが無ければそのままOK
で問題ありません。- 秘密鍵にパスワードを設定していれば、パスワードの入力を要求されるため、秘密鍵に対するパスワードを入れてください。
これにより、鍵認証を使ったSFTP接続ができるようになりました。
【予備】FTPの導入
以前のサイトではSFTPではなくFTP(実際にはFTPS)を使っていたこともあり、予備としてこちらの導入方法も置いておきます。
ただし、FTPS(File Transfer Protocol over SSL/TLS)やSFTPではなく、通常のFTPの場合は通信が暗号化されていないため、実際に使うのならFTPSあるいはSFTPが推奨されます。
まずは
$ sudo apt update
でアップデートを確認します。次に
$ sudo apt install vsftpd
でvsftpdをインストールします。$ vsftpd -v
でインストールしたvsftpdのバージョンをチェックできます。$ sudo vim /etc/vsftpd.conf
で各種設定を記述していきます。
vsftpd.conf
# 同じ項目が既に入っていればそちらはコメントアウトしてください。
# IPV4での接続を有効にする
listen=YES
# IPv6での接続を拒否
listen_ipv6=NO
# 匿名ログインを許可しない
anonymous_enable=NO
# ローカルユーザのログインを許可する
# (/etc/passwdに存在するユーザ)
local_enable=YES
# ファイルの変更を許可
write_enable=YES
# 新規ファイルのumaskパーミッション設定(002の時、ディレクトリは775、ファイルは664となる)
# ディレクトリ - 777からumaskを引いた数値(000では777)。
# ファイル - 666からumaskを引いた数値(077では600)。
local_umask=002
# メッセージファイルがあるディレクトリにアクセスするとそのメッセージを表示する
dirmessage_enable=YES
# ファイル送受信のログを記録する
xferlog_enable=YES
# xferlog形式のフォーマットを利用せず、vsftpd.logに変更
xferlog_std_format=NO
# ログ出力パス
vsftpd_log_file=/var/log/vsftpd.log
# Activeモード時のデータコネクションポートを20番に固定するかどうかの設定
connect_from_port_20=NO
# ASCIIモードでのアップロードを許可
ascii_upload_enable=YES
# ASCIIモードでのダウンロードを許可
ascii_download_enable=YES
# FTPサーバ接続時に表示するメッセージ
ftpd_banner=Welcome to blah FTP service.
# ディレクトリアクセスの制御(CHangeRoot)リストを有効化
chroot_list_enable=YES
# chroot_list_fileで指定したユーザのみ全ディレクトリへのアクセスを可能とする
# "NO"の場合は指定されていないユーザが全ディレクトリへのアクセスができる(NOは非推奨)
chroot_local_user=YES
# 指定するユーザのリスト
chroot_list_file=/etc/vsftpd.chroot_list
# chroot先に書き込み権限があるユーザはログイン不可、"YES"だと権限有りでログイン可能に
# セキュリティ的には悪用防止のためにユーザの書き込み権限を無しにしつつ"NO"が良い
allow_writeable_chroot=YES
# ディレクトリの再帰表示を許可
ls_recurse_enable=YES
# ログイン可否を設定するユーザリストを有効化する
userlist_enable=YES
# "NO"ではユーザリストに書かれたユーザのみログイン可能にする(ホワイトリスト制)
userlist_deny=NO
# ユーザリストのパス
userlist_file=/etc/vsftpd.user_list
# TCP wrappersを使ってアクセス制御を行う
tcp_wrappers=YES
# ディレクトリリストの表示にローカルのタイムゾーンを使用
use_localtime=YES
# ログイン時ディレクトリ(ホームとなるディレクトリ)
local_root=/home
# FTPもしくはFTPS接続に使用するポート番号(自由に決める)
listen_port=10000
# pasvモードで利用するポート最小値(自由に決める)
pasv_min_port=10010
# pasvモードで利用するポートの最大値(自由に決める)
pasv_max_port=10020
# "500 OOPS:priv_sock_get_cmd"というエラーが出た場合、最終行に追記する
# seccompフィルターを無効にする
# seccomp_sandbox=NO
#
# FTPS設定 (FTPSを使う時だけ有効化する)
#
# FTPSを有効化
#ssl_enable=YES
# FTPSに使う証明書の場所を指定
#rsa_cert_file=/etc/letsencrypt/live/yourdomain.example.com/fullchain.pem
#rsa_private_key_file=/etc/letsencrypt/live/yourdomain.example.com/privkey.pem
# 匿名接続でのログインにSSL/TLSを使わない
#allow_anon_ssl=NO
# ローカルユーザのデータ通信にSSL/TLSを使う
#force_local_data_ssl=YES
# ローカルユーザのログインにSSL/TLSを使う
#force_local_logins_ssl=YES
# SSL/TLSのバージョン指定(安全性のためTLS1.2以降の使用を推奨)
#ssl_sslv2=NO
#ssl_sslv3=NO
#ssl_tlsv1=NO
#ssl_tlsv1_1=NO
#ssl_tlsv1_2=YES
# SSL/TLSでの暗号強度を高いものにする
#ssl_ciphers=HIGH
# SSL/TLSでの暗号化方式を指定
#ssl_ciphers=ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
# DH鍵交換パラメータ(各自用意する)
#dh_param_file=/etc/vsftpd/dhparam.pem
# implicitモード(接続直後にSSL/TLSを有効化)を有効化
#implicit_ssl=YES
# すべての接続でクライアント証明書を掲示させる
#require_cert=YES
# SSL/TLS接続時に証明書を要求する
#ssl_request_cert=YES
# すべてのクライアント証明書を検証する
#validate_cert=YES
# クライアント証明書を検証および読み込むためのファイル名
#ca_certs_file=/etc/pki/vsftpd_self_CA/cacert.pem
# OpenSSL接続の診断をvsftpdログに出力する
#debug_ssl=YES
$ sudo vim /etc/vsftpd.chroot_list
でchrootユーザリストを作成します。- ファイル内は1行につき1ユーザで記述します。
今度は
$ sudo vim /etc/vsftpd.user_list
でログインユーザリストを作成します。- こちらも同様に1行につき1ユーザです。
設定後、FTPに使うポートをUFWで許可させます。
例では
$ sudo ufw allow 10000
です。pasv接続に使うポートも開放します。
- 例:
$ sudo ufw allow 10010:10020/tcp
- 例:
設定が終われば
$ sudo service ufw reload
および$ sudo service vsftpd restart
で設定を反映させます。
これによりFTP接続ができるようになりました。
次回はNginxの導入と設定およびHTTPS化
これまでの設定によって、SSH接続からFTP接続までが自由に使えるようになるので、ある程度は基本的なサーバとしての運用が可能となります。
次回はウェブサーバであるNginxおよびHTTPS双方の導入と設定について紹介していきます。
参考資料
- vimrc に日本語を書くと文字化けするときの対処
- Linux OS ubuntu のlocale 設定
- Ubuntuのtofuを日本語環境に直す
- Ubuntu20.04「A start job is running for wait for network to be configured」と表示されて起動が遅い
- apt-get upgradeとapt-get dist-upgradeとapt upgradeとapt full-upgradeの違い
- apt と apt-get の違い
- 公開鍵認証によるSSH接続 - Tera Termの使い方
- Tera Termで公開鍵と秘密鍵を作成して、安全にSSH接続を行う方法
- 初めましての挨拶と公開鍵認証について
- TeraTermを使ったSSH鍵の作成方法
- セキュアなSSHサーバの設定
- sshd_configの設定項目の理解を目指す
- sshd_config&PAMの設定
- sshd_config - How to configure the OpenSSH server
- SSH サーバのセキュリティ対策
- SSHポートフォワーディングで、リモートのXをローカルに転送する
- SSHD_CONFIG(5) OpenBSD manual pages
- sshd_config に RSAAuthentication no を設定する必要はもうない
- 接続制限の設定
- iptablesが難しいためufwでWEBサーバーのファイアウォール設定
- OpenSSH: Difference between internal-sftp and sftp-server
- Centos7 FTPサーバ設定(vsftpd)
- CentOS7でFTPサーバ構築
- CentOS 7のvsftpdでセキュアなFTPSが利用できるFTPサーバーを構築する
- Linuxでssh不可sftpだけアクセス可能なユーザーを作りアクセスディレクトリも制限する
- FTP・FTPS・SFTPの違いや特徴について
- 【vsftpd】FTPをSSL/TLSで暗号化する設定
- [VSFTPD] FTPS設定 (クライアント認証もあるよ)
- Ubuntuにvsftpdをインストールする https://jet-blog.com/install_vsftpd_for_ubuntu/
- 超簡単!FTPソフトFileZilla(ファイルジラ)を設定する【conoha + kusanagi】
- SFTPサーバの設定
- chrootされたsftp専用ユーザを作るメモ
- sftpのみ使用するユーザーで鍵認証を使用する
- OpenSSHのsftp専用ユーザーを設定する https://memo.koumei2.com/openssh%E3%81%AEsftp%E5%B0%82%E7%94%A8%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B/
- SFTPコマンドの覚書
- FTPユーザーがこちらで指定したディレクトリから上位を見れない、遡れなくする方法 +α
- vsftp: why is allow_writeable_chroot=YES a bad idea?