こんにちは。
新しいLinuxサーバー(VPSなど)を立ち上げた直後、最初にログインするのは通常 root(最高管理者)ユーザーです。しかし、この状態のままサーバーの運用を続けるのは、セキュリティ上非常に危険です。
今回は、実戦的なWebサーバーやコンテナ環境を安全に構築するための第一歩として、「一般ユーザーの作成」「SSHの要塞化」、そして手元のPCや「VS Codeから1クリックで安全に爆速ログインする設定」までを、論理的かつ実践的に解説します。
なぜ root で直接作業してはいけないのか?
root ユーザーは、システムの全権限を持つ最強の存在です。何でもできる反面、以下のリスクが常に付きまといます。
- 誤操作の致命傷: コマンド一つでシステム全体を破壊できる(例:
rm -rf /)。 - サイバー攻撃の標的: 全世界の攻撃者は、常にあなたのIPアドレスに対して「ユーザー名:
root」でログインを試行(総当たり攻撃)しています。
そのため、インフラ構築の鉄則は「普段は権限のない一般ユーザーでログインし、必要な時だけ一時的に管理者権限(sudo)を借りる」、そして「外部からの root ログインを完全に遮断する」ことです。
3ステップで進める初期要塞化
ステップ①:一般ユーザーの追加と権限付与
まずは、自分の分身となる一般ユーザーを作成し、管理者権限を使えるようにグループに追加します。(例として、ここでは新ユーザー名を xxxx とします)
Bash
# 1. ユーザーの作成(-m でホームディレクトリを自動作成)
useradd -m xxxx
# 2. パスワードの設定(推測されにくい強力なものを設定)
passwd xxxx
# 3. ユーザーを「sudo(管理者権限を使える)グループ」に追加
# Ubuntu/Debian系の場合:
usermod -aG sudo xxxx
# CentOS/RHEL/Rocky Linux系の場合:
usermod -aG wheel xxxx
これで、新ユーザー xxxx はコマンドの頭に sudo をつけることで、安全に管理者タスクを実行できるようになります。
ステップ②:公開鍵認証(SSHキー)の設定
パスワードによるログインは、どれだけ長くしても「総当たり攻撃で推測されるリスク」が残ります。より強固な「公開鍵認証」へと切り替えます。手元のローカルPC(普段使っている端末)で鍵ペアを作成し、サーバーへ登録します。
1. ローカルPC側で鍵ペアを作成(未作成の場合)
Bash
# 安全性の高いED25519アルゴリズムで鍵を生成
ssh-keygen -t ed25519 -f ~/.ssh/server_key
これにより、手元に 「秘密鍵(server_key)」 と 「公開鍵(server_key.pub)」 が生成されます。
2. 公開鍵をサーバーに登録
作成した新ユーザー xxxx のディレクトリ内に、上記で生成した「公開鍵(.pubの方)」を設置します。
Bash
# サーバー側の新ユーザーのホーム配下にディレクトリを作成
mkdir -p /home/xxxx/.ssh
chmod 700 /home/xxxx/.ssh
# 公開鍵(server_key.pubの中身)を「authorized_keys」というファイルに書き込む
echo "【ここにローカルで生成した server_key.pub の中身を貼り付け】" > /home/xxxx/.ssh/authorized_keys
chmod 600 /home/xxxx/.ssh/authorized_keys
# 所有者をrootから新ユーザーに一括変更
chown -R xxxx:xxxx /home/xxxx/.ssh
⚠️【超重要チェック点】 ここで一度、現在のターミナルは絶対に閉じずに残したまま、ローカルPC側で新しいターミナルをもう一つ立ち上げて、新ユーザー+鍵でログインできるか必ずテストしてください。
Bash
ssh -i ~/.ssh/server_key xxxx@サーバーのIPアドレス無事にパスワードなし(または鍵のパスフレーズのみ)でログインでき、
sudo su -で管理者になれれば成功です。
ステップ③:SSH設定ファイルの編集(防衛線の確立)
鍵で問題なく入れることが確認できたら、いよいよ本丸です。サーバーのSSH設定ファイルを書き換えて、攻撃者の侵入経路を完全に塞ぎます。
Bash
# 設定ファイルをバックアップしてから編集
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo nano /etc/ssh/sshd_config
ファイル内の以下の項目を探し、変更(またはコメントアウト # を解除して追記)します。
Plaintext
# 1. ポート番号をデフォルトの「22」から変更(ウェルノウンポートを狙ったスキャン対策)
Port 10022 # (1024〜65535の間で、他のサービスと被らない任意の数字)
# 2. rootユーザーでの直接ログインを禁止
PermitRootLogin no
# 3. パスワード認証を禁止(公開鍵を持たない者を入り口で一切弾く)
PasswordAuthentication no
設定を保存したら、構文チェックをしてからSSHサービスを再起動して反映させます。
Bash
# 設定の構文チェック(何も出力されなければ正常。エラーが出たら編集ミス)
sudo sshd -t
# SSHサービスの再起動
sudo systemctl restart sshd
これで、ssh root@IPアドレス やパスワードのみのログインはすべてサーバーの玄関口で拒否されるようになり、防御力は劇的に向上しました。
発展:手元のPC・VS Codeから「爆速」で繋ぐ快適設定
設定をガチガチに固めたのは良いですが、毎回長いコマンド(ssh -p 10022 -i ...)を打つのは大変です。ローカル側の ~/.ssh/config を少し書き換えるだけで、プロフェッショナルかつ快適な開発環境が手に入ります。
1. ターミナルから一発でログインできるようにする(SSH Config)
手元のPC(ローカル)の設定ファイルを開きます。
Bash
nano ~/.ssh/config
(※Windowsでファイルがない場合は、C:\Users\ユーザー名\.ssh\config というテキストファイルを新規作成)
以下の内容を追記して保存します。
Plaintext
Host abibase
HostName 【サーバーのIPアドレス】
User xxxx # 作成した一般ユーザー名
Port 10022 # 変更したSSHポート番号
IdentityFile ~/.ssh/server_key # 手元にある秘密鍵の絶対パス
これで、次回からはターミナルで以下のコマンドを打つだけで、裏側の複雑なパラメータを自動適用して一発ログインできるようになります。
Bash
ssh abibase
2. VS Code(Remote – SSH)から1クリック接続
VS Codeからサーバーに接続し、コンテナのコードや設定ファイルを直接ローカル感覚で編集できるようにします。
- VS Codeの拡張機能(Ctrl+Shift+X)から 「Remote – SSH」(Microsoft公式)をインストールします。
- 画面左下の 「青いマーク(Remote接続ボタン)」 > 「ホストに接続する…」 > 「新規 SSH ホストを追加する…」 の順にクリックします。
- 入力欄が出現するので、先ほどconfigで設定したホスト名をそのまま入力します。Plaintext
ssh abibase - 保存先の設定ファイルとして、一番上にある
~/.ssh/configを指定します。 - 再び左下の「青いマーク」から 「ホストに接続する…」 を選ぶと、リストに
abibaseが追加されているので選択します。初回のみOSの選択肢が出るのでLinuxを選びます。
画面左下の青いマークが 「SSH: abibase」 に変われば接続成功です!「フォルダーを開く」からサーバー内のディレクトリ(/home/xxxx など)を選択すれば、ファイルの直接編集や、Ctrl + @ でサーバー内部のターミナルをVS Code上で直接動かすことが可能になります。
💡 LPIC試験対策としてのワンポイント
LPIC-1(特に102試験)において、今回実践した内容は超頻出の重要テーマです。
- ユーザー管理:
useraddや、所属グループを安全に追加するusermod -aGのオプション。 - SSH設定:
/etc/ssh/sshd_config内の主要パラメータ(Port,PermitRootLogin,PasswordAuthentication)の設定値。 - パーミッションの厳格性: Linuxのセキュリティルール上、鍵を格納する
.sshディレクトリは700(drwx------)、公開鍵をまとめたauthorized_keysファイルは600(-rw-------)でなければ、安全性が担保されていないとみなされSSHサービス側から接続を拒否されるという仕様。
ただ教科書を暗記するだけでなく、このように「自分の城をサイバー攻撃から守るために要塞化した実戦の記憶」と紐付けることで、試験問題の本質的な意味が驚くほどスムーズに理解できるようになります。
一歩ずつ、頑強で快適な自前インフラを洗練させていきましょう!








