CentOS8を使用したサーバーの初期セットアップ
序章
新しいCentOS8サーバーを最初に作成するときは、基本的なセットアップの一部として、早い段階で実行する必要のあるいくつかの構成手順があります。 これにより、サーバーのセキュリティと使いやすさが向上し、後続のアクションの強固な基盤が提供されます。
ステップ1—ルートとしてログインする
サーバーにログインするには、サーバーのパブリックIPアドレスを知っている必要があります。 パスワード、または認証用にSSHキーをインストールした場合は、rootユーザーのアカウントの秘密キーも必要になります。 サーバーにまだログインしていない場合は、 SSHを使用してドロップレットに接続する方法に関するドキュメントに従ってください。このプロセスの詳細が説明されています。
サーバーにまだ接続していない場合は、次のコマンドを使用して root ユーザーとしてログインします(コマンドの強調表示された部分をサーバーのパブリックIPアドレスに置き換えます)。
ssh root@your_server_ip
ホストの信頼性に関する警告が表示された場合は、それを受け入れます。 パスワード認証を使用している場合は、rootパスワードを入力してログインします。 パスフレーズで保護されたSSHキーを使用している場合、セッションごとに初めてキーを使用するときにパスフレーズの入力を求められる場合があります。 パスワードを使用してサーバーに初めてログインする場合は、rootパスワードを変更するように求められることもあります。
ルートについて
root ユーザーはLinux環境の管理ユーザーであり、非常に幅広い特権を持っています。 root アカウントの特権が強化されているため、定期的に使用することは推奨されていません。 これは、 root アカウントに固有の機能の一部が、偶然であっても非常に破壊的な変更を加えることができるためです。
そのため、次のステップは、日常業務への影響範囲を減らした代替ユーザーアカウントを設定することです。 このアカウントは、必要に応じて特権を増やすことができます。
ステップ2—新しいユーザーを作成する
root としてログインすると、今後ログインに使用する新しいユーザーアカウントを作成できます。
この例では、 sammy という名前の新しいユーザーを作成しますが、任意のユーザー名に置き換える必要があります。
adduser sammy
次に、sammy
ユーザーに強力なパスワードを設定します。
passwd sammy
パスワードを2回入力するように求められます。 そうすると、ユーザーは使用できるようになりますが、最初に、このユーザーにsudo
コマンドを使用するための追加の権限を付与します。 これにより、必要に応じてrootとしてコマンドを実行できるようになります。
ステップ3—管理者権限を付与する
これで、通常のアカウント権限を持つ新しいユーザーアカウントができました。 ただし、管理タスクを実行する必要がある場合があります。
通常のユーザーからログアウトしてrootアカウントとして再度ログインする必要がないように、通常のアカウントに「スーパーユーザー」またはroot特権と呼ばれる権限を設定できます。 これにより、通常のユーザーは、各コマンドの前にsudo
という単語を置くことで、管理者権限でコマンドを実行できるようになります。
これらの特権を新しいユーザーに追加するには、新しいユーザーをWheelグループに追加する必要があります。 デフォルトでは、CentOS 8では、Wheelグループに属するユーザーはsudo
コマンドを使用できます。
root として、次のコマンドを実行して、新しいユーザーを Wheel グループに追加します(強調表示された単語を新しいユーザー名に置き換えます)。
usermod -aG wheel sammy
これで、通常のユーザーとしてログインしたときに、コマンドの前にsudo
と入力して、スーパーユーザー権限でアクションを実行できます。
ステップ4—基本的なファイアウォールの設定
ファイアウォールは、サーバーに基本レベルのセキュリティを提供します。 これらのアプリケーションは、明示的に承認したポート/サービスを除いて、サーバー上のすべてのポートへのトラフィックを拒否する責任があります。 CentOSには、この機能を実行するためのfirewalld
というサービスがあります。 firewall-cmd
というツールを使用して、firewalld
ファイアウォールポリシーを構成します。
注:サーバーがDigitalOceanで実行されている場合は、オプションでfirewalld
の代わりにDigitalOceanクラウドファイアウォールを使用できます。 デバッグが困難な可能性のあるルールの競合を回避するために、一度に1つのファイアウォールのみを使用することをお勧めします。
最初にfirewalld
をインストールします。
dnf install firewalld -y
デフォルトのfirewalld
構成では、ssh
接続が許可されているため、ファイアウォールをすぐにオンにできます。
systemctl start firewalld
サービスのステータスをチェックして、サービスが開始されたことを確認します。
systemctl status firewalld
Output● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2020-02-06 16:39:40 UTC; 3s ago Docs: man:firewalld(1) Main PID: 13180 (firewalld) Tasks: 2 (limit: 5059) Memory: 22.4M CGroup: /system.slice/firewalld.service └─13180 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork --nopid
active
とenabled
の両方であることに注意してください。つまり、サーバーを再起動するとデフォルトで起動します。
サービスが稼働しているので、firewall-cmd
ユーティリティを使用して、ファイアウォールのポリシー情報を取得および設定できます。
まず、すでに許可されているサービスをリストしましょう。
firewall-cmd --permanent --list-all
Outputpublic (active) target: default icmp-block-inversion: no interfaces: eth0 eth1 sources: services: cockpit dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
名前で有効にできる追加のサービスを表示するには、次のように入力します。
firewall-cmd --get-services
許可する必要のあるサービスを追加するには、--add-service
フラグを使用します。
firewall-cmd --permanent --add-service=http
これにより、http
サービスが追加され、ポート80
への着信TCPトラフィックが許可されます。 ファイアウォールをリロードすると、構成が更新されます。
firewall-cmd --reload
後で構成する可能性のある追加のサービスについては、ファイアウォールを(サービスまたはポートを使用して)明示的に開く必要があることに注意してください。
ステップ5—通常のユーザーの外部アクセスを有効にする
root 以外の通常のユーザーが日常的に使用できるようになったので、それを使用してサーバーにSSHで接続できることを確認する必要があります。
注:ログインして新しいユーザーでsudo
を使用できることを確認するまで、rootとしてログインしたままにすることをお勧めします。 このように、問題が発生した場合は、トラブルシューティングを行い、rootとして必要な変更を加えることができます。 DigitalOcean Dropletを使用していて、 root SSH接続で問題が発生した場合は、DigitalOceanConsoleを使用してDropletにログインできます。
新しいユーザーのSSHアクセスを構成するプロセスは、サーバーのrootアカウントが認証にパスワードまたはSSHキーのどちらを使用するかによって異なります。
ルートアカウントがパスワード認証を使用する場合
パスワードを使用してrootアカウントにログインした場合、SSHに対してパスワード認証が有効になります。 新しいターミナルセッションを開き、新しいユーザー名でSSHを使用することにより、新しいユーザーアカウントにSSHで接続できます。
ssh sammy@your_server_ip
通常のユーザーのパスワードを入力すると、ログインします。 管理者権限でコマンドを実行する必要がある場合は、次のように入力する前にsudo
と入力してください。
sudo command_to_run
sudo
を各セッションで初めて使用するとき(およびその後定期的に)、通常のユーザーパスワードの入力を求められます。
サーバーのセキュリティを強化するために、パスワード認証を使用する代わりにSSHキーを設定することを強くお勧めします。 キーベースの認証を構成する方法については、 CentOS8でのSSHキーの設定に関するガイドに従ってください。
ルートアカウントがSSHキー認証を使用する場合
SSHキーを使用してrootアカウントにログインした場合、SSHのパスワード認証は無効になります。 正常にログインするには、公開鍵のコピーを新しいユーザーの~/.ssh/authorized_keys
ファイルに追加する必要があります。
公開鍵はすでにサーバー上のrootアカウントの~/.ssh/authorized_keys
ファイルにあるため、そのファイルとディレクトリ構造を新しいユーザーアカウントにコピーできます。
正しい所有権と権限でファイルをコピーする最も簡単な方法は、rsync
コマンドを使用することです。 これにより、 rootユーザーの.ssh
ディレクトリがコピーされ、アクセス許可が保持され、ファイル所有者が変更されます。これらはすべて1つのコマンドで実行されます。 以下のコマンドの強調表示された部分を、通常のユーザーの名前と一致するように変更してください。
注: rsync
コマンドは、末尾のスラッシュで終わるソースと宛先を、末尾のスラッシュがない場合とは異なる方法で処理します。 以下のrsync
を使用する場合は、ソースディレクトリ(~/.ssh
)に末尾のスラッシュが含まれていないことを確認してください[~/.ssh/
を使用していないことを確認してください])。
コマンドに誤って末尾のスラッシュを追加した場合、rsync
はrootアカウントの~/.ssh
ディレクトリのcontentsを[にコピーします。 ~/.ssh
ディレクトリ構造全体をコピーする代わりに、X161X]ユーザーのホームディレクトリ。 ファイルは間違った場所にあり、SSHはそれらを見つけて使用することができません。
rsync --archive --chown=sammy:sammy ~/.ssh /home/sammy
ここで、ローカルマシンの新しい端末に戻り、root以外のユーザーとの新しいSSHセッションを開きます。
ssh sammy@your_server_ip
パスワードを使用せずに、新しいユーザーアカウントにログインする必要があります。 管理者権限でコマンドを実行する必要がある場合は、次のように入力する前にsudo
と入力してください。
sudo command_to_run
sudo
を各セッションで初めて使用するとき(およびその後定期的に)、通常のユーザーパスワードの入力を求められます。
結論
この時点で、サーバーの強固な基盤ができています。 今すぐサーバーに必要なソフトウェアをインストールできます。