コース一覧
LinuC レベル1 102試験対策(LPIC-1対応)
特殊パーミッション

LinuC レベル1 102試験対策(LPIC-1対応)

LinuC レベル1/LPIC-1の102範囲を、シェル、ユーザーとセキュリティ、ネットワーク、システム管理の実機演習と章末問題で固めます。Linuxを安全に運用するための知識とコマンド操作を体系的に身につける25レッスンのコースです。

1
102 シェルとスクリプト
01. シェル環境18分
02. testと条件式18分
03. スクリプトの制御18分
04. cronとat15分
05. systemdタイマー18分
06. 過去問 シェル15分
2
102 ユーザーとセキュリティ
01. passwdとshadow18分
02. ユーザー管理コマンド18分
03. suとsudo18分
04. 特殊パーミッション18分
05. ホストのセキュリティ18分
06. SSHとGPG18分
07. 過去問 ユーザーとセキュリティ15分
3
102 ネットワーク
01. TCP/IPとウェルノウンポート18分
02. アドレス設定18分
03. ルーティング18分
04. 名前解決の設定18分
05. 疎通トラブルシュート18分
06. 過去問 ネットワーク15分
4
102 システム管理
01. 時刻とNTP15分
02. ロケールと文字コード18分
03. ログ管理18分
04. サービス管理の試験形式18分
05. メールと印刷のきほん15分
06. 過去問 システム管理15分

特殊パーミッション

パーミッションには、いつもの3桁の上にもう1桁あります。4755 の先頭の 4 が何なのかを説明できないと、ls -l に出る s や t も読めません。

ビット8進数シンボル意味
SUID4000u+s実行時にファイル所有者の権限で動く
SGID2000g+s実行時にファイルのグループ権限で動く。ディレクトリではグループを継承
スティッキー1000+tディレクトリ内で自分のファイルしか削除できなくなる

一般ユーザーが自分のパスワードを変えられる理由

SUID が付いた実行ファイルは、誰が実行してもファイル所有者の権限で動きます。代表例が /usr/bin/passwd です。パスワードの変更には root しか書けない /etc/shadow を書き換える必要がありますが、passwd に SUID が付いていて root 権限で動くので、一般ユーザーでも自分のパスワードを変えられます。

プレーンテキスト

-rwsr-xr-x 1 root root 68208 /usr/bin/passwd

所有者の実行権の位置が x ではなく s になっています。実行権が無いまま SUID だけを付けると、小文字ではなく大文字の S が出ます。SUID は設定されているが実行できない、という無意味な状態を示す警告で、この大文字と小文字の違いが試験で問われます。

SUID は強力なぶん危険です。設定されたプログラムに脆弱性があれば、そのまま root 権限を奪われます。棚卸しは定番のセキュリティ作業です。

ターミナル

find / -perm -4000 -type f 2>/dev/null

-perm -4000 の先頭のハイフンは「少なくともこのビットが立っている」という意味です。ハイフンなしの -perm 4000 は「ちょうど 4000 と完全一致」になり、実質何も見つかりません。SGID なら -perm -2000、スティッキーなら -perm -1000 です。

チームの共有ディレクトリで SGID が効く

ファイルに付けた SGID は SUID のグループ版で、実行時にファイルのグループ権限で動き、ls -l ではグループの実行権の位置が s になります。

より実用的なのはディレクトリに付けた場合です。SGID 付きディレクトリの中に作られたファイルとディレクトリは、作成者のプライマリグループではなく、そのディレクトリのグループを継承します。サブディレクトリには SGID 自体も引き継がれます。

/srv/project に SGID とグループ dev を設定しておけば、誰がファイルを置いてもグループは dev になり、チーム全員が読み書きできます。SGID が無いと各自のプライマリグループになってしまい、他のメンバーが触れません。

/tmp が誰でも書けるのに荒らされない理由

スティッキービットをディレクトリに付けると、その中のファイルは、ファイルの所有者かディレクトリの所有者か root しか削除できなくなります。書き込み権があっても他人のファイルは消せません。

プレーンテキスト

drwxrwxrwt 12 root root 4096 /tmp

全ユーザーが自由にファイルを作れる必要がある一方で、他人の一時ファイルを勝手に消されては困ります。この2つを両立させるのがスティッキービットです。裏を返せば、スティッキーの無い 777 は誰でも他人のファイルを消せる状態なので、共有ディレクトリを 777 にするのは避けてください。ここでも実行権が無ければ大文字の T になります。

4桁と ls -l の対応

8進数ls -l の表示意味
4755-rwsr-xr-xSUID 付きの実行ファイル
2775drwxrwsr-xSGID 付きの共有ディレクトリ
1777drwxrwxrwtスティッキー付きの誰でも書けるディレクトリ
6755-rwsr-sr-xSUID と SGID の両方

設定は数値でも、chmod u+s chmod g+s chmod +t のようにシンボルでも書けます。確認は ls -l の表示のほか、stat -c %a で8進数だけを取り出せます。

試験で狙われるところ

SUID は 4000、SGID は 2000、スティッキーは 1000 です。実行権が無いまま特殊ビットを付けると大文字の S や T になります。SGID のグループ継承はディレクトリに付けたときの話です。スティッキービットはディレクトリにのみ有効で、ファイルに付けても効きません。そして find -perm 4000 と -perm -4000 は別物です。

ヒント

特殊パーミッションは通常の3桁の前にもう1桁足すだけです。SUID が 4、SGID が 2、スティッキーが 1 です

chmod は数値でもシンボルでも書けます。chmod u+s / chmod g+s / chmod +t でも同じ結果になりますが、下位3桁も揃える必要があります

chmod 4755 /root/perm/tool.sh と chmod 2775 /root/perm/shared と chmod 1777 /root/perm/pub の3行で条件を満たせます

  • 1. ls -l /root/perm と ls -ld /root/perm/* で現在の状態を確認する
  • 2. /root/perm/tool.sh に SUID 付きの 4755 を設定する
  • 3. /root/perm/shared に SGID 付きの 2775 を設定する
  • 4. /root/perm/pub にスティッキービット付きの 1777 を設定する
  • 5. ls -l と ls -ld でもう一度見て、s と t がどこに出ているかを確かめる
  • 6. stat -c '%a %n' /root/perm/tool.sh のように8進数でも確認する

Linux は使うときに起動します(初回は約102MB通信します)

5 項目で採点します