誰でも開ける給与ファイル
小さな会社が、共有サーバに給与のファイルを置いていました。入社したばかりの人がフォルダを開くと、それが見つかりました。
ログインできる人なら、全員の給料を読めてしまいます。
誰も攻撃していません。ファイルの権限が間違っていただけです。このレッスンは、それを正しく直す練習です。
このレッスンのゴール
メモ
誰がファイルを読み、書き、実行できるかを言い、それを変えることができる。
キーワード
| ことば | いみ | れい |
|---|---|---|
| 所有者 | そのファイルの持ち主になっている、1人のユーザー | |
| グループ | ファイルを共有するユーザーをまとめて、名前を付けたもの | |
| その他 | 所有者でもグループの一員でもない、すべての人 | |
| root | なんでもできる管理者のアカウント | |
| sudo | 1つのコマンドだけを root として実行する | sudo whoami |
| setgid | フォルダの設定。中で作ったファイルがフォルダのグループになる | 2750 |
学生が入力するセルは、このプレビューでは空白です。
3種類の人と、3つの権利
どのファイルにも、所有者とグループがあります。それ以外の人がその他です。
この3種類ごとに、読む(r)、書く(w)、実行する(x)ことを許すかどうかが決まっています。
フォルダでは、r は中の一覧、w は中のファイルの追加と削除、x は中に入ることを表します。
自分は誰か
idここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
フォルダのモードと持ち主を読む
stat -c "%a %A %U %G" /srv/projectsここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
例: モードの読み方
| モード | 所有者は | グループは | その他は |
|---|---|---|---|
| rwxr-x--- | 読む、書く、実行 | 読む、実行 | 何もできない |
| rw-rw-r-- | 読む、書く | 読む、書く | 読むだけ |
| rw------- | 読む、書く | 何もできない | 何もできない |
| rwxr-xr-x | 読む、書く、実行 | 読む、実行 | 読む、実行 |
学生が入力するセルは、このプレビューでは空白です。
chmod でモードを変える
chmod はモードを変えます。chmod 640 payroll.txt のように、3桁の数字で渡せます。
足すものや引くものを言う書き方もあります。g+w はグループに書く権利を足します。o-r はその他から読む権利を引きます。
順に実行しましょう。ls -l を打つたびに、新しいモードが見えます。
空のファイルを作る
touch payroll.txtここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
所有者は読み書き、グループは読む
chmod 640 payroll.txtここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
モードを見る
ls -l payroll.txtここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
グループにも書かせる
chmod g+w payroll.txtここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
もう一度見る
ls -l payroll.txtここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
「permission denied と出たら、chmod 777 で直る」と考える人が多くいます。でもそれは、マシンの全ユーザーがファイルを書き換えられる状態です。誰に権利が必要かを調べて、その所有者かグループにだけ与えましょう。
ユーザー、root、sudo
人にもサービスにも、ユーザーのアカウントがあります。ふつうのユーザーが他の人のファイルを開けるのは、そのファイルのモードが許すときだけです。システムの大事なファイルは、ふつう書き換えられません。
root はなんでもできます。1日中 root で作業してはいけません。sudo は、1つのコマンドだけを root で実行します。終われば、またふつうのユーザーです。
ふつうのユーザーは断られる
ls /rootここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
同じユーザーが sudo を付ける
sudo whoamiここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ファイルを root のものにする
sudo chown root payroll.txtここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
所有者を見る
ls -l payroll.txtここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
自分に戻す
sudo chown student payroll.txtここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
共有フォルダにはグループと setgid
チームでフォルダを共有します。たとえば sales というグループを作り、usermod -aG sales 名前 でメンバーを入れます。
フォルダのグループは chgrp で決めます。そのあとで、グループに許すことを決めます。
setgid を足します。2750 の先頭の 2 です。こうすると、誰が作ったファイルも、フォルダのグループに入ります。
練習用のフォルダを作る
mkdir -p teamdemoここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
setgid、グループは読んで入れる、その他はなし
chmod 2750 teamdemoここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
s を探す
ls -ld teamdemoここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。