「とりあえずchmod 777」の末路。Linux特殊権限(SUID/SGID/Sticky Bit)の基礎と実務の落とし穴

Linuxのパーミッションを学んでいると、「755」や「644」といった数字のほかに、たまに「rws」や「rwt」といった見慣れない表示に出会うことはありませんか?これこそが、Linuxの特殊権限と呼ばれる仕組みです。
「資格試験のために暗記したけれど、実務で触るのがちょっと怖い…」 そんな風に感じている若手エンジニアの方も少なくありません。
しかし、特殊権限は「正しく使えば非常に便利、間違えるとセキュリティホールになる」という、まさにインフラエンジニアの腕の見せ所でもあります。今日は、この3つの特殊権限を世界一わかりやすく、そして「現場のリアル」を交えて解説します。
この記事の想定読者
- 実務でLinuxサーバを触り始めた若手エンジニア
- 特殊権限の「実務での具体的な使い道」を知りたい
この記事を読むことでのメリット
- 特殊権限(SUID/SGID/Sticky Bit)の仕組みを理解できる
- インフラエンジニアに必要なセキュリティの視点が身に付く
特殊権限が必要な「本当の理由」
そもそも、なぜ普通の権限(rwx)だけでは足りないのでしょうか。 その答えは、「一般ユーザーだけど、その時だけは管理者(root)の力を借りたい」というシチュエーションが実務で必ず発生するからです。
例えば、自分のパスワードを変更する passwd コマンド。パスワード情報は /etc/shadow というrootしか触れないファイルに保存されていますが、一般ユーザーが自分のパスワードを変えられるのは、この特殊権限のおかげなのです。
三大特殊権限:SUID・SGID・Sticky Bit
① SUID (Set User ID)
- 特徴: 実行ファイルに設定すると、「誰が実行しても、そのファイルの所有者の権限」で動作します。
- 表示: 所有者の実行権限の部分が
sになります(例:-rwsr-xr-x)。 - 現場の視点: 便利な反面、root所有のファイルにSUIDをつけるのは、ユーザーに「rootのパスポート」を貸し出すようなものです。脆弱性があるプログラムにSUIDがついていると、即座に特権昇格の足がかりにされるため、設定には細心の注意が必要です。
② SGID (Set Group ID)
- 特徴: ディレクトリに設定すると、その中で作成されたファイルやディレクトリの所有グループが、親ディレクトリのグループを継承します。
- 表示: グループの実行権限の部分が
sになります(例:drwxrwsr-x)。 - 現場の視点: これは共有ディレクトリの運用で非常に役立ちます。複数人でプロジェクトファイルを編集する際、誰がファイルを作っても「プロジェクト用グループ」の所有になるため、「権限がなくて上書きできない!」というトラブルを防げます。
③ Sticky Bit (スティッキービット)
- 特徴: ディレクトリに設定すると、「ファイルの所有者(またはroot)」しかそのファイルを削除できなくなります。
- 表示: その他のユーザーの実行権限の部分が
tになります(例:drwxrwxrwt)。 - 現場の視点: 代表例は
/tmpディレクトリです。誰でもファイルを置けますが、他人のファイルを勝手に消すことはできません。「みんなのゴミ箱だけど、自分のゴミ以外は捨てられない」というルールを技術的に担保しているのがこのビットです。
実務で役立つ「設定と確認」のテクニック
特殊権限を設定する際は、数値表現の先頭に「4(SUID)」「2(SGID)」「1(Sticky Bit)」を足します。
| 権限 | 数値設定 | コマンド例 |
| SUID | 4000 | chmod 4755 file |
| SGID | 2000 | chmod 2775 dir |
| Sticky Bit | 1000 | chmod 1777 dir |
特殊権限を持つファイルを一瞬で見つける方法
サーバーのセキュリティ監査などで、「意図しないSUIDがついていないか」を確認する際は、以下のコマンドが便利です。
# SUIDがついているファイルを探す
find / -perm -4000 -type f 2>/dev/null【深掘り】なぜ「権限を広げただけ」でログイン不能になるのか?
実務で実際に起きた、PAM(Pluggable Authentication Modules)にまつわる事故を深掘りします。
事象:良かれと思った chmod 777
ある開発担当者が、PAMの設定ファイルをFTPでダウンロードしようとしました。権限不足で失敗した彼は、対象ファイルに対して chmod 777 を実行。「読み取れるようにしただけだ」という認識でした。
なぜシステムが拒絶したのか?
Linuxの認証を司るPAMやSSHといったサービスは、動作の前に設定ファイルの権限を厳格にチェックします。
- 整合性チェック: システムは「このファイルはroot以外が書き込める状態(777)だ」と検知します。
- 信頼の崩壊: 「誰でも書き込める=既に悪意のある改ざんがなされた可能性がある」と判断します。
- 安全装置の発動: 不正な認証を許すリスクを冒すくらいなら、認証処理そのものを停止します。
その結果、ログインを試みてもPAMが「設定ファイルが危険です」とエラーを返し、全ユーザーが締め出されるという最悪の事態を招いたのです。
「777」がエンジニアの命取りになる3つの理由
- OSやサービスの自己防衛機能の破壊PAM以外にも、
~/.ssh/authorized_keys(600でないとSSH不可)など、「権限が緩すぎると動かなくなる」設計は多々あります。 - 「元に戻せない」リスク一度
777に変えた後、元の状態(644だったのか、440だったのか)を正確に復元するのは困難です。不明な場合はrpm -V [パッケージ名]などで初期状態と比較する高度な復旧作業が必要になります。 - セキュリティホールの自作実行ファイルに
777をつけることは、外部から悪意のあるコードを注入され、即座に実行される隙を与えることと同義です。
現場の正解:安全なファイル取り出し術
権限のない設定ファイルを安全にローカルへ持ってくるには、「元のファイルには絶対に触らない」のが鉄則です。
- 作業領域へのコピー:
sudo cp -p /etc/pam.d/config_file /tmp/work_copy(-pオプションで、所有者や権限などの属性を保持したままコピーします) - コピー先での所有者変更:
sudo chown [自分のユーザー名]:[自分のユーザー名] /tmp/work_copy - 安全にダウンロード:コピーしたファイルであれば、自由に権限を変えてもシステム本体の認証基盤には一切影響を与えません。
- 後片付け:作業終了後は
/tmpのファイルを削除します。
まとめ:特殊権限を理解し、サーバーを敬う
「権限エラー = chmod 777」という思考停止は、今日で卒業しましょう。
- 特殊権限(SUID/SGID/Sticky Bit) はLinuxの屋台骨であり、安易に触れてはいけない領域。
- 権限は 「最小限」 が鉄則。緩めることは、利便性を高めるのではなく「システムを壊す」こと。
- 手動作業のミスを減らすため、実務では Ansible などのIaCツールを使い、正しい権限状態をコードで管理・維持するのが現代のスタンダード。
Linuxサーバーを扱うということは、その背後にある厳格なセキュリティ設計を尊重することです。正しい知識を武器に、信頼されるエンジニアを目指しましょう。
SUIDやSGIDが正しく設定されていないことが原因で、アプリケーションがエラーを吐くケースは意外と多いものです。
表面上の挙動だけでは分かりにくい権限トラブルも、OSのログを適切に追うことで、パーミッションエラーの真実が見えてきます。権限設定とセットで覚えておきたいログ調査の基本テクニックもあわせて確認しておきましょう。







