以下は jupiter にリモートログインしてからおこなう
ちょっと難易度高め.
ls コマンドに -l のオプションを付けて使う.
$ ls -l
誰にどういう種類のパーミッションがおりているのか確認する. ファイルは誰の持ち物になっているか確認する.
ユーザのアカウント情報を保持している /etc/passwd という,いかにもという名前のファイルがある./etc/passwd のパーミッションをみてみる.
$ ls -l /etc/passwd
表示は
-rw-r--r-- 1 root root 5669 Oct 5 18:42 /etc/passwd
所有者とグループはroot.パーミッションは所有者にreadとwrite,グループにread,その他にread,がそれぞれ許可されている.
その他にreadの許可が出ているということは,誰でも /etc/passwd の中身を見ることができる,ということである. 本当に見えるのかどうか,試してみる
$ cat /etc/passwd
たしかに中身を見ることができる.でも見た感じ,パスワードが書いてあるようには見えない(ちょっとがっかり?).各ユーザのアカウント情報が1行につき1ユーザずつ書いてある.各行は「:」で7つのフィールドに区切られていて,実は2列目がパスワードなのだが,ここが「x」になっているとき,パスワードは /etc/passwd でなく /etc/shadow に格納されている.
/etc/shadow のパーミッションを見てみる.
$ ls -l /etc/shadow
これは
-rw-r----- 1 root shadow 8214 Oct 5 18:42 /etc/shadow
こっちのファイルは,誰でも中身を見ることができるようにはなっていない.他人のパスワードが誰にでも見えるようになっていたら,それはセキュリティに問題ありありで,パスワードを書いたファイルが見えないようになっているのは当然である.
ちなみに,所有者である root にはreadの許可が出ているので,root は /etc/shadow の中身を見ることができる.恥ずかしい文字列のパスワードを設定しているユーザは,それは非常にまずいことだと思ったかもしれないが,/etc/shadow に書き込まれているパスワードは暗号化されているので,見てもパスワードが何であるかわからない(安心しましたか?).
パーミッションはファイルのモードと呼ばれたりもする.
パーミッション(ファイルのモード)の変更は chmod コマンドを使う. まず,なにか適当な名前でファイルを作る.
$ echo ikura > sushi.txt $ ls -l
おそらくこんな感じになる.
-rw-r--r-- 1 george george 6 Oct 15 19:17 sushi.txt
このとき,所有者にreadとwrite,グループにread,その他にread,がそれぞれ許可されている. 中身を見ることができるかどうか確認してみる.
$ cat sushi.txt
自分(user)に対してファイルの中身を見る許可を出さないことにするなら
$ chmod u-r sushi.txt
ls -l を使ってパーミッションが意図したように設定されていることを確認する.
$ ls -l sushi.txt
2文字目の r が - になっていたらよい.
--w-r--r-- 1 george george 6 Oct 15 19:17 sushi.txt
許可されていないファイルの中身を見ようとすると
$ cat sushi.txt cat: sushi.txt: Permission denied
といって叱られて,ファイルの中身を見ることはできない(もし見ることができたのなら,パーミッションの変更に失敗している).
ユーザだけが中身を見ることができるようにする. まず全員に対してreadを不許可にする.
$ chmod a-r sushi.txt
確認する
$ ls -l sushi.txt
r が全て - になっているはず.
--w------- 1 george george 6 Oct 15 19:17 sushi.txt
次に,自分にだけreadを許可する.
$ chmod u+r sushi.txt
確認する
$ ls -l sushi.txt
どうなっているべきか,わかりますよね?
-rw------- 1 george george 6 Oct 15 19:17 sushi.txt
cat コマンドを使ってファイルの中身を見る.
$ cat sushi.txt
自分以外の誰かのファイルをコピーしてみる.例えば,/home/atmos/ipesc/sample/permission にあるファイルをコピーしてみる.
$ ls -l /home/atmos/ipesc/sample/permission
上のコマンドを打って /home/atmos/ipesc/sample/permission のディレクトリにあるファイルの一覧を表示すると,所有者以外にも読み取り許可の出ている yes.txt と,所有者以外には読み取り許可が出ていない no.txt の2つのファイルが見つかるはずである.
読み取り許可の出ているファイルをコピーしてみる.
$ cp /home/atmos/ipesc/sample/permission/yes.txt .
ここではコピー先のファイル名を . と書いているが,このように書くとカレントディレクトリにコピー元と同じ名前のファイルが作られる.すなわちこのコマンドが正しく実行されれば,カレントディレクトリに yes.txt という名前のファイルが生成しているはずである(Permission denied と言われてカレントディレクトリに yes.txt が生成されなかった場合には,カレントディレクトリのパーミッションを確認してみる.カレントディレクトリの書き込み許可がなければファイルを生成することはできない).
ファイルのコピーが生成したかどうか確認する.
$ cat /home/atmos/ipesc/sample/permission/yes.txt $ cat yes.txt
あるいは,
$ diff /home/atmos/ipesc/sample/permission/yes.txt yes.txt
diff はファイルの中身を比較するコマンドで,指定された2つのファイルの中身で異なる部分があるとそれを出力する(異なる部分がなければ何も出力しない).
もうひとつ,読み取り許可の出ていないファイル no.txt のコピーも試してみる.
$ cp /home/atmos/ipesc/sample/permission/no.txt .
こっちは
cp: cannot open '/home/atmos/ipesc/sample/permission/no.txt' for reading: Permission denied
と言われて,コピーを生成することに失敗する. 理由は Permission denied,意味はわかりますよね?
あと,ファイルが生成されていないことを確認する(何かやったらすぐ確認することを習慣化しましょう).