UNIX講習会#7 Permission編


Permission とは?

  • だれがどのファイルを編集できるかを制限できるもの
  • ユーザー,グループ,その他の単位で制限できる
    • 強制アクセス制御を用いることでもっと細かく制限できるがここでは割愛
  • 大規模計算機など複数人で共有するマシンでは適切なパーミッションを設定することが重要

Permission の基本

  • 制御の単位は「書き込み・読み込み・実行」を「自分・グループ・その他」に対して制御する
  • ls -lで現在のパーミッションを確認できる
$ ls -lh
合計 344M
-rw-r--r--.  1 hogehoge foo  36M  6月 10 22:52 Python-2.7.10-centos6.tar.xz
drwxr-xr-x. 15 hogehoge foo 4.0K  6月 11 00:33 R-3.2.0/
  • 最初のdrwxr-xr-xとなっている部分がパーミッションを表す.
  • hogehoge fooの部分は最初が所有しているユーザー名,次がグループ名

Permission の読み方

  • drwxr-xr-xの部分は4つにわけて考える
  1. dの部分はディレクトリか否かを表す
  2. 次のrwxは所有しているユーザーの権限を表す
    • rは読み込み可(Directoryでは一覧を取得可)
    • wは書き込み可(Directoryはファイルの作成や削除ができる)
    • xは実行可(Directoryではアクセス可)
  3. その次のr--はグループに所属するユーザーの権限を表す
    • 各項目は所有ユーザーと同じで,権限がない場合には-になる
  4. 最後のr--はその他のユーザーの権限を表す

自分の所属するグループの確認法

  • idコマンドで確認できる
$ id
uid=1001(hogehoge) gid=1004(foo) groups=1004(foo),1007(bar)
  • この例ではユーザーhogeはグループfoobarに属している
  • どのようなユーザーやグループが存在しているかはgetent passwdgetent groupで調べることができる
    • ファイルとしては/etc/passwd/etc/groupに書かれているが,環境によってはすべて書かれているとは限らないのでgetentで調べる

Permissionの変更方法

  • chmodで変更できる(Change Modeの略)

  • すべてのユーザーに対して実行権限を付加する

    • chmod +x hoge
  • すべてのユーザーに対して実行権限と読み込み権限を付加する

    • chmod +rx hoge
  • 所有しているユーザーに対して書き込み権限を付加する

    • chmod u+w hoge
  • 所有しているユーザーとグループに対してに対して読み込み権限を付加する

    • chmod ug+r hoge
  • chmod [ugo]+[rwx] FILE で権限を付加する

    • uが所有ユーザー,gは所有グループ,oはその他
    • rは読み込み,wは書き込み,xは実行権限
  • chmod [ugo]-[rwx] FILE で権限を剥奪する

  • これ以外に現状にかかわらず特定のパーミッションに設定することもできる

  • chmod 600 FILEは所有ユーザーにのみ読み書きの権限を与える

  • 権限の種類で数字を決定する

    • 1は実行権限
    • 2は書き込み権限
    • 4は読み込み権限
    • これらの数字の和を使う
  • 3桁の数字は前から所有ユーザー,所有グループ,その他のユーザー


Ownerの変更方法

  • ファイルの所有者を変更にするにはchownコマンドを使用する(Change Ownerの略)
  • chown USER:GROUP FILE...として使う
  • 管理者権限がない場合には所有ユーザーを書き換えることはできない
$ chown hogehoge:bar sample.txt

この例ではsample.txtを所有ユーザーをhogehogeに,所有グループを
barに書き換えている


課題

  1. 自分のホームディレクトリに自分とstudentグループに所属する人だけが見れるファイルを作成しなさい
  2. 自分のホームディレクトリに自分以外のユーザーが書き込めるけど中身をみることができないディレクトリを作成しなさい
  • テスト用環境では学部生はstudentundergraduateに所属し,院生は studentgraduateグループに所属している

こたえ

  • chmod 640 FILEchown :student FILEを実行する
  • chmod 733 DIRを実行する
    • フォルダの中身にアクセスし,ファイルの作成などはできるが,リストはとれない

まとめて変更する

  • chmodchown-Rオプションをつけることでディレクトリの中身をまとめて変更できる
  • 多くの場合,ディレクトリは755にして,ファイルは644にするが,-Rでやると区別がつかないので注意
    • その場合にはfindと組み合わせるとよいがここでは解説しない

補足:実行権限とは?

  • 実行可能なプログラムには実行権限をつける必要がある
  • 実行可能なプログラムはCをコンパイルして作ったバイナリの他,Shell Script や Python のプログラムが含まれる
  • Python のプログラムではpython SCRIPT.pyの様に実行する場合には実行権限をつける必要はないが,./SCRIPT.pyとして,pythonをつけずに実行する場合には権限をつける必要がある
    • 1行目に#!/usr/bin/env pythonといった Shebang を書く必要がある
    • Ruby や Shell Script も同様

補足:rootユーザーとは?

  • rootユーザーはパーミッションを無視してすべてのファイルが読み書き可能
    • 実行権限だけは所有のパーミッションの影響を受ける
  • sudoを使うことで一時的にrootユーザーになれる
    • ただし,許可されている場合のみ

余談

  • 誰がログインしているかはwhoコマンドで調べられる
  • 誰が何をしているかはwコマンドで調べられる
  • 誰がどのようなコマンドが実行しているかはps auxで調べられる

まとめ

  • Permission は誰がどのファイルにアクセスでき,読み込みや書き込み,実 行ができるのかを制限できる
  • chmodchownでパーミッションを変更したり,所有者を変更することが できる