変更要約: 初版(主題1.02・副主題1.02.1〜1.02.4に対応)
2.1ファイルの所有者とパーミッション
ファイルへのアクセスを所有者・グループ・パーミッションで制御する方法を学びます。ls -l の読み方、chmod(記号/数値モード)、chown・chgrp による所有者変更、umask による作成時の既定値、SUID・SGID・スティッキービット を押さえます。
Linux は複数ユーザーが同居する前提の OS です。「誰が読めて、誰が書けて、誰が実行できるか」をファイルごとに決める仕組みがパーミッションで、セキュリティの土台としてほぼ毎回の運用作業に登場します。
2.1.1パーミッションの読み方と変更
- ls -l の先頭10文字=ファイル種別1字+rwx×3組(所有者/グループ/その他)。例
-rwxr-xr--=所有者 rwx・グループ r-x・その他 r--。 - chmod の数値(8進)モード=r=4・w=2・x=1 の合計を3桁で並べる(例
chmod 754 file=rwxr-xr--)。記号モード=chmod u+x,g-w,o=r fileのように u/g/o/a と +/-/= で指定。 - 所有者の変更=chown(
chown user01 file/chown user01:dev fileで所有者とグループを同時に)。グループのみ=chgrp。 - umask=新規作成時に落とすビットを決める既定値。ファイルは 666−umask・ディレクトリは 777−umask が実効値(umask 022 → ファイル 644・ディレクトリ 755)。
2.1.2SUID・SGID・スティッキービット
- SUID(4000・所有者の x 位置に s)=実行時にファイル所有者の権限で動く(例
/usr/bin/passwd。一般ユーザーが /etc/shadow を更新できる理由)。 - SGID(2000・グループの x 位置に s)=実行ファイルではグループ権限で実行。ディレクトリに付けると、その中に作られるファイルがディレクトリのグループを継承する(共有ディレクトリの定石)。
- スティッキービット(1000・その他の x 位置に t)=ディレクトリ内のファイルを所有者しか削除できなくする(例
/tmp=drwxrwxrwt)。
「一般ユーザーがパスワードを変更できる仕組み=passwd の SUID」「共有ディレクトリでグループを継承させる=ディレクトリへの SGID」「/tmp で他人のファイルを消せない=スティッキービット」 の3点セットが最頻出です。数値では 4=SUID・2=SGID・1=sticky を先頭桁に足します(例 chmod 2775 /shared)。umask の計算(022→644/755)も定番です。
運用で迷わないコツは「誰として動くか」と「どこに効くか」で特殊ビットを整理することです。SUID は実行ファイル専用の考え方で、動作中だけ所有者(多くは root)の力を借ります。だからこそ SUID 付きファイルはセキュリティ監査の対象です(1.10 で find / -perm -4000 として再登場します)。SGID は実行ファイルでは SUID のグループ版ですが、実務での主役はディレクトリへの付与=プロジェクト共有フォルダで「誰が作ってもグループ dev のファイルになる」を実現します。スティッキービットは削除だけを制限するディレクトリ専用の仕組みで、全員が書ける /tmp の秩序を守っています。umask はログインシェルの初期化ファイルで設定される「新規作成の既定」で、既存ファイルには影響しない点に注意してください。ls -l で s/t が大文字(S/T)で表示されたら、対応する実行ビット x が無い状態を示します。
| 特殊ビット | 数値・表示 | 効果の要点 |
|---|---|---|
| SUID | 4000・所有者欄に s | 所有者の権限で実行(passwd) |
| SGID(実行ファイル) | 2000・グループ欄に s | グループ権限で実行 |
| SGID(ディレクトリ) | 2000・グループ欄に s | 新規ファイルがグループを継承 |
| スティッキービット | 1000・その他欄に t | 所有者以外は削除不可(/tmp) |
ひっかけ: 「umask 022 を設定すると新規ファイルは 755 になる」は誤りです。ファイルの起点は 666(実行ビットは付かない)なので 644 です。755 になるのはディレクトリ(起点 777)。また「SUID をディレクトリに付けると所有者を継承する」も誤り=所有者継承の仕組みはなく、グループ継承(ディレクトリの SGID)だけが存在します。
2.1.3この節のまとめ
- r=4/w=2/x=1 の3桁+先頭に 4=SUID/2=SGID/1=sticky。変更は chmod/chown/chgrp・既定は umask(ファイル666−/ディレクトリ777−)
- SUID=所有者権限で実行(passwd)/SGID ディレクトリ=グループ継承/sticky=/tmp の削除制限
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. ファイルを「所有者は読み書き、グループとその他は読み取りのみ」にしたい。適切なコマンドは?
Q2. 共有ディレクトリ /shared で、誰がファイルを作ってもディレクトリと同じグループ所属になるようにしたい。付与すべき特殊ビットは?
Q3. umask が 022 のとき、新規作成した通常ファイルのパーミッションはどうなる?

