そんな疑問を持つ方のために、本記事を書きました。
セキュリティと聞くと難しそうに聞こえますが、最初に知るべきことはシンプルで、たった3つの壁を越えるだけです。rootアカウントの危険性・パーミッションの仕組み・ファイアウォールの設定。これだけです。
この記事では、Linuxセキュリティの入り口として上記3つの基本を、実際のコマンド例を交えながら初心者向けに解説します。
この記事のポイント
・rootは「最強の権限」だからこそ普段使いは厳禁、sudoを使う
・パーミッションはrwxの3文字で読み書き実行を管理する
・firewall-cmdでポートを絞ることが外部攻撃の第一の防壁になる
・3つを組み合わせることで「入られにくく・被害が広がりにくい」環境になる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
なぜLinuxのセキュリティ設定が必要なのか
Linuxをインストールした直後の状態は、セキュリティ的に「鍵をかけていない家」に近い状態です。特にクラウドやVPSに構築したLinuxサーバーは、インターネットに直接つながっているため、構築後すぐに外部からの接続試行(ポートスキャンやbrute forceログイン)が始まります。実際に私が検証環境を立ち上げた直後、/var/log/secureを確認すると数分で不審なSSHログイン試行が記録されていました。
セキュリティ設定を後回しにしている間に不正アクセスを受ける可能性があります。
本記事で紹介する3つの対策は、難しい知識がなくても実施できる「最低限の守り」です。
第1の壁:rootアカウントの危険性とsudoの使い方
1. rootとは何か
Linuxには「root」という特別なユーザーが存在します。rootはシステム上のすべての操作が許可された「スーパーユーザー」です。・ファイルの削除・書き換えが無制限
・システム設定の変更が何でもできる
・他のユーザーのファイルにも自由にアクセスできる
この強力さが「危険」の理由でもあります。rootでログインした状態でコマンドを間違えると、システム全体に影響するミスが一瞬で完了してしまいます。
たとえば次のコマンドをrootで実行すると、システムの重要ファイルが一瞬で消えます。
# 絶対に実行しないこと(例示のみ) rm -rf /
2. 普段はsudoを使う
セキュリティの基本として、rootでは直接ログインせず、一般ユーザーでログインして必要なときだけ「sudo」コマンドで一時的にroot権限を借りるのが正解です。# sudoを使ってroot権限が必要な操作を実行する例 sudo systemctl restart httpd # パスワードを求められるので入力する [sudo] password for user01: # sudoが使えるか確認する sudo -l
$ sudo -l Matching Defaults entries for user01 on server01: !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep=... User user01 may run the following commands on server01: (ALL) ALL
3. rootのSSHログインを無効化する
外部からのrootによる直接ログインを禁止することも重要です。/etc/ssh/sshd_configを編集します。# sshd_configを開く(編集にはsudoが必要) sudo vi /etc/ssh/sshd_config # 以下の行を探して変更する PermitRootLogin no # 設定を反映するためにsshdを再起動 sudo systemctl restart sshd
第2の壁:パーミッションでファイルへのアクセスを制限する
1. パーミッションとは何か
Linuxでは「誰が」「何をできるか」をファイルやディレクトリごとに設定できます。これがパーミッション(権限)です。# ファイルの詳細情報を確認する ls -l /etc/passwd # 実行結果の例 -rw-r--r--. 1 root root 2648 May 31 09:12 /etc/passwd
| 記号 | 対象 | 意味 |
|---|---|---|
| rw- | 所有者(root) | 読み取り・書き込みが可能、実行は不可 |
| r-- | グループ(root) | 読み取りのみ可能 |
| r-- | その他のユーザー | 読み取りのみ可能 |
r(読み取り)・w(書き込み)・x(実行)の3文字がそれぞれの権限です。「-」は権限なしを意味します。
2. chmodでパーミッションを変更する
パーミッションを変更するにはchmodコマンドを使います。# スクリプトに実行権限を追加する chmod +x myscript.sh # 所有者だけが読み書き可能(他ユーザーはアクセス不可)に設定する chmod 600 ~/.ssh/id_rsa # 所有者が読み書き実行可能、グループとその他は読み取りと実行のみ chmod 755 /var/www/html # 変更を確認する ls -l ~/.ssh/id_rsa # 実行結果の例 -rw-------. 1 user01 user01 1675 May 31 09:30 /home/user01/.ssh/id_rsa
3. 危険なパーミッションを避ける
・777の設定は危険:所有者・グループ・その他の全員が読み書き実行できる。本番サーバーでは原則禁止・重要な設定ファイルは600か644:パスワードハッシュが含まれる/etc/shadowは400で保護されている
・Webサーバーのコンテンツは755か644:実行権限を必要以上に与えない
パーミッション設定を間違えると、機密情報の漏洩や不正なスクリプト実行につながります。
第3の壁:ファイアウォールで外部からの接続を絞る
1. ファイアウォールの役割
Linuxサーバーは複数のポートで外部からの接続を待ち受けています。ファイアウォールはその「入口」を絞る仕組みです。必要なポートだけを開放して、それ以外は遮断することで、知らないうちにサービスへの不正アクセスを受けるリスクを大幅に減らせます。
RHEL系(Rocky Linux・AlmaLinux・CentOS Stream)ではfirewalldが標準のファイアウォール管理ツールです。
2. firewall-cmdの基本操作
# ファイアウォールの状態を確認する sudo firewall-cmd --state # 現在開放されているポート・サービスを確認する sudo firewall-cmd --list-all # HTTPSポート(443)を永続的に開放する sudo firewall-cmd --permanent --add-service=https # SSH(22番ポート)を開放する sudo firewall-cmd --permanent --add-service=ssh # 設定を反映する(再読み込み) sudo firewall-cmd --reload
public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client http https ssh ports: protocols: forward: yes masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
3. 不要なポートを閉じる
# telnet(23番)が開放されていたら閉じる sudo firewall-cmd --permanent --remove-service=telnet # 特定のポート番号を閉じる sudo firewall-cmd --permanent --remove-port=8080/tcp # 設定を反映する sudo firewall-cmd --reload
トラブルシュート:セキュリティ設定で詰まりやすい3つのポイント
「Permission denied」が出る時
一般ユーザーで実行しているコマンドが権限不足でエラーになっているケースがほとんどです。・コマンドの先頭に「sudo」を付けて再実行する
・sudoが使えない場合はwheelグループ(RHEL系)またはsudoグループ(Ubuntu系)に自分を追加する
・ファイルのパーミッションが原因の場合はls -lで確認してchmodで修正する
SSHで接続できなくなった時
sshd_configを編集後にsshdを再起動したが接続できない、というトラブルは初心者によく起きます。・ファイアウォールでSSHポートが閉じていないかfirewall-cmd --list-allで確認する
・sshd_configの設定ミスが原因の場合はsshd -tでテストできる
・VPS・クラウドの場合はWebコンソールからアクセスして確認する
# sshd設定ファイルの構文チェック sudo sshd -t # エラーがなければ何も表示されない。エラーがあれば内容が表示される
ログイン試行の痕跡を確認する
# ログイン履歴(成功)を確認する last # ログイン失敗の履歴を確認する(不正アクセス試行の確認に使う) sudo lastb | head -20 # SSHの認証ログを確認する sudo grep "Failed password" /var/log/secure | tail -20
本記事のまとめ
| 対策 | コマンド・設定 | 目的 |
|---|---|---|
| rootの直接ログイン禁止 | sshd_config: PermitRootLogin no |
rootへの外部からの直接攻撃を防ぐ |
| sudo経由でroot権限を使う | sudo コマンド名 |
操作ミスの影響範囲を限定する |
| パーミッションを適切に設定する | chmod 600 秘密鍵 |
機密ファイルを他のユーザーから隠す |
| ファイアウォールで必要なポートだけ開放 | firewall-cmd --permanent --add-service=ssh |
不必要な入口を塞ぐ |
| ログイン履歴を定期確認 | last、lastb |
不正アクセスの兆候を早期発見する |
セキュリティの基本は「最小権限の原則」です。必要な人に、必要な範囲だけ、必要なときだけ権限を与える。この考え方がLinuxのセキュリティ設計の根本にあります。
最初は難しく感じるかもしれませんが、本記事の3つの壁をひとつずつ実際に手を動かして設定していくと、確実にセキュリティの感覚が身についていきます。
実務でLinuxを扱う現場では、ここで紹介した設定は「当たり前にできていること」として求められます。入門の段階でしっかり理解しておきましょう。
無料の「Linuxサーバー構築入門マニュアル(図解60ページ)」をプレゼントしています。
コマンド学習の先にある「サーバーをゼロから組み立てる力」を、初心者が迷わない順序で学べる一冊です。
無料マニュアルを受け取る >>
次に学ぶべきLinux実務スキル
この記事でセキュリティの入口を把握できたら、次は各コマンドの詳しい使い方を身につけましょう。以下の7つのテーマが実務の現場でよく求められるスキルです。・chmodコマンドで権限を変更する方法|755と644の違いや一括変更も ~ パーミッション設定の完全解説
・sudoコマンドでroot権限を安全に実行する方法|visudoの設定からログ確認まで ~ sudoの正しい設定方法
・SSHのポート番号を変更する方法|sshd_configの設定からfirewalld・SELinux対応まで ~ ブルートフォース対策として有効
・firewall-cmdコマンドでポートを開放・管理する方法|ゾーン・サービス・永続化の使い分け ~ ファイアウォール設定の詳細
・lastコマンドでログイン履歴を確認する方法|lastb・lastlogやセキュリティ調査も ~ 不正アクセスの調査方法
・SELinuxを無効化・確認する方法|enforcing/permissive/disabled切替とgetenforce・sestatus ~ SELinuxの基本を理解する
・ssh-keygenコマンドでSSH公開鍵認証を設定する方法|鍵の生成からauthorized_keys設定まで ~ パスワード認証から鍵認証へ移行する
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 前のページへ:Linuxコマンドの実行方法入門|オプション・引数と複数コマンドの連結(; && ||)
- この記事の属するカテゴリ:【Linux入門】初心者のための基礎知識・講座へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます