KAEDE Hack blog

JavaScript 中心に ライブラリなどの使い方を解説する技術ブログ。

Linux 権限の見方と変更の仕方 -- rwx と 752 --

why

ファイルの詳細確認記事を書いていたら、権限まわりが長くなったので、単体で記事にした

ファイルの権限について - rwx rw- r-- などの文字列の詳細

www.guru99.com

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 を設定することもできる

次にやりたいこと

グループのメンバーや他人ができる権限をこれでできて〜と書きつつも実際に試せていない。

他のユーザーを作ってログインして、実際に実行してみたり、

他人としてシェルに入って実行してみたり、実際に試して結果を付け加えたい