Linuxのファイル管理 パーミッションの設定

    • このページをはてなブックマークに追加

    Linuxは、複数人のユーザーが同時に接続して操作することができる、マルチユーザーシステムです。
    それゆえ、重要なファイルに対して上書きを禁止したい場合や、ファイルの閲覧を特定のユーザーに制限したい場合などが発生します。

    ファイル管理として、「どのユーザー」に、「どのような操作権限」を与えるのかを設定することができます。その機能をパーミッションと言います。
    今回は、ファイル管理の一つであるパーミッションについて解説します。Linuxへの入門記事として、ぜひ参考にしてください。

    尚、Linuxのユーザーについての詳細は、以下の記事に掲載されていますので、そちらも参考にしてください。
    【関連記事】Linuxのユーザー管理 ユーザーを新規作成・変更・削除する方法

    1.所有者と所有グループ

    Linuxで扱うファイルは、いずれかのユーザー、およびグループに紐づいています。
    新しくファイルを作成した場合、そのユーザーがファイルの所有権を有することになり、ファイルの所有者となります。そして、そのユーザーが属している主グループが、ファイルの所有グループとなります。

    ファイルの所有者、および所有グループを確認するには、lsコマンドを使用します。

    例として、groupsコマンドの実体ファイルについて、所有者と所有グループを表示します。
    groupsコマンドは、ユーザーが所属するグループ名を表示するコマンドですが、その実体のファイルは/bin/groupsファイルとなります。

    【例】groupsコマンドの実行ファイル(/bin/groups)をlsコマンドで表示

    lsコマンドを-lオプションで表示すると、ファイルの所有者と所有グループが表示されます。

    ①アクセス権限(パーミッション)
    ②所有者
    ③所有グループ

    ①番目では、アクセス権限(パーミッション)という属性が設定されています。
    上記の例では、ファイルの所有者がroot、所有グループがrootグループであることがわかります。

    1.1 所有者の変更 chownコマンド

    所有者を変更するには、chownコマンドを使用します。
    所有者を変更できるのは、rootユーザーのみとなります。

    コマンド 概要
    chown [オプション][所有者][ファイル※ディレクトリも可] [ファイル]の所有者を[所有者]に変更する
    chownのオプション 概要
    -R ディレクトリ以下の全てのファイルに対して所有者を変更

    【例】ファイルtestfile1.txtの所有者をtestuser1に変更

    ホームディレクトリ/tmp配下にあるファイル、testfile1.txtの所有者を変更しています。
    変更前はproengineerが所有者でしたが、rootユーザーでchownコマンドを実行することにより、所有者がtestuser1に変更されたことが確認できます。

    1.2 所有グループの変更 chgrpコマンド

    所有グループを変更するには、chgrpコマンドを使用します。

    rootユーザーはどのグループにも変更できます。一般ユーザーの場合は、ファイルの所有者が自分である場合は編集が可能、かつ変更先のグループは、自分が所属しているグループのみ指定が可能です。

    コマンド 概要
    chgrp [オプション][グループ][ファイル※ディレクトリも可] [ファイル]の所属グループを[グループ]に変更する
    chgrpのオプション 概要
    -R ディレクトリ以下の全てのファイルに対してグループを変更

    【例】ファイルtestfile1.txtのグループをtestgroupに変更

    ホームディレクトリ/tmp配下にあるファイル、testfile1.txtのグループを変更しています。
    groupsコマンドにより、ユーザーproengineerは、グループtestgroupにも所属していることを確認しています。

    一般ユーザーのproengineerにおいても、chgrpコマンドによって、自分が所有するtestfile1.txtに対して自分が所属するグループに変更をかけることができます。
    lsコマンドにより、グループがtestgroupに変更されたことが確認しています。

    2.パーミッションと表記方法

    ファイルに対して、どのユーザーが、どのような操作権限を有するか、アクセス権限を設定している機能をパーミッションと言います。

    パーミッションで指定するユーザーは、以下の3種類です。

    ・ファイルの所有者
    ・ファイルの所有グループに属しているユーザー
    ・その他のユーザー

    また、ファイルに対する操作権限は、以下の3種類です。

    ・読み取り(Read)
    ・書き込み(Write)
    ・実行(eXecute)

    2.1 パーミッションの表記方法 アルファベット

    前述したgroupsコマンドの実体ファイル(/bin/groups)のパーミッションを例に、パーミッションの表記内容について解説します。

    左から、1文字目:ファイルの種類、2~4文字目:所有者、5~7文字目:所有グループ、8~10文字目:その他ユーザーについての権限を並べて表示しています。

    内容の意味は以下のとおりです。

    ①ファイルの種類
    - 通常ファイル
    d ディレクトリ
    l シンボリックファイル
    ②所有者のパーミッション
    ③所有グループに属したユーザーのパーミッション
    ④その他のユーザーのパーミッション

    ①のファイルの種類については、以下の記事の「1.1 ファイルの種類とファイル名」にて解説していますので、そちらも参考にしてください。

    【関連記事】Linuxのユーザー情報を一覧で見てみよう

    3種類のユーザーそれぞれに対して、読み取り(r)・書き込み(w)・実行(x)のうち、どの権限があるかを表しています。

    権限があるものはアルファベットが表記され、権限がないものはハイフン(-)となります。
    上記の赤字で示した部分が、パーミッションです。

    2.2 パーミッションの表記方法 数値

    パーミッションは、前述したアルファベット表記のほか、アクセス権限それぞれに割り振られた数値で指定することもできます。

    アクセス権限に対する数値は、以下のとおりです。

     ・読み取り(4)
     ・書き込み(2)
     ・実行(1)
     ・権限なし(0)

    3種類のユーザー毎に、それぞれのアクセス権限の数を合計した数値で表します。
    2.1で説明したパーミッションの例を数値で指定すると、パーミッションは「755」となります。

    2.3 パーミッションの変更 chmodコマンド

    パーミッションの変更は、chmodコマンドを使用します。
    そのファイルの所有者、もしくはrootユーザーのみが可能です。変更後のパーミッションは数値、もしくは記号で指定することができます。

    コマンド 概要
    chmod [オプション][数値または記号][ファイル] [ファイル]のパーミッションを[数値または記号]で指定した内容に変更する
    chmodのオプション 概要
    -R ディレクトリ以下の全ファイルを変更

    2.3.1 chmodコマンド 数値で指定

    ファイルの所有者、所有グループに所属するユーザー、その他ユーザーに対して、読み取り(r)、書き込み(w)、実行(x)権限のそれぞれについて、有する権限の数値を合計して指定します。
    全てのユーザーに対して全ての権限がある場合は「777」となります。

    【例】chmodコマンドを数値で指定する

    以下の例では、その他のユーザーに書き込み権限を設定する変更を行っています。

    変更前の、ファイルtestfile1.txtのパーミッションは「rw-rw-r--」です。

    ここから、その他のユーザーに対しても書き込み権限(w)を設定するためには、「rw-rw-rw-」に変更する必要があります。これを数値に直すと、「666」となります。
    chmodコマンド実施後に改めてlsコマンドでパーミッションを確認してみると、「rw-rw-r--」から「rw-rw-rw-」に変更されていることが確認できます。

    パーミッション変更における数値での設定は、変更部分だけではなく、既存の設定部分も含めて数値で設定する必要があります。

    2.3.2 chmodコマンド 記号で指定

    パーミッションの変更は、数値の他、以下に示す記号を使って指定することもできます。記号での指定は、シンボルモードと言います。

    表の左から、どのユーザーに対して、どの操作で、どのアクセス権を設定するかについて、並べて表示します。

    【例】・ファイルtestfile1.txt → 所有者に対して、実行権限を追加する「u+x」
    ・ファイルtestfile2.txt → 所有グループユーザーから書き込み権限を削除する「g-w」
    ・ファイルtestfile1.txt → 全てのユーザーに対して読み取り権限のみに指定する「a=r」

    2.3.1で解説した数値での設定は、既存部分も含めた全ての権限を指定する必要がありました。
    一方、記号の場合は既存設定は考慮せず、権限を設定したい部分のみを指定することになります。

    3.パーミッションの注意点

    パーミッションは、ファイルに設定する場合と、ディレクトリに設定する場合によって、その意味が異なりますので、注意が必要です。

    権限 ファイル ディレクトリ
    読み取り(r) ファイルの内容を読み出すことができる
    (catコマンドなど)
    ディレクトリ配下のファイル一覧を表示できる(lsコマンド等)
    書き込み(w) ファイルの内容を編集可能 ディレクトリ配下でファイルの作成や削除ができる ※注意①
    実行(x) ファイル自体をプログラムとして実行可能 ディレクトリに移動することが可能(cdコマンド) ※注意②

    ここで気を付けたいのは、以下の2点です。

    ・ディレクトリに書き込み権限がある場合は、ファイルの書き込み権限の有無に関わらず、ファイルを削除することができる

    ・実行権限の意味合いが、ファイルとディレクトリで全く異なる

    後述にて詳しく解説していきます。

    3.1 ディレクトリの書き込み権限により、書き込み不可ファイルでも削除できる

    書き込み権限のないファイルでも、そのファイルを置いているディレクトリに書き込み権限があれば、ファイルを削除することが可能となります。

    【例】書き込み権限のないファイルを削除する

    まず、ホームディレクトリ/tmp配下にあるファイル一覧をlsコマンドの-lオプションで表示しています。
    ※上記の例では、grepコマンドによってtestの文字を含むファイルのみを抽出しています。

    ・ディレクトリtestdir
    ・ファイルtestfile1.txt
    ・ファイルtestfile2.txt → 所有者のパーミッションが(r-x)で書き込み権限無し
    の3つがあることが確認できます。

    続いてlsコマンドの-ldオプションにより、ホームディレクトリ/tmpのディレクトリ自体のパーミッションを見てみると(rwx)となっており、tmpディレクトリに対して所有者の書き込み権限が設定されていることがわかります。

    この状態で、rmコマンドによってtestfile2.txtの削除をしています。

    削除後の確認として、再度lsコマンドでホームディレクトリ/tmp配下を見てみると、一覧からtestfile2.txtが削除されていることが確認できます。
    書き込み権限のないファイルであっても、置かれたディレクトリの書き込み権限がある場合、そのファイルを削除することが可能となります。
    場合によっては、誤って重要なファイルを削除しかねませんので、ご注意ください。

    3.2 ディレクトリの実行権限

    パーミッションのうち、実行権限(x)がディレクトリに設定されていない場合は、そのディレクトリに移動することができなくなりますので、ご注意ください。

    【例1】実行権限有りの/tmpディレクトリ配下にcdコマンドで移動する

    まず、lsコマンドの-lオプションによってファイル一覧を表示し、ディレクトリ「testdir」のパーミッションを確認しています。
    パーミッションは(rwx)で、実行権限があることがわかります。
    この状態で、cdコマンドによって/tmp/testdir配下へ移動を試みたところ、プロンプト表示が「localhost ~」から「localhost testdir」に変更され、移動できたことがわかります。
    試しにそこからlsコマンドでファイル一覧を表示していますが、testdir配下に存在しているディレクトリ名dir1とdir2が表示されています。

    ディレクトリに実行権限がある場合、testdirディレクトリに移動できることがわかります。

    【例2】実行権限の無い/tmpディレクトリ配下にcdコマンドで移動する

    先ほどと同様に、lsコマンドの-lオプションによってディレクトリ「testdir」のパーミッションは(rw-)で実行権限を持たないことを確認しています。 この状態でcdコマンドを実行しても、「許可がありません」と表示され、移動することができません。

    実行権限をファイルに付与する場合は、そのファイルをプログラムとして実行可能かどうかを表す一方、ディレクトリに対する実行権限とは、そのディレクトリに移動できるかどうかの権限を表しています。

    • このページをはてなブックマークに追加

    おすすめ記事

  • ピックアップ

    フリーランス

    【Linux】自社プロダクトのテクニカルサポート★最先端セキュリティ関連 NEW

    月額単価 :50万円〜

    サービス導入済みのお客様に対する技術サポート、 クラウドサーバ運用保守のサポートをお任せします。 ...

    正社員

    【PHP/CentOS】サーバーエンジニア|自社サービス・自社勤務◎スキルアップ環境有

    年収 :350万円〜700万円

    ◆自社ホスティングサービスの設計・構築・運用・保守 ◆社内環境◎働きやすく挑戦を推奨する社風と制度、...

    株式会社 KDDI ウェブコミュニケーションズ

    フリーランス

    【Linux/AWS】サーバーエンジニア★オンラインチケットシステム構築

    月額単価 :80万円〜

    オンラインチケットシステムのクラウド環境(AWS)の サーバー構築をお任せします。 他にも大手中古...

    フリーランス

    【Linux/SQL】インフラエンジニア★大手Webサービス会社システム運用

    月額単価 :40万円〜50万円

    大手ポータルサイトを運営する企業にて システムの運用を行って頂きます。 具体的には... ・ジョブ...

    フリーランス

    【Win/Linux】サーバーエンジニア★生保会社向けサーバ構築・運用

    月額単価 :50万円〜

    生命保険会社向けに進行中である、クラウドサービス用基盤更改の 運用設計業務のサポート業務となりま...