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

    公開日:2017年09月26日 最終更新日:2022年04月25日

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

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

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

    プロエンジニアの無料会員登録はこちら

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

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

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

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

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

    Linuxのファイル管理 パーミッションの設定
フリーランスエンジニア案件情報 | プロエンジニア

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

    Linuxのファイル管理 パーミッションの設定
フリーランスエンジニア案件情報 | プロエンジニア

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

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

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

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

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

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

    Linuxのファイル管理 パーミッションの設定
フリーランスエンジニア案件情報 | プロエンジニア

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

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

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

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

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

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

    Linuxのファイル管理 パーミッションの設定
フリーランスエンジニア案件情報 | プロエンジニア

    ホームディレクトリ/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文字目:その他ユーザーについての権限を並べて表示しています。

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

    Linuxのファイル管理 パーミッションの設定
フリーランスエンジニア案件情報 | プロエンジニア

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

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

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

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

    Linuxのファイル管理 パーミッションの設定
フリーランスエンジニア案件情報 | プロエンジニア

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

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

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

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

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

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

    Linuxのファイル管理 パーミッションの設定
フリーランスエンジニア案件情報 | プロエンジニア

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

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

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

    2.3.1 chmodコマンド 数値で指定

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

    Linuxのファイル管理 パーミッションの設定
フリーランスエンジニア案件情報 | プロエンジニア

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

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

    Linuxのファイル管理 パーミッションの設定
フリーランスエンジニア案件情報 | プロエンジニア

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

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

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

    2.3.2 chmodコマンド 記号で指定

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

    Linuxのファイル管理 パーミッションの設定
フリーランスエンジニア案件情報 | プロエンジニア

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

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

    Linuxのファイル管理 パーミッションの設定
フリーランスエンジニア案件情報 | プロエンジニア

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

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

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

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

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

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

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

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

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

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

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

    Linuxのファイル管理 パーミッションの設定
フリーランスエンジニア案件情報 | プロエンジニア

    まず、ホームディレクトリ/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コマンドで移動する

    Linuxのファイル管理 パーミッションの設定
フリーランスエンジニア案件情報 | プロエンジニア

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

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

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

    Linuxのファイル管理 パーミッションの設定
フリーランスエンジニア案件情報 | プロエンジニア

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

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

    LINUXのスキルが活かせる最新求人情報をチェック!

    月額単価80万円〜90万円
    勤務地 東京都 中央区
    月額単価70万円〜80万円
    勤務地 千葉県
    勤務地 東京都 千代田区
    月額単価80万円〜
    勤務地 東京都 中央区

    フリーランスの方でこのようなお悩みありませんか?

    • 定期的に案件を紹介してほしい
    • 完全フルリモートワークや、週1出勤など、働き方を選びたい
    • 単価交渉など営業周りが苦手なので、誰かに任せたい

    プロエンジニアにお任せください!

    プロエンジニアはほとんどEND直案件!高額単価案件ならお任せください。
    完全フルリモートや、週1出勤など、希望に合わせた働き方ができる案件を多数ご用意しています。
    単価や契約交渉などは弊社キャリアコンサルタントに全てお任せください。

    無料登録して、あなたの希望に合った案件をチェック!

    簡単60秒!無料登録はこちらから

    おすすめ記事

  • ピックアップ

    フリーランス

    【AWS】SREエンジニア★入札情報サービスのインフラ構築・システム運用改善

    クラウドソーシング事業やBPO事業を展開している企業にて、官公庁・自治体等の入札・落札情報を探せる「...

    月額単価:80万円〜90万円

    フリーランス

    【Linux】インフラエンジニア★官公庁向けネットワーク機器監視サーバ更改に伴う設計・構築

    ネットワーク機器監視サーバ(RHEL物理サーバ)の更改対応になります。 工程:詳細設計、構築、各種試...

    月額単価:90万円〜

    フリーランス

    【Linux】インフラエンジニア★法務省向けOracle運用維持管理

    ・環境変更など随時案件対応 ・トラブル対応 ・障害調査 ・バックアップ関連対応 等

    月額単価:70万円〜80万円

    フリーランス

    【AWS】インフラエンジニア★IoT事業者向けクラウドサービスの設計・構築

    自社IoTシステムを中心にカーシェアサービス等を展開する企業にて、インフラ環境 (AWS) の設計・構築・...

    月額単価:80万円〜

SCROLL TOP