<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Sticky-Bit on K-Life Hack | システムアーキテクチャ &amp; DevOps</title><link>https://klifehack.com/tags/sticky-bit/</link><description>Recent content in Sticky-Bit on K-Life Hack | システムアーキテクチャ &amp; DevOps</description><generator>Hugo -- gohugo.io</generator><language>ja</language><lastBuildDate>Sun, 23 Aug 2026 10:10:06 +0900</lastBuildDate><atom:link href="https://klifehack.com/tags/sticky-bit/index.xml" rel="self" type="application/rss+xml"/><item><title>Linuxにおける特殊パーミッション（SetUID・SetGID・Sticky Bit）のカーネル動作と権限制御</title><link>https://klifehack.com/p/linux-special-permissions-setuid-setgid-stickybit/</link><pubDate>Sun, 23 Aug 2026 10:10:06 +0900</pubDate><guid>https://klifehack.com/p/linux-special-permissions-setuid-setgid-stickybit/</guid><description>&lt;p&gt;Linux環境において複数ユーザーが単一のシステムリソースを共有して動作させる際、標準的なパーミッション構造（Owner/Group/Othersのrwx）のみでは特権操作の委譲やディレクトリ内での安全なアクセス制御を達成できません。例えば、一般ユーザーが自身のパスワードを変更する際、通常はroot権限しか書き込み権限を持たない&lt;code&gt;/etc/shadow&lt;/code&gt;ファイルを更新する必要があります。こうした運用上の要件を満たすため、Linuxカーネルは16ビットのファイルモード構造（&lt;code&gt;st_mode&lt;/code&gt;）の内部に特殊パーミッションビット（SetUID、SetGID、Sticky Bit）を組み込んでいます。&lt;/p&gt;&#10;&lt;h2 id="st_mode16ビット整数マスクの構造"&gt;st_mode（16ビット整数マスク）の構造&#10;&lt;/h2&gt;&lt;p&gt;ファイルシステムにおいて、パーミッション情報はinode内部の&lt;code&gt;st_mode&lt;/code&gt;構造体（16ビット整数）として保持されています。管理者が&lt;code&gt;chmod 755&lt;/code&gt;といったコマンドを実行する際、カーネル内部では省略された最上位の8進数を含む4桁（&lt;code&gt;0755&lt;/code&gt;）として評価されます。&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;+-------------------+----------------------+---------------------------------------+&#10;| File Type Bitmask | Special Bits Bitmask | Standard Permission Bitmask (9 bits) |&#10;| (4 bits) | (3 bits) | User (3b) | Group (3b) | Others (3b) |&#10;+-------------------+----------------------+-----------+------------+--------------+&#10;| Bit 15 - Bit 12 | Bit 11 - Bit 9 | Bit 8 - 6 | Bit 5 - 3 | Bit 2 - 0 |&#10;+-------------------+----------------------+-----------+------------+--------------+&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;b&gt;File Type Bitmask (Bit 15–12)&lt;/b&gt;:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;-&lt;/code&gt; : Regular File&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;d&lt;/code&gt; : Directory&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;c&lt;/code&gt; : Character Device&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;b&lt;/code&gt; : Block Device&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;s&lt;/code&gt; : Socket&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;l&lt;/code&gt; : Symbolic Link&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;p&lt;/code&gt; : Named Pipe (FIFO)&lt;/li&gt;&#10;&lt;li&gt;&lt;b&gt;Special Permission Bitmask (Bit 11–9)&lt;/b&gt;:&lt;/li&gt;&#10;&lt;li&gt;&lt;b&gt;Bit 11 (04000)&lt;/b&gt; : SetUID&lt;/li&gt;&#10;&lt;li&gt;&lt;b&gt;Bit 10 (02000)&lt;/b&gt; : SetGID&lt;/li&gt;&#10;&lt;li&gt;&lt;b&gt;Bit 9 (01000)&lt;/b&gt; : Sticky Bit&lt;/li&gt;&#10;&lt;li&gt;&lt;b&gt;Standard Permission Bitmask (Bit 8–0)&lt;/b&gt;:&lt;/li&gt;&#10;&lt;li&gt;Owner / Group / Others にそれぞれ割り当てられる &lt;code&gt;rwx&lt;/code&gt; ビット&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="setuid-set-user-id---octal-4000"&gt;SetUID (Set User ID - Octal 4000)&#10;&lt;/h2&gt;&lt;p&gt;SetUIDが設定されたバイナリ実行ファイルを実行すると、カーネルはプロセスの実行権限（Effective User ID: EUID）を、コマンドを起動したユーザー（Real User ID: RUID）ではなく、該当ファイルの所有者IDに昇格させます。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;chmod &lt;span style="color:#ae81ff"&gt;4755&lt;/span&gt; executable_file&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# または&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;chmod u+s executable_file&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;ls -l&lt;/code&gt; 出力での表記において、所有者の実行権限（&lt;code&gt;x&lt;/code&gt;）位置に表示されます。実行権限が付与されている場合は小文字の &lt;code&gt;s&lt;/code&gt;（&lt;code&gt;-rwsr-xr-x&lt;/code&gt;）、実行権限が不完全な場合は大文字の &lt;code&gt;S&lt;/code&gt;（&lt;code&gt;-rwSr-xr-x&lt;/code&gt;）として表示されます。&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;/usr/bin/passwd&lt;/code&gt; は代表的なSetUIDの適用品です。一般ユーザーが実行した場合でも、プロセス動作中は一時的にEUIDが &lt;code&gt;root&lt;/code&gt; に変更されるため、特権ファイルである &lt;code&gt;/etc/shadow&lt;/code&gt; の更新が可能となります。&lt;/p&gt;&#10;&lt;h2 id="setgid-set-group-id---octal-2000"&gt;SetGID (Set Group ID - Octal 2000)&#10;&lt;/h2&gt;&lt;p&gt;SetGIDはファイルおよびディレクトリのグループ所有権に対して動作します。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;b&gt;実行ファイルに対する適用&lt;/b&gt;: 実行時にプロセスの Effective Group ID (EGID) をファイルの所有グループIDへ変更します。&lt;/li&gt;&#10;&lt;li&gt;&lt;b&gt;ディレクトリに対する適用&lt;/b&gt;: ディレクトリ内で新規作成されるすべてのファイルやサブディレクトリに対し、作成者のプライマリグループではなく、親ディレクトリの所有グループIDを強制的に継承させます。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;chmod &lt;span style="color:#ae81ff"&gt;2775&lt;/span&gt; shared_directory&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# または&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;chmod g+s shared_directory&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;/var/mail&lt;/code&gt; ディレクトリ（&lt;code&gt;drwxrwsr-x&lt;/code&gt;）など、特定のサービスグループ（&lt;code&gt;mail&lt;/code&gt;グループ）へ新規生成ファイルの書き込み権限を継承させる構成で広く利用されます。&lt;/p&gt;&#10;&lt;h2 id="sticky-bit-octal-1000"&gt;Sticky Bit (Octal 1000)&#10;&lt;/h2&gt;&lt;p&gt;Sticky Bit（Restricted Deletion Flag）は、全ユーザーに書き込み権限（&lt;code&gt;777&lt;/code&gt;）が付与された共有ディレクトリにおいて、他人の作成したファイルを意図せず（または悪意を持って）削除・名前変更できないよう制限するフラグです。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;chmod &lt;span style="color:#ae81ff"&gt;1777&lt;/span&gt; shared_tmp&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# または&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;chmod +t shared_tmp&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sticky Bitが設定されたディレクトリ内では、以下のいずれかに該当するユーザーのみがファイルの削除または名前変更を実行できます。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;該当ファイルの所有者&lt;/li&gt;&#10;&lt;li&gt;該当親ディレクトリの所有者&lt;/li&gt;&#10;&lt;li&gt;スーパーユーザー（&lt;code&gt;root&lt;/code&gt;）&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;&lt;code&gt;/tmp&lt;/code&gt; ディレクトリ（&lt;code&gt;drwxrwxrwt&lt;/code&gt;）はこの設定の代表例です。&lt;/p&gt;&#10;&lt;h2 id="カーネルレベルのプロセス識別子"&gt;カーネルレベルのプロセス識別子&#10;&lt;/h2&gt;&lt;p&gt;Linuxカーネルはプロセスを実行する際、権限検証のために以下の識別子を保持します。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;b&gt;PID (Process ID)&lt;/b&gt;: プロセスの固有識別子&lt;/li&gt;&#10;&lt;li&gt;&lt;b&gt;RUID (Real User ID)&lt;/b&gt;: プロセスを起動した実際のユーザーID&lt;/li&gt;&#10;&lt;li&gt;&lt;b&gt;EUID (Effective User ID)&lt;/b&gt;: リソースアクセス時にカーネルが参照するアクセス権限判定用のユーザーID&lt;/li&gt;&#10;&lt;li&gt;&lt;b&gt;RGID (Real Group ID)&lt;/b&gt;: プロセスを起動したユーザーのプライマリグループID&lt;/li&gt;&#10;&lt;li&gt;&lt;b&gt;EGID (Effective Group ID)&lt;/b&gt;: アクセス権限判定時にカーネルが参照するグループID&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;SetUID / SetGID は、この EUID / EGID を一時的に付け替えることで権限昇格を実現します。&lt;/p&gt;&#10;&lt;h2 id="troubleshooting"&gt;Troubleshooting&#10;&lt;/h2&gt;&lt;h3 id="1-nosuid-マウントオプションによる権限昇格の無効化"&gt;1. &lt;code&gt;nosuid&lt;/code&gt; マウントオプションによる権限昇格の無効化&#10;&lt;/h3&gt;&lt;p&gt;⚠️ ファイルにSetUID/SetGIDフラグ（&lt;code&gt;4755&lt;/code&gt;等）が正しく付与されているにもかかわらず、実行時にアクセス拒否（Permission Denied）が発生する場合、該当ファイルシステムが &lt;code&gt;nosuid&lt;/code&gt; オプション付きでマウントされている可能性があります。&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;nosuid&lt;/code&gt; が有効なパーティション上では、カーネルは安全上の理由からSetUIDおよびSetGIDビットを完全に無視します。&lt;/p&gt;&#10;&lt;p&gt;💡 検証および対処フロー:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ findmnt -n -o OPTIONS -T /path/to/binary&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;rw,nosuid,nodev,relatime&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;上記の出力のように &lt;code&gt;nosuid&lt;/code&gt; が含まれている場合、&lt;code&gt;/etc/fstab&lt;/code&gt; の設定変更または手動の再マウントで &lt;code&gt;exec,suid&lt;/code&gt; を許可する必要があります。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo mount -o remount,suid /path/to/mountpoint&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="2-大文字-s-または-t-フラグの表示問題"&gt;2. 大文字 &lt;code&gt;S&lt;/code&gt; または &lt;code&gt;T&lt;/code&gt; フラグの表示問題&#10;&lt;/h3&gt;&lt;p&gt;⚠️ &lt;code&gt;ls -l&lt;/code&gt; コマンド実行時に &lt;code&gt;-rwSr-xr-x&lt;/code&gt; や &lt;code&gt;drwxrwxr-T&lt;/code&gt; のように大文字で表記される場合、特殊パーミッション（SetUID/SetGID/Sticky Bit）が設定されていますが、対応する実行権限（&lt;code&gt;x&lt;/code&gt;）が付与されていません。この状態では特権実行および正しいディレクトリトラバースが行われません。&lt;/p&gt;&#10;&lt;p&gt;🛠️ 解決手順（実行権限の再付与）:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# SetUIDにおける大文字Sの修正&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;chmod u+x /path/to/binary&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Sticky Bitにおける大文字Tの修正&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;chmod o+x /path/to/directory&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="監査検証コマンドログ"&gt;監査・検証コマンドログ&#10;&lt;/h2&gt;&lt;p&gt;💡 システム内の特殊パーミッション設定状況を確認するためのターミナル実行例です。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ ls -ld /usr/bin/passwd /var/mail /tmp&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;-rwsr-xr-x. 1 root root 68208 Jul 16 2022 /usr/bin/passwd&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;drwxrwsr-x. 2 root mail 4096 Aug 23 10:00 /var/mail&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;drwxrwxrwt. 15 root root 4096 Aug 23 10:00 /tmp&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ find /usr/bin /usr/sbin -perm -4000 -type f -ls&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 68208 68 -rwsr-xr-x 1 root root 68208 Jul 16 2022 /usr/bin/passwd&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;140521 144 -rwsr-xr-x 1 root root 147280 Jan 18 2024 /usr/bin/sudo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;210943 52 -rwsr-xr-x 1 root root 51832 Feb 4 2024 /usr/bin/chfn&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ find /var -perm -2000 -type d -ls&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 10482 4 drwxrwsr-x 2 root mail 4096 Aug 23 10:00 /var/mail&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ findmnt -t ext4,xfs,tmpfs&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;TARGET SOURCE FSTYPE OPTIONS&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/ /dev/sda1 xfs rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/tmp tmpfs tmpfs rw,nosuid,nodev,seclabel&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="configuration-notes"&gt;Configuration Notes&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;🛠️ &lt;b&gt;SetUIDの最小化&lt;/b&gt;: 不必要なバイナリへのSetUID付与は、ローカル権限昇格攻撃（Privilege Escalation）の脆弱性につながります。定期的に &lt;code&gt;find / -perm -4000&lt;/code&gt; を実行してシステム監査を行ってください。&lt;/li&gt;&#10;&lt;li&gt;💡 &lt;b&gt;Capabilityへの移行&lt;/b&gt;: 現代のLinuxシステムでは、バイナリ全体にroot権限を与えるSetUIDに代わり、必要最小限の権限（例: &lt;code&gt;CAP_NET_BIND_SERVICE&lt;/code&gt;）のみを付与するLinux Capabilities (&lt;code&gt;setcap&lt;/code&gt; コマンド) の利用が推奨されます。&lt;/li&gt;&#10;&lt;li&gt;⚠️ &lt;b&gt;Sticky Bitと共有ディレクトリ&lt;/b&gt;: NFS等のネットワークファイルシステムを共有する際は、クライアント側のマウント設定およびUID/GIDマッピングが正確に行われているか確認してください。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description></item></channel></rss>