パーミッションの変更

chmod

chmod コマンドでパーミッションの変更を行う時、2種類の指定方法がある

  • 記号
chmod a+rx hoge.txt
  • 数値
chmod 755 hoge.txt

数値の方は、過去に書いた気がするので割愛

記号での記述の仕方

chmod 利用者を表す記号 オペレータ アクセス権 ファイル名
利用者を表す記号
u ファイルの所有者(「user」の略)
g ファイルに設定されている所有グループ(「group」の略)
o その他のユーザー(「other」の略)
a すべてのユーザー(「all」の略)
オペレータ
+ 許可を加える
- 許可を取り消す
= = で設定した権利のみを設定する
アクセス権
r 読み出し(「read」の略)
w 書き換え(「write」の略)
x 実行(「execute」の略)
  • read はファイルを閲覧することができる
  • write はファイルに書き込み、上書きして保存ができる
  • execute はファイルを実行することができる。(ls コマンドの実態は /bin/ls ファイルの用に)

※ ファイルを削除できるかどうかは、そのファイルが置かれているディレクトリのパーミッションに依存する。ディレクトリの書き換え権限が許可されていればファイルは削除できてしまう。

ディレクトリのパーミッション

  • read ディレクトリ内のファイルの一覧を表示できる。(ls コマンドを実行できる)
  • write ディレクトリ内でのファイルの作成、削除、名前変更ができる(コピーは可)
  • execute ディレクトリの中に進めるかどうか。(cd コマンドでの移動、find コマンドでのディレクトリ内の検索、さらにファイルの作成もできない)

マスク値

ファイルを新規作成、コピーした時、Linux が指定する値からマスク値という数値を減算して決定される

ディレクトリ ファイル
Linux が指定する値 777 666
unmask値(root) 022 022
設定されるパーミッション(root) 755 644
ディレクトリ ファイル
Linux が指定する値 777 666
unmask値(一般ユーザー) 002 002
設定されるパーミッション(一般ユーザー) 775 664

unmask値は、シェルの初期設定ファイル bashrc に設定されている

  • /etc/bashrc
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
   umask 002 # 一般ユーザー
else
   umask 022 # root
fi

コピー時、パーミッションを変更したくない場合

cp コマンドに -p オプションを付ける

cp -p hoge.txt hogehoge.txt