「ls -l で出てくる rwsr-xr-x の s や、/tmp に付いている t は何を意味しているの」
通常の読み書き実行(rwx)は理解できても、この特殊な s や t でつまずく方は少なくありません。
これらは「特殊パーミッション」と呼ばれる仕組みで、SUID・SGID・スティッキービットの3種類があります。仕組みを正しく理解しておくと、権限まわりの動きが腑に落ち、セキュリティ上の落とし穴も避けられるようになります。
この記事では、SUID・SGID・スティッキービットそれぞれの意味と用途、chmod による記号指定と数値指定(4000・2000・1000)の両方の設定方法、passwd や /tmp の実例、そして設定時に必ず押さえておきたいセキュリティ上の注意点までを解説します。
動作確認は RHEL 9.4 / Ubuntu 24.04 LTS で行っています。
この記事のポイント
・ SUIDはファイル所有者の権限で実行させる仕組み(例:passwd)
・ SGIDはグループの権限継承、スティッキーは削除制限を行う
・ chmod は記号(u+s・g+s・+t)と数値(4000・2000・1000)で設定する
・ SUIDの付いたファイルは権限昇格の踏み台になり得るため要注意
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
特殊パーミッションとは|通常のrwxとの違い
特殊パーミッションに入る前に、通常のパーミッションを一度おさらいします。Linuxのファイルには「所有者・グループ・その他」の3区分ごとに、r(読み取り)・w(書き込み)・x(実行)の権限が設定されています。基本の読み方に不安がある方は、先にLinuxのパーミッション入門に目を通しておくと、この先がスムーズに理解できます。特殊パーミッションは、この通常のrwxに「もう1段上の挙動」を加える仕組みです。通常の3区分(合計9ビット)に対して、特殊パーミッションは先頭にもう1桁を加えた4桁目で表現されます。
| 種類 | 記号指定 | 数値(4桁目) | 主な対象 |
|---|---|---|---|
| SUID | u+s | 4000 | 実行ファイル |
| SGID | g+s | 2000 | 実行ファイル・ディレクトリ |
| スティッキービット | +t | 1000 | ディレクトリ |
SUID(Set User ID)|所有者の権限で実行させる
SUIDが設定された実行ファイルは、それを実行したユーザーが誰であっても、「ファイル所有者の権限」で動作します。代表例が
/usr/bin/passwd です。一般ユーザーがパスワードを変更できるのは、passwdにroot所有のSUIDが設定されているためです。パスワードの実体(/etc/shadow)はrootしか書き込めませんが、passwdを実行する一瞬だけroot権限で動くことで、安全に変更が成立します。# passwd の権限を確認する(所有者の x の位置が s になっている) [admin@server01 ~]$ ls -l /usr/bin/passwd -rwsr-xr-x 1 root root 27856 Feb 15 2024 /usr/bin/passwd
x ではなく s になっているのがSUIDの目印です。1. 記号指定で設定する
# u+s で SUID を付与する sudo chmod u+s /usr/local/bin/mytool # SUID を外す sudo chmod u-s /usr/local/bin/mytool
2. 数値指定で設定する(4000)
数値で指定する場合は、通常の3桁の前にSUIDを表す4 を付けて4桁にします。たとえば 4755 は「SUID+所有者rwx・グループrx・その他rx」を意味します。# 4755 = SUID(4) + rwxr-xr-x sudo chmod 4755 /usr/local/bin/mytool
SGID(Set Group ID)|グループ権限の継承と共有ディレクトリ
SGIDは対象によって挙動が変わります。実行ファイルに付けると「所有グループの権限」で動作し、ディレクトリに付けると「その中で作られたファイルが親ディレクトリのグループを引き継ぐ」ようになります。実務で特に役立つのが後者です。チームで共有するディレクトリにSGIDを付けておくと、誰がファイルを作っても自動的に共有グループに揃うため、「作った人のグループになっていて他のメンバーが触れない」というトラブルを防げます。
# 共有ディレクトリに SGID を付与(記号指定) sudo chmod g+s /var/shared/team # 数値指定なら 2 を先頭に付ける(2775) sudo chmod 2775 /var/shared/team # 確認(グループの x の位置が s になる) [admin@server01 ~]$ ls -ld /var/shared/team drwxrwsr-x 2 root devteam 4096 May 31 10:00 /var/shared/team
s になっているのがSGIDの目印です。スティッキービット|共有ディレクトリの削除を制限する
スティッキービットをディレクトリに付けると、そのディレクトリ内のファイルは「ファイルの所有者とroot以外は削除・名前変更できない」状態になります。代表例が
/tmp です。/tmp は誰でも書き込めますが、もし削除も自由にできてしまうと、他人が作った一時ファイルを勝手に消せてしまいます。スティッキービットが、この事故を防いでいます。# /tmp のスティッキービットを確認(その他の x の位置が t になる) [admin@server01 ~]$ ls -ld /tmp drwxrwxrwt 10 root root 4096 May 31 10:00 /tmp # スティッキービットを付与(記号指定) sudo chmod +t /var/shared/uploads # 数値指定なら 1 を先頭に付ける(1777) sudo chmod 1777 /var/shared/uploads
t になっているのがスティッキービットの目印です。
大文字のS・Tに注意|実行ビットがない場合の落とし穴
特殊パーミッションを設定したときに、目印が小文字のs・t ではなく、大文字の S・T で表示されることがあります。これは「もとの実行ビット(x)が付いていない」ことを示すサインです。# 実行ビットなしで SUID を付けると大文字 S になる [admin@server01 ~]$ chmod 4644 sample ; ls -l sample -rwSr--r-- 1 admin admin 0 May 31 10:00 sample
・大文字 S/T:実行ビット(x)がなく、特殊パーミッションが意図通りに機能しない状態。
SUIDやSGIDを設定したのに思った通りに動かないときは、まずこの大文字・小文字を確認してください。実行ビットを付け直せば(例:
chmod u+x)小文字に変わり、正しく機能するようになります。セキュリティの注意点|SUIDは権限昇格の踏み台になる
SUIDは便利な仕組みですが、扱いを誤ると重大なセキュリティリスクになります。root所有のSUIDファイルに脆弱性があると、一般ユーザーがそれを突いてroot権限を奪う「権限昇格」の踏み台にされかねません。実際の攻撃でも、まず狙われるのがこの不要なSUIDファイルです。1. SUIDファイルを棚卸しする
サーバーのセキュリティ監査では、システム全体のSUID/SGIDファイルを定期的に洗い出し、身に覚えのないものがないか確認します。# SUID が設定されたファイルを全検索する(権限のないディレクトリのエラーは捨てる) sudo find / -perm -4000 -type f 2>/dev/null # SGID が設定されたファイルを全検索する sudo find / -perm -2000 -type f 2>/dev/null
chmod u-s)ことを検討します。2. 自作スクリプトにSUIDを付けても効かない
実務でよくある誤解が、「シェルスクリプトにSUIDを付ければroot権限で動かせる」というものです。現在のLinuxカーネルは、セキュリティ上の理由から、スクリプト(シェルスクリプトなど)に付けられたSUIDを無視します。SUIDが効くのはコンパイル済みのバイナリだけです。スクリプトを特権で実行したい場合は、SUIDではなく
sudo の設定(visudo)で対象コマンドを限定して許可するのが、安全で正しい方法です。
本記事のまとめ
特殊パーミッションは「s・t という目印」と「4桁目の数値」をセットで覚えると、見ても設定しても迷わなくなります。| やりたいこと | コマンド |
|---|---|
| SUIDを付ける(実行ファイル) | chmod u+s ファイル名 |
| SGIDを付ける(共有ディレクトリ) | chmod 2775 ディレクトリ名 |
| スティッキービットを付ける | chmod 1777 ディレクトリ名 |
| SUIDファイルを棚卸しする | find / -perm -4000 -type f |
Linux無料マニュアルを受け取る >>
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 前のページへ:sshd_configの設定ガイド|Port変更・rootログイン禁止・鍵認証設定の手順
- この記事の属するカテゴリ:セキュリティへ戻る

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