ラズパイをいじっていてたまにぶつかる壁:ファイルやディレクトリの権限(パーミッション)。
ネットや書籍に書いてある通りに設定すれば大抵上手くいきます。しかし、Linuxの権限ってdrwxr-や700なんて感じで読みにくいんですよね。理解せず進むのも気持ち悪いものです。
都度、「あれ~この権限どういう意味だっけ?」「どんな権限を付与しておくのが適切かな?」と調べ直すのも面倒です。今回は自分のためにまとめてみました。
Linux権限の確認方法
ファイルやディレクトリ、シンボリックリンクの権限を確認するコマンドは以下の通り。
ls -ls
lsはLinuxコマンドのひとつで、現在居るディレクトリ内を表示するコマンドですね。一番よく使うコマンドかと思います。(ちなみにlsは「list segments(リスト・セグメンツ)」の略だそうですよ)
このlsコマンドのオプションに、lオプション(詳細表示)とaオプション(隠しファイルを含む全ファイル)を付けて実行することで、現在居るディレクトリの全ファイルの詳細が表示されます。
例としてラズパイで実行すると以下のように表示されます。
上図赤枠の左側に表示されている「drwxr-xr-x」などが権限になります。
Linux権限の見方
「ls -la」コマンドで表示された権限「drwxr-xr-x」を例にLinux権限の見方を確認してみましょう。
権限の表示は左から10文字あり、文字数ごとに意味が分かれています。
1文字目
1文字目は、そのファイルの種別になります。ファイル(-)なのか、ディレクトリ(d)なのかを表しています。シンボリックリンク(l)とはWindowsで言うところのショートカットになります。
2文字目~4文字目(ファイル所有者)
2文字目~4文字目が「rwx」となっています。
- r は読取権限有り
- w は書込権限有り
- x は実行権限有り
という意味です。所有者はすべての権限を持っていることになりますね。所有者の意味は次項で詳しく解説しています。
*権限が付与されていない項目については「-」と表記されます。
例)ーwx ←読取不可、書込可、実行可となります。
実行権限とは
実行権限は、実行型のファイル(.exeなどのアプリケーション等)を実行する権限のことです。ディレクトリに対する権限で、読取・書込権限だけあって実行権限が無いと、ディレクトリ内のファイルの書込みができません。
下記は、権限表記は同じ内容で、ファイルの所有グループに対する権限、そしてその他のユーザに対する権限の内容になります。
5文字目~7文字目(所有グループ)
8文字目~10文字目(その他)
Linux権限:所有者・所有グループ・その他とは
所有者とは
所有者とは、「そのファイルを持っている人」ということです。誰が所有者であるかは「ls -la」コマンドを実行したときの画面で確認できます。
「ls -la」コマンド実行結果の左から3項目目が所有者の欄です。Linux OSは複数人で同時にログインして利用できるOSです。そのため、ファイルの持ち主を明確に分ける必要があり、このようなシステムになっています。上図を見ると、ほとんどのファイルがユーザー「pi」によって所有されていることが確認できます。
所有グループとは
所有グループも「ls -la」コマンドで確認できます。
左から4項目目、所有者の右隣りが「所有グループ」の項目です。
Linux OSは先述の通り複数人で利用する可能性の高いOSです。あるファイルの所有権がひとりのユーザだけに限定されてしまうと、他のユーザは権限が無く、「見たくても見れない」「編集したくても編集できない」「実行もできない」ということになってしまいます。都度権限を他のユーザに入れ替えるのも手間ですよね。
これを回避するためのルールが「所有グループ」です。このグループに設定された権限は、ユーザが同じグループであれば適用されます。基本的には所有者より低い権限で設定されているケースが多いようです。
例)
所有者:rwx (全権限有り)なのに対し、
グループ:r-x(書き込み権限は無し)
といった具合です。権限を適正に設定することで、予期せぬファイル編集などを防ぐことができます。ラズパイをひとりで使うような場合には特に気にする必要はありません。
グループの設定方法や確認方法は下記記事が非常にわかりやすいです。
その他とは
その他とは、所有者でも所有グループに属しているユーザでもないユーザ、ということになります。ユーザは必ずひとつは所有グループを設定しなくてはなりません。所有グループが他のグループだったりすれば、ユーザは「その他」の権限が適用されます。
Linux上で何かファイル操作をして、権限があるはずなのに実行できないな、、、というケースがあれば、自身のユーザの所有グループを確認すると良いでしょう。
自身の所有グループを確認するコマンドは以下の通りです。
cat /etc/group
詳しくは下記をどうぞ。
もう一つの権限表記
権限の表記方法は「drwxr-xr-x」の他に、数字を使った表記方法もあります。
Linuxで権限を変更する場合に下記コマンドを実行することが多いかと思います。
chmod 755 <ファイル/ディレクトリ名>
chmodは権限を変更するコマンドですが、そのコマンドで設定るする数字(例えば:755)に権限の意味があるんですね。下記数字を参考に下図を見てください。
0:権限無し
1:実行権限有り
2:書込権限有り
4:読取権限有り
3つの数字はそれぞれ左から「所有者」「グループ」「その他」を表します。権限の数字の合計が表示されているんですね。この数字が何を意味するのかちゃんと理解していないと適切な権限が設定できません。
余談ですが、chmodコマンドでrwxを使った権限の指定方法もあります。Linuxはやりたいことにたいしてアプローチがいくつもあるところが柔軟性が高いと言えますが、それが返って理解を困難にしている所以でもあります。
個人的には、方法がありすぎても困るなと感じています。
Linux:付与しておくと危険な権限
権限の適切な設定が、システム運用に欠かせないことは理解できたかと思います。私も、実際に深く調べてみるまでいいかげんに設定していました。設定したまま戻さなかったり。。。
しかし、これは運用上非常によろしくないですよね。権限が設定されているのには理由があります。自分がアクセスしやすいからと、フルアクセス(rwx)に変えたままにしてしまっては、何が起こってもおかしくないのだと認識しましょう。
特に、
r:書き込み権限と、x:実行権限は不用意に与えたり変更してはいけません。ラズパイをいじっていると権限を変更する場面は幾度となく出てきます。権限は作業が終わったら都度戻す習慣をつけたいものです。
ただし、フルアクセス権限など、「その権限でなければファイルの実行上不備がある」場合もあります。ただネットに書いてある情報だけで権限操作してしまうと、どこの権限が不適切でエラーが出ているかわかりません。権限の理解はLinux理解の中でも重要な位置を占めていると感じています。
参考リンク
lsコマンドの使い方と覚えたい15のオプション【Linuxコマンド集】
「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典【lsコマンド】
さいごに
私の理解している範囲でまとめてみました。
何か間違いがあれば、ご指摘下さい。
コメント