前の記事では、 Linuxのディレクトリ構造 について学習しました。
Linuxでは、
/etcに設定ファイル、
/var/logにログ、
/homeにユーザーのファイルなど、
役割に応じてファイルが配置されています。
しかし、 ファイルが存在する場所が分かっても、誰でも自由に変更できるとは限りません。
Scriptを作ったのに実行できない。
他のユーザーのファイルを開けない。
これは「パーミッション」が関係している可能性があります。
-rw-r--r--などのパーミッション表示を読み、
owner・group・othersとr・w・xの意味を理解し、
chmodで基本的な権限変更ができる
状態を目指します。
Linuxのパーミッションとは?
パーミッションとは、 ファイルやディレクトリに対して「誰が・何をできるか」を決める権限 です。
たとえば、ある設定ファイルに対して、
のように、 ユーザーごとに操作可能な範囲を制御できます。
なぜパーミッションが必要なのか
Linuxは複数ユーザーで利用されることを前提として設計されています。
もしすべてのユーザーが、 すべてのファイルを自由に変更できてしまうと、 重要な設定やデータを誤って変更する可能性があります。
重要な設定ファイルを勝手に変更されないようにする。
他ユーザーのファイルへのアクセスを制限する。
実行してよいファイルだけ実行可能にする。
パーミッションはls -lで確認できる
ファイルのパーミッションは、
ls -l
で確認できます。
$ ls -l
-rw-r--r-- 1 user user 128 Aug 17 10:00 memo.txt
左端に表示されている、
-rw-r--r--
の部分がパーミッションです。
-rw-r–r– を分解してみよう
最初の1文字を除くと、 パーミッションは3文字ずつに分かれています。
先頭の1文字はファイルの種類
パーミッション表示の最初の1文字は、 ファイルやディレクトリの種類を表します。
-
通常ファイル
d
ディレクトリ
l
シンボリックリンク
たとえば、
drwxr-xr-x
なら、
先頭が
d
なのでディレクトリです。
r・w・xの意味を理解しよう
Linuxのパーミッションでは、 r・w・x という3つの文字を使います。
r
Read
読み取り
w
Write
書き込み
x
Execute
実行
ファイルに対するr・w・x
r
ファイルの内容を読み取れる
w
ファイルの内容を書き換えられる
x
ファイルをプログラム・スクリプトとして実行できる
rw-なら何ができる?
たとえば所有者の権限が、
rw-
なら、
という意味です。
owner・group・othersとは?
そのファイルを所有しているユーザー。
ファイルに設定されているグループに所属するユーザー。
所有者でも対象グループでもないユーザー。
たとえば、
$ ls -l memo.txt
-rw-r--r-- 1 user developers 128 Aug 17 10:00 memo.txt
なら、
-rw-r–r– を実際に読んでみよう
長い文字列として覚えるのではなく、
rw- / r-- / r--
の3グループに分けて考えましょう。
ディレクトリではr・w・xの意味が少し違う
ここはLinux初心者がつまずきやすい重要ポイントです。
ディレクトリでもr・w・xを使いますが、 ファイルとは意味が少し異なります。
r
一覧を確認
Directory内の名前を確認できる
w
作成・削除
Directory内でFile等を作成・削除できる
x
Directoryへアクセス
cdしたり内部のFileへアクセスできる
ファイルのxは実行権限ですが、 DirectoryのxはそのDirectory内へアクセスするために重要な権限です。
chmodコマンド:パーミッションを変更する
パーミッションを変更するときに利用するのが、 chmod です。
chmodは change mode に由来します。
chmod 権限 ファイル名
chmodにはいくつか指定方法がありますが、 初級ではまず 数値指定 を理解すると分かりやすいです。
r・w・xは数字でも表せる
chmodでは、 各権限を次の数字として扱います。
r
4
Read
w
2
Write
x
1
Execute
必要な権限の数字を足し算します。
7
6
5
4
chmod 755とは?
たとえば、
chmod 755 script.sh
とすると、
rwx
r-x
r-x
となります。
$ chmod 755 script.sh
$ ls -l script.sh
-rwxr-xr-x 1 user user 350 Aug 17 10:00 script.sh
chmod 644とは?
通常のテキストファイルなどでよく見るのが、 644 です。
chmod 644 memo.txt
rw-
r--
r--
$ chmod 644 memo.txt
$ ls -l memo.txt
-rw-r--r-- 1 user user 128 Aug 17 10:00 memo.txt
まず覚えたい代表的なパーミッション
644
rw-r--r--
一般的なFileなど
600
rw-------
所有者だけ読み書き
755
rwxr-xr-x
実行File・Directoryなど
700
rwx------
所有者だけフル権限
644や755は頻繁に登場しますが、 r=4、w=2、x=1 を理解していれば他のパーミッションも読み解けます。
chmodは文字でも指定できる
chmodでは、 数値だけでなく文字を使った指定もできます。
u
user
owner
g
group
group
o
others
others
a
all
すべて
たとえば、 所有者に実行権限を追加する場合、
chmod u+x script.sh
と指定できます。
$ ls -l script.sh
-rw-r--r-- 1 user user 350 Aug 17 10:00 script.sh
$ chmod u+x script.sh
$ ls -l script.sh
-rwxr--r-- 1 user user 350 Aug 17 10:00 script.sh
+ と – で権限を追加・削除できる
+
権限を追加
chmod u+x file
-
権限を削除
chmod g-w file
たとえば、
chmod o-r memo.txt
なら、 othersから読み取り権限を削除します。
実行権限がないScriptはそのまま実行できない
たとえば、 次のScriptがあるとします。
$ ls -l backup.sh
-rw-r--r-- 1 user user 200 Aug 17 10:00 backup.sh
所有者にも
x
がありません。
その状態で実行すると、
$ ./backup.sh
bash: ./backup.sh: Permission denied
となる場合があります。
そこで、
chmod u+x backup.sh
として実行権限を追加します。
$ chmod u+x backup.sh
$ ls -l backup.sh
-rwxr--r-- 1 user user 200 Aug 17 10:00 backup.sh
chmod 777を安易に使わない
Linuxについて調べていると、
問題が起きたときに
chmod 777
を設定する例を見かけることがあります。
chmod 777 file
777は、
rwx
rwx
rwx
つまり、 すべてのユーザーへ読み取り・書き込み・実行を許可 します。
必要以上の権限を与えるとSecurity上の問題につながります。 まず「誰に、どの権限が必要なのか」を確認しましょう。
Permission deniedが出たら何を確認する?
対象File・Directoryのパーミッションを確認。
現在のUserとowner/groupを確認。
Read・Write・Executeのどれが必要か判断。
$ ls -l script.sh
-rw-r--r-- 1 user user 350 Aug 17 10:00 script.sh
「実行できない」という問題なら、 まず xがあるかどうか を見る、というように原因を絞り込みます。
ここで実際に試してみよう:chmodパーミッションシミュレーター
疑似Terminalで
ls -lと
chmod
を実行し、
パーミッションがどう変化するか確認してみましょう。
Linux Permission Simulator
まずls -lで現在の権限を確認しましょう
chmodを実行すると、CURRENT PERMISSIONの表示も変化します。
理解度チェック:755を読み解いてみよう
chmod 755 script.sh
この場合、 groupの権限 はどれでしょうか?
755の2桁目がgroupです。5を4・2・1に分解して考えてみましょう。
ここまででLinux初級の基本操作を学びました
今回の記事で、 Linux初級講座の基本レッスンは一区切りです。
ここまでに学習した内容を振り返ると、
OSとLinuxの全体像
Ubuntu・RHEL系など
Command・Option・Argument
Directoryを確認・移動
File操作
Directory作成・削除
File内容の確認
検索
/etc・/var・/homeなど
rwx・chmod
ここから中級では、 User・Group管理、Process、Service、Log、Network、 Disk、Package管理など、 Linux Serverを管理するための知識 へ進んでいきます。
確認問題:Linuxのパーミッションを理解できたか確認しよう
ファイルに対する「w」の意味はどれですか?
wはWriteを意味し、 Fileの内容を書き換える権限です。
chmod 644 file.txt のowner権限はどれですか?
6は4(r)+2(w)なのでrw-です。 644はrw-r–r–を意味します。
chmod 777を安易に設定すべきでない主な理由はどれですか?
777はowner・group・othersすべてへrwxを与えるため、 必要以上の権限となる可能性があります。
3問に挑戦してみましょう。
まとめ
Permissionは 「誰が・何をできるか」を制御する仕組み
r=Read、
w=Write、
x=Execute
Permissionは owner・group・others の3つに分かれる
chmodでは r=4、w=2、x=1 として数値指定できる
chmod 777のような
必要以上の権限付与は避ける

