Linuxのセキュリティ基本設定入門|初心者が最初に知るべきroot・パーミッション・ファイアウォールの3つの壁

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)【Linux入門】初心者のための基礎知識・講座 > Linuxのセキュリティ基本設定入門|初心者が最初に知るべきroot・パーミッション・ファイアウォールの3つの壁
TITLE: Linuxのセキュリティ基本設定入門|初心者が最初に知るべきroot・パーミッション・ファイアウォールの3つの壁 BASENAME: linux-security-intro-beginner CATEGORY: 【Linux入門】初心者のための基礎知識・講座 BLOG_ID: 4 DESCRIPTION: Linuxのセキュリティ基本設定を初心者向けに解説。rootアカウントの危険性・パーミッションの仕組み・ファイアウォールの設定という3つの壁を一歩ずつ乗り越える実践的な入門ガイドです。 IMAGE_PROMPT_1: 16:9のフラットイラスト。濃いグレー(#333)背景。中央に南京錠とシールドの組み合わせアイコン、周囲にLinuxのターミナル画面をイメージしたフラットアイコン群。企業向けベクター風。テキストや文字は一切含めないこと。 IMAGE_TEXT_1_LINE1: Linuxセキュリティ入門 IMAGE_TEXT_1_LINE2: root・パーミッション・ファイアウォール IMAGE_PROMPT_2: 16:9のフラットイラスト。濃いグレー(#333)背景。中央に3つのシールドアイコンが横並びで配置され、それぞれ鍵・ファイル・炎壁のモチーフ。企業向けベクター風。テキストや文字は一切含めないこと。 IMAGE_TEXT_2_LINE1: セキュリティの3つの柱 IMAGE_TEXT_2_LINE2: root・パーミッション・ファイアウォール 「Linuxのサーバーを立てたけど、セキュリティって何をすればいいのか分からない」
そんな疑問を持つ方のために、本記事を書きました。

セキュリティと聞くと難しそうに聞こえますが、最初に知るべきことはシンプルで、たった3つの壁を越えるだけです。rootアカウントの危険性・パーミッションの仕組み・ファイアウォールの設定。これだけです。

この記事では、Linuxセキュリティの入り口として上記3つの基本を、実際のコマンド例を交えながら初心者向けに解説します。

この記事のポイント

・rootは「最強の権限」だからこそ普段使いは厳禁、sudoを使う
・パーミッションはrwxの3文字で読み書き実行を管理する
・firewall-cmdでポートを絞ることが外部攻撃の第一の防壁になる
・3つを組み合わせることで「入られにくく・被害が広がりにくい」環境になる


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

なぜLinuxのセキュリティ設定が必要なのか

Linuxをインストールした直後の状態は、セキュリティ的に「鍵をかけていない家」に近い状態です。

特にクラウドやVPSに構築したLinuxサーバーは、インターネットに直接つながっているため、構築後すぐに外部からの接続試行(ポートスキャンやbrute forceログイン)が始まります。実際に私が検証環境を立ち上げた直後、/var/log/secureを確認すると数分で不審なSSHログイン試行が記録されていました。

セキュリティ設定を後回しにしている間に不正アクセスを受ける可能性があります。
本記事で紹介する3つの対策は、難しい知識がなくても実施できる「最低限の守り」です。

第1の壁:rootアカウントの危険性とsudoの使い方

1. rootとは何か

Linuxには「root」という特別なユーザーが存在します。rootはシステム上のすべての操作が許可された「スーパーユーザー」です。

・ファイルの削除・書き換えが無制限
・システム設定の変更が何でもできる
・他のユーザーのファイルにも自由にアクセスできる

この強力さが「危険」の理由でもあります。rootでログインした状態でコマンドを間違えると、システム全体に影響するミスが一瞬で完了してしまいます。

たとえば次のコマンドをrootで実行すると、システムの重要ファイルが一瞬で消えます。

# 絶対に実行しないこと(例示のみ) rm -rf /

一般ユーザーであれば権限エラーで止まりますが、rootであれば止まらずに実行されてしまいます。

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

「(ALL) ALL」と表示されていれば、user01はすべてのコマンドをsudoで実行できる状態です。

3. rootのSSHログインを無効化する

外部からのrootによる直接ログインを禁止することも重要です。/etc/ssh/sshd_configを編集します。

# sshd_configを開く(編集にはsudoが必要) sudo vi /etc/ssh/sshd_config # 以下の行を探して変更する PermitRootLogin no # 設定を反映するためにsshdを再起動 sudo systemctl restart sshd

この設定をするだけで、インターネットから「root」ユーザー名でのSSHログイン試行を防げます。

第2の壁:パーミッションでファイルへのアクセスを制限する

1. パーミッションとは何か

Linuxでは「誰が」「何をできるか」をファイルやディレクトリごとに設定できます。これがパーミッション(権限)です。

# ファイルの詳細情報を確認する ls -l /etc/passwd # 実行結果の例 -rw-r--r--. 1 root root 2648 May 31 09:12 /etc/passwd

先頭の「-rw-r--r--」がパーミッションを表しています。

記号 対象 意味
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

特に「600」(所有者のみ読み書き可能)はSSH秘密鍵や設定ファイルに使う重要な設定です。SSH秘密鍵のパーミッションが緩いと、SSHログイン時にエラーが出て接続できなくなります。

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

実際にfirewall-cmd --list-allを実行すると次のような出力が得られます。

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:

「services」の行に許可されているサービスが表示されます。ssh・http・httpsのみが開放されているのが分かります。

3. 不要なポートを閉じる

# telnet(23番)が開放されていたら閉じる sudo firewall-cmd --permanent --remove-service=telnet # 特定のポート番号を閉じる sudo firewall-cmd --permanent --remove-port=8080/tcp # 設定を反映する sudo firewall-cmd --reload

開発中に一時的に開けたポートを、本番稼働後も閉め忘れているケースが現場でも多く見られます。定期的にfirewall-cmd --list-allで開放ポートを確認する習慣をつけましょう。

トラブルシュート:セキュリティ設定で詰まりやすい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

不審なIPアドレスからの試行が続いている場合は、ファイアウォールでそのIPを遮断するか、SSHのポート番号をデフォルトの22番から変更することも有効な対策です。

本記事のまとめ

対策 コマンド・設定 目的
rootの直接ログイン禁止 sshd_config: PermitRootLogin no rootへの外部からの直接攻撃を防ぐ
sudo経由でroot権限を使う sudo コマンド名 操作ミスの影響範囲を限定する
パーミッションを適切に設定する chmod 600 秘密鍵 機密ファイルを他のユーザーから隠す
ファイアウォールで必要なポートだけ開放 firewall-cmd --permanent --add-service=ssh 不必要な入口を塞ぐ
ログイン履歴を定期確認 lastlastb 不正アクセスの兆候を早期発見する

セキュリティの基本は「最小権限の原則」です。必要な人に、必要な範囲だけ、必要なときだけ権限を与える。この考え方がLinuxのセキュリティ設計の根本にあります。

最初は難しく感じるかもしれませんが、本記事の3つの壁をひとつずつ実際に手を動かして設定していくと、確実にセキュリティの感覚が身についていきます。

実務でLinuxを扱う現場では、ここで紹介した設定は「当たり前にできていること」として求められます。入門の段階でしっかり理解しておきましょう。
現場で通用する安全な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設定まで ~ パスワード認証から鍵認証へ移行する

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。