アクセス権のコマンド/運用演習
開発チームが共有するreportの権限を設計します。誰に何を許すかを先に表にし、数値への変換、変更コマンド、変更後の確認を順に行います。全例で通常利用者を想定し、特記がなければACL・特殊ビット・SELinux等の追加制約はないものとします。
この単元で学ぶこと
- 所有者・グループ・その他の判定を説明できる
- 数値とシンボリック表記で標準権限を変更できる
- ファイルの内容変更と名前の削除に必要な権限を区別できる
本文解説
事例の利用者 reportの所有者はalice、所有グループはdevです。bobはdevに所属し、carolはdevに所属しません。aliceは所有者、bobはグループ、carolはその他の組を使います。alice自身もdevに所属していても、所有者とグループの許可を合算しません。
要件から640を作る aliceは読み書き、bobは読取り、carolはアクセス不可とします。通常ファイルなので実行は不要です。所有者は4+2=6、グループは4、その他は0で640になります。読取り可能であるためにはreportの親ディレクトリまで探索できることも必要です。
編集者を増やす bobにも編集を許す変更はchmod g+w reportです。640から660になり、aliceとbobは読み書きできます。carolの組は0のままです。全員へ書込みを足すa+wや、全権限を与える777は、要件にない対象まで広げます。
共有を終了する グループとその他の許可を全部外し、所有者の読み書きを維持するならchmod go-rwx reportで660から600になります。chmod g=w reportはグループを「書込みだけ」へ置き換えるので、640から620になります。追加の+と置換の=を同じ意味で読まないでください。
共有ディレクトリを考える teamディレクトリが750ならaliceは一覧取得・探索・名前の追加削除が可能、bobは一覧取得と探索が可能、carolは不可です。bobにteam内の名前の追加削除も許すなら770が候補です。ファイルの内容を読めるかは、そのファイル自身のmodeも調べます。
読取り専用と削除 reportが440でbobに内容の書込みを許さなくても、親teamが770でbobにwとxがあれば、特殊制約がない前提でbobはreportの名前を削除できる場合があります。名前の削除を禁止したい要件を、ファイルのwを外すだけで実装しないようにします。
実習の手順 自分のLinux実習環境でlesson_dir=$(mktemp -d)、printf "draft\n" > "$lesson_dir/report"を実行します。chmod 640、chmod g+w、chmod go-rwxを同じreportへ順に実行し、その都度stat -c "%a"で640、660、600を確認します。最後にchmod 640からchmod g=wへ変えて620を確認します。所有ユーザーを実際に切り替える実習とは分け、ここではmodeの変更結果を観測します。
検証を二段階にする statで数値、ls -lで所有者とグループを確認するのが設定検証です。別の利用者から実際にアクセスできるかは動作検証であり、親ディレクトリやグループ所属も含めた確認が必要です。特権ユーザーだけで読めたことを一般利用者の成功証拠にしません。実習用ファイルは内容とパスを記録し、実システムの共有ファイルへコマンドを流用しないでください。
図解
重要ポイント
- rwxは所有者・グループ・その他の三組で表す。
- r=4、w=2、x=1を組ごとに足す。
- chmodは権限、chown/chgrpは所有者・グループを変える。
- ディレクトリのxは探索、wは名前の追加削除に関係する。
間違えやすい点
- 所有者・グループ・その他の許可を合算しない。
- 読取り専用ファイルだから削除できない、と判断しない。
- chmodで許可した操作がACLやSELinux等にも必ず許されると思わない。
用語解説
- 所有者
- ファイルを所有するユーザー。
- 所有グループ
- ファイルに設定されたグループ。該当利用者にはグループの組を適用する。
- mode
- 読取り・書込み・実行などの許可を表すビットの組。
- 探索権
- ディレクトリ内の名前を使い配下へ到達するためのx権限。
- シンボリック表記
- u/g/o/aとr/w/xなどを組み合わせて権限変更を表す方法。
関連教材
参考資料
教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。
- https://www.gnu.org/s/coreutils/manual/html_node/File-permissions.html
- https://www.gnu.org/s/coreutils/manual/html_node/Symbolic-Modes.html
- https://www.gnu.org/s/coreutils/manual/html_node/Numeric-Modes.html
- https://man7.org/linux/man-pages/man7/path_resolution.7.html
- https://man7.org/linux/man-pages/man2/chmod.2.html
確認問題の出題・採点や学習履歴の保存にはログインが必要です。