Linuxのパーミッションとはファイルやディレクトリを開いたり編集したりするときの権限設定のことだ。Windowsを扱っているときはそれほど気にすることはないが、サーバー用に使われることが多いLinuxではとても大切な考え方になる。
このページではパーミッションの確認方法や設定方法まで一通り必要なところをまとめてご紹介した。参考にしていただければと思う。
そもそもパーミッションとは?
パーミッションとは
Linuxを始めとしたUnixLikeSystemではファイルやディレクトリ一個一個に許可属性を与え、管理出来るようになっている。これを「パーミッション」という。
それぞれ「所有者」「グループ」「その他のユーザ」にパラメータを割り振りが可能となっている。グループという概念がわからない方は下記を参考に。
特殊なパラメータもあるがパラメータは基本的に「読み込み」「書き込み」「実行」の三つだ。実行と読み込みなど複数指定することも可能となっている。
セキュリティのために存在している
パーミッションはセキュリティのために重要だ。特にシステムの管理者はシステム全体のパーミッションをおおまかで構わないが把握しておくべきだろう。
例えば、一般ユーザはシステムに書き込みが出来ないようになっている。不意な誤動作をしてもシステムに与える影響を最小限とするためだ。
これもパーミッションのお陰だ。パーミッションを適切に管理すると事故防止になる。
他にも例えば、本番環境にあるWebサイトを誤って編集してしまったということが無いように、責任者以外は本番環境のWebサイトを編集できないようにすることなどができる。
余分な実行許可は与えないようにしておく
基本的にファイルに余分な実行許可は与えないように心がけよう。不適切なパーミッションは思わぬ事故につながる。
例をあげるとデフォルトでインストールされているであろう「rcp」「rlogin」などは通信が暗号化されない危険なリモート操作を許してしまうので、実行権限を剥奪したほうがよい、などだ。
実際のパーミッションをみてみる
適当なディレクトリで下記のようにしてみよう。
$ touch myfile.txt
$ ls -l myfile.txt
すると
1 |
-rw-r--r-- 1 ken users 0 12月 22 16:28 myfile.txt |
といったような行が表示されるだろう。
今注目すべきなのは「-rw-r--r--」と「ken users」という部分だ。詳細を説明していくが、そのまえに「r」や「w」といったフラグについて理解しよう。
- r:読み込み許可 ファイルを開くときなどに必要な権限である。これがないとファイルが開けない
- w:書き込み許可 ファイルを編集変更する場合に必要な権限である。「r」と組み合わせて使用する。所有者には基本的に読み込み、書き込み両方の権限がわりあてられることが多い。
- x:このフラグが設定されていると、ファイルに実行権限が与えられ実行可能となる。スクリプトなどの場合実行権限を割り当てることになる。またディレクトリはxフラグを与えないと開くことが出来ない。
- d:ディレクトリの場合このフラグが表示される
- l:リンクファイルの場合このフラグが表示される。
- -:は指定していないというマークである。
- s:SUIDかSGIDのフラグ(別途ページでも解説)
- t:スティッキービットのフラグ(別途ページでも解説)
ちょっとわかりにくいかもしれないので、「r = read 読み取り可」「w = write 書き込み可」「x = exec 実行可」「d = directory ディレクトリですという表示」というのだけまずは覚えておこう。
さて注目してほしい部分だけを抜きだして、区切りをいれて表記してみた。
①- ②rw- ③r-- ④r-- ⑤ken ⑥users
はじめのごちゃごちゃした部分は、1、3、3、3で分かれるイメージだ。
①はファイルのタイプ
ここには「ディレクトリか」「リンクファイルか」「通常ファイルか」を判別するためのフラグが表示される。
通常ファイルの場合とくにフラグがたたないので「-」のままとなる。ディレクトリの場合「d」が、リンクファイルの場合「l」がフラグとして表示されるようになっている。
②の「rw-」⑤の「ken」という所有者
2番目のカラムにはそのファイルの所有ユーザの権限が表示される。5番目のカラムである「ken」と対応している。
今回は「rw-」が表示されている。rは「読み込み可」で、wは「書き込み可」だ。基本的にファイルの所有者はデフォルトでそのファイルの読み込みがと書き込みが許可されることがほとんどだ。
③の「r--」と⑥「users」というグループ
3番目のカラムにはアクセス出来るグループに関してのフラグがセットされる。6番目の「users」というグループに対応している。
今回の場合「r--」読み込みのみが可能となっている。「users」というグループに参加しているユーザから読み込みが可能となっている。
④の「r--」とその他のユーザ
④は所有者でもなく、グループにも属さない、その他のユーザのアクセス権限を表している。
今回は「r--」となっている。とりあえずどのユーザも閲覧できるようになっている状態だ。所有者でもなくグループにも属さないユーザつまり「赤の他人」にファイルを閲覧させたくないならば、読み込み権限も剥奪するとよいだろう。
ここの部分に読み書きを許可している場合考えられるのはWebサービスでパブリックに公開してよいファイルなどだ。他人にみられたくないファイルは読み込み権限を剥奪しよう。
「ls -l」の結果の見方も一応
パーミッションを見るときに必ず使うため、「ls -l」全体の解説を一応しておこう。
-rw-r--r-- 1 ken users 0 12月 22 16:28 myfile.txt
となっているが、これに解説をするため仕切りをいれてみる
-rw-r--r-- |1| ken users |0|12月 22 16:28| myfile.txt
1番目のカラムはパーミッション情報
先程解説したパーミッションの基礎情報が表記される。所有者、グループ、その他のユーザに対してのアクセス権限が表記される。
2番目のカラム、リンクされている数、サブディレクトリの数
この数字は今回はファイルであり「1」となっている。この場合ハードリンクの数を示している。ディレクトリの場合ディレクトリ内のサブディレクトリ数となる。
3番目のカラムは所有者やグループ情報
ここには所有者やグループ情報が表記される。パーミッション情報と照し合せながら参照しよう。
4番目はファイルサイズ
今回は何もせず単に「touch」コマンドでファイルを作成したため「0」バイトとなっている。viなどで編集し保存すれば数値が変化するはずだ。
5番目は日時
一般的なタイムスタンプとなる。更新日時が表記されるようになっている。
6番目はファイル名
最後のカラムはファイル名となっている。
パーミッションを設定してみる
パーミッションを設定するときは「chmod」コマンドを使用する。一般的にパーミッションを変更する場合数字でパーミッションを指定することが多い
数値を使用した指定
以下が対応表である。
0 | --- |
1 | --x |
2 | -w- |
3 | -wx |
4 | r-- |
5 | r-x |
6 | rw- |
7 | rwx |
となっている。これは2進数で考えた結果で、「r-- = 100 = 4」「rwx = 111 = 7」 という感じだ。(わからなければ二進数を一度勉強しておこう)
パーミッションを設定するchmodコマンド
パーミッションを設定するには「chmod」コマンドを使用する。
$ chmod 所有者権限数字 グループユーザ権限数字 その他のユーザ権限数字 変更するファイル名
という記述になる。下記が実際のコマンドだ。
$ chmod 644 myfile.txt
今回の指定は「-rw-r--r--」となる。chmodコマンドの詳しい使い方は下記で解説している。
また、ファイルの所有者を変更したい時は「chown」コマンドを使用する。詳しくはこちらを参照してほしい。
その他の指定方法
文字と記号を指定してパーミッションを変更する方法もある
以下対応表となる。
u | 所有者の権限を指定 |
g | グループの権限を指定 |
o | その他のユーザ権限を指定 |
a | 全てのユーザ権限を指定 |
+ | 権限の付与 |
- | 権限の剥奪 |
= | 権限の直接な指定 |
r | 読み込み |
w | 書き込み |
x | 実行 |
s | SGID/SUID(別途ページ解説) |
t | スティッキービット (別途ページ解説) |
少々直感的ではないので例を上げる。
$ chmod u=rw,g=r,o=r myfile.txt
とすると644を指定した状態と同じになる。
デフォルトのパーミッション設定
デフォルトのパーミッションは「umask」コマンドで指定する。CentOS7では「/etc/profile」で指定されている。
ファイルの最後の方で
1 2 3 4 5 |
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then umask 002 else umask 022 fi |
と指定されている。ユーザIDが200以上でユーザ名とプライマリーグループ名が同じであるときは002を設定、それ以外は022が設定される。
デフォルトのパーミッションの値はumaskの数値から引き算したものがデフォルトのパーミッションとなる。
標準的に使用していると主に「umask 002」が設定される。なのでファイルの場合666から002を引き算して664がファイルのパーミッションのデフォルトとなる。ディレクトリの場合777から002を引き算して775がデフォルトとなる。
まとめ
このページではLinuxのパーミッションについてまとめてご紹介した。
Linuxを使う上で避けては通れないものなので、必ず理解して使いこなせるようになっておこう。
コメント