Linux 権限の見方と変更の仕方 -- rwx と 752 --
why
ファイルの詳細確認記事を書いていたら、権限まわりが長くなったので、単体で記事にした
ファイルの権限について - rwx rw- r-- などの文字列の詳細
ls -l で各情報を表示
ls -l
では 各ファイルの種類や時刻のほかに、
パーミッション ( 権限 ) も表示されている。
空の テキストファイルと空のディレクトリを作って見てみる。
ls -l -rw-r--r-- 1 kaede staff 21 Apr 14 22:40 2234.txt drwxr-xr-x 2 kaede staff 64 Apr 14 23:23 testDir
空のファイルと空のフォルダの例で各項目をみていく
最初の -
と d
が そのアイテムの種類になる。-
がファイルで d
がディレクトリ
そこから そのユーザー、グループ、その他のユーザーの読み書き実行権限が表示されている。
read と write と execute の 3 つの操作を、自分とグループのメンバーと他人ができる権限があるかが示される。
2234.txt ファイルでの -rw-r--r-- の詳細
先ほどの例の 2234.txt では -rw-r--r-- を
-
( This is a file)
rw-
( 自分は読み書きができるが実行ができない )
r--
( グループでは読めるが、書き込みも実行もできない )
r--
( 他のユーザでは読めるが、書き込みも実行もできない )
に分解できる。
testDir ディレクトリでの drwxr-xr-x の詳細
一方 testDir での結果では drwxr-xr-x
となっていて、分解すると
d
( This is a directory)
rwx
( 自分は読み書き実行が全てできる )
r-x
( 所属グループでは読みと実行はできるが、書き込みができない )
r-x
( その他のユーザでは読みと実行はできるが、書き込みができない )
となる
ディレクトリの「実行」はディレクトリの中にファイルやディレクトリを作ったり削除すること。
数字での表し方 と付け方 -- chmod
これらの Read, Write, Exe, の権限は数字でも表せる。この数字のことをモードビットというらしい。
足し算で権限のパワーがわかる。
Read は 4
Write は 2
Exe は 1
なので
読み書き実行全部できる場合は 7
読み書きはできるが、実行権がない場合は 6
中身の確認と実行はできるが、書き込みができない場合は 5
読めるだけの場合は 4
になる。
それを 前述の 自分に与える権限、グループのメンバーに与える権限、他人に与える権限、で 3 つ並べるので、よく環境構築で出てくる
chmod 755
のように 3 つ並ぶことになる。
chmod は権限をファイルなどにつけるコマンド。
以前 Twitter で話題になっていた 脳死で 777 をつけると危険というのは、グループのメンバや他人にまで 書き込み権限や実行権限を与えるのは危険だということだと理解できた。
umask でのデフォルト権限の引き算
https://eng-entrance.com/linux-command-umask#umask
またファイル作成時のデフォルトの権限は umask という値に基づいて決定されている。
umask で現在の umask 値を確認できる。
umask 値は 権限とは逆で 7 が最弱で 0 が最強になる。7から引いた値になる。
デフォルトは 002 なので
ファイルを作ると 775 になり
umask を変更して 755 にすると
作成されるファイルは 022 になる。
umask で6も7も変わらない問題
ファイルの場合は で umask 777 でも exe がつかない。基本的に実行するものでは無いかららしい。
なので umask 777 も 666 も変わらない
一方、ディレクトリは実行して中に入るものなので、 umask 777 では exe がなくて入れないが、666 では入れる。
chomod での実例
umask 022 の設定で作成した file というファイルがある
ll file -rw-r--r-- 1 root root 0 Jun 13 18:57 file
作成ユーザーの読み書き、グループのユーザーの読み、その他のユーザーの読み、のみが許可されているファイルが作成された
これを chmod で変更してみる。
chmod 000 file ll file ---------- 1 root root 10 Jun 13 19:01 file
権限が なにもなし になった。
なお、root ユーザーだからか、読み取り権限をなしにしても cat や vi で表示することはできてしまった
chmod 752 file -rwxr-x-w- 1 root root 10 Jun 13 19:01 file*
7 の read write exe, 5 の read exe, 2 の write, に変更できた
また、数字での指定のほかに、user + exe で u+x のように変更することもできる
chmod g+w file -rwxrwx-w- 1 root root 10 Jun 13 19:01 file*
group に write を追加して
chmod u-r file ll file --wxrwx-w- 1 root root 10 Jun 13 19:01 file*
user の read 権限を引いた。
chmod o=rwx file ll file --wxrwxrwx 1 root root 10 Jun 13 19:01 file*
= を使って指定することもできる。
other の権限を read write exe にした。
chmod a-rwx file ll file ---------- 1 root root 10 Jun 13 19:01 file
a は all 。 すべてから read write exe の権限を引いた。
まとめ
ls -l で ファイルやフォルダの権限情報が出せる
drwxr-xr-x だったら d, rwx, r-x, r-x, と分割して
これはディレクトリで、自分は read write execute ができて、グループのメンバー は write のみができなくて、他人も write のみができない、と中身をみることができる。
また権限の強度を 7 ~ 4 で与えられて、グループや他人にまで 7 のパワーを与えるととてもまずい。
記号で user, group, other, all に + や - や = で rwx を設定することもできる
次にやりたいこと
グループのメンバーや他人ができる権限をこれでできて〜と書きつつも実際に試せていない。
他のユーザーを作ってログインして、実際に実行してみたり、
他人としてシェルに入って実行してみたり、実際に試して結果を付け加えたい