TT Lab
はじめる
学ぶ 学習パス コース

Linux基礎

権限・ユーザ・グループを扱う

TT Labで続きを見る

目標

ユーザーとグループを作り、共有ディレクトリに必要な特殊ビットを掛け、権限が期待どおりかを自分で点検するスクリプトまで作ります。

なぜ重要なのか

権限の事故の大半は、「ファイルの権限」だけを見て「ディレクトリの権限」を忘れることから起きます。ファイルを消すのに必要なのは、そのファイルへの書き込み権限ではなく、そのファイルが入っているディレクトリへの書き込み権限です。そのため読み取り専用のファイルでも他人に消すことができ、Unix はその穴をふさぐために sticky ビットを別に用意しました。同じ理由で、複数人が使うディレクトリには setgid が必要です。掛けないと、各自が自分の基本グループでファイルを作り、お互いに読めない状況が繰り返されます。

ステップ

  1. /root/secret.txt を作り、権限を 600 にしてください。
  2. student1 ユーザーを作ってください。
  3. devs グループを作り、student1 をそのグループに入れてください(既存のグループは維持)。
  4. /root/shared/report.txt を作り、所有者:グループを student1:devs に変更してください。
  5. /root/shared ディレクトリのグループを devs にし、権限を 2770 にしてください。
  6. /root/shared/incoming ディレクトリを作り、権限を 1777 にしてください。
  7. /root/shared/run.sh を作り、権限を 750 にしてください。
  8. /root/shared/checkmode.sh <파일경로> <기대권한>(ファイルパスと期待する権限)を作ってください。実行権限が必要で、権限が一致すれば終了コード 0、異なれば 0 以外のコードで終了しつつ、現在の権限を出力しなければなりません。ファイルがないときも 0 以外のコードでなければなりません。

参考

秘密ファイルの権限をロックする

/root/secret.txt を作り、権限を 600 にしてください。

8進数の3桁は、所有者/グループ/その他の順です。所有者だけが読み書きできるようにするには?

ユーザーを作る

student1 ユーザーを作ってください。

useradd で作成します。id コマンドで確認できます。

グループを作ってユーザーを入れる

devs グループを作り、student1 をそのグループに入れてください(既存のグループは維持)。

groupadd でグループを作り、usermod で補助グループに追加します。-a を外すと既存のグループが消えます。

所有者とグループを変更する

/root/shared/report.txt を作り、所有者:グループを student1:devs に変更してください。

chown は所有者:グループの形式を一度に受け取ります。ファイルが先に存在している必要があります。

共有ディレクトリに setgid を掛ける

/root/shared ディレクトリのグループを devs にし、権限を 2770 にしてください。

8進数4桁のうち、いちばん前の桁が特殊ビットです。グループの継承を担当する値を探してください。

アップロード用ディレクトリに sticky を掛ける

/root/shared/incoming ディレクトリを作り、権限を 1777 にしてください。

/tmp の権限を ls -ld で確認してみてください。同じ形にすれば大丈夫です。

実行スクリプトの権限を整える

/root/shared/run.sh を作り、権限を 750 にしてください。

所有者は読み取り・書き込み・実行、グループは読み取り・実行、その他は何もない組み合わせです。

権限を点検するスクリプトを作る

/root/shared/checkmode.sh <파일경로> <기대권한>(ファイルパスと期待する権限)を作ってください。実行権限が必要で、権限が一致すれば終了コード 0、異なれば 0 以外のコードで終了しつつ、現在の権限を出力しなければなりません。ファイルがないときも 0 以外のコードでなければなりません。

stat -c %a で現在の権限を読み、期待値と比較してください。結果は終了コードで知らせ、不一致のときは現在の権限もあわせて出力します。