アクセス権限を変更するchmodコマンドについて基本を総まとめ【Linux/Unix】

Ubuntu

スポンサーリンク

chmod(change modeの略)は、UnixやLinux系のオペレーティングシステムにおいて、ファイルやディレクトリのアクセス権限を変更するためのコマンドです。

アクセス権限とchmodコマンド

アクセス権限の基本

ファイルやディレクトリには、3つの基本的なアクセス権限があります:

  • 読み取り権限(r):ファイルの内容を読むことができる。
  • 書き込み権限(w):ファイルの内容を変更することができる。
  • 実行権限(x):ファイルをプログラムとして実行できる(スクリプトやバイナリファイルの場合)。

これらの権限は、ユーザーの種類によって異なります:

  • ユーザー(u):ファイルの所有者。
  • グループ(g):同じグループに属するユーザー。
  • その他(o):上記以外の全てのユーザー。

chmodコマンドの基本的な使い方

chmodコマンドは以下の形式で使います。

chmod [オプション] [権限] [ファイル名]

権限の指定方法

権限は記号モードと数字モードの2つの方法で指定できます。

記号モード

記号モードでは、以下のようなユーザー指定を行います。

  • u:所有者
  • g:グループ
  • o:その他
  • a:全て(u, g, oの全て)

権限を追加、削除、設定するための記号はこちら。

  • +:権限を追加
  • -:権限を削除
  • =:権限を設定(他の権限を全て消去し、指定された権限のみを設定)

所有者に実行権限を追加する。

  chmod u+x filename

グループから書き込み権限を削除する。

  chmod g-w filename

その他に読み取り権限を設定する。

  chmod o=r filename

複数権限を同時設定する例

所有者に読み書き実行権限を与え、グループに読みと実行権限を与え、その他から書き込み権限を削除する。
※カンマ区切りで指定可能。

chmod u+rwx,g+rx,o-w filename

数字モード

数字モードでは、各権限を数値で表します。

  • 読み取り(r): 4
  • 書き込み(w): 2
  • 実行(x): 1

これらを合計して、権限を表現します。

  • 読み取りと書き込み:4 + 2 = 6
  • 読み取りと実行:4 + 1 = 5
  • 書き込みと実行:2 + 1 = 3

「え、それって重複しないの?」と思われる方もいるかもしれないので、表にまとめてみました。

数字権限
1実行
2書き込み
3書き込み+実行
4読み取り
5読み取り+実行
6読み取り+書き込み
7読み取り+書き込み+実行

ちゃんと7種類とも重複なく、1~7の数字で表現できていることがわかります。

さらに、この数字を「ユーザー(u)」「グループ(g)」「その他(o)」の順に配置することで、付与する権限を一括して表現します。

実際に見た方が分かりやすいので、例を見ていきましょう。

所有者ユーザーに読み取り+書き込み(6)、グループに読み取り(4)、その他に実行(1)の権限を与える。

  chmod 641 filename

記号モードに比べてかなりスッキリした書き方であることがわかります。

オプション

chmodにはいくつかのオプションがあり、-Rの使用がよく見られます。

  • -R: ディレクトリとその中のすべてのファイルに対して再帰的に権限を変更する。
  chmod -R 755 directory_name

実際の使用例

以下、使用例です。

ファイルを実行可能にする。

  chmod +x script.sh

ディレクトリを全員が読み取れるようにする。

  chmod 755 /path/to/directory

特定のユーザーから書き込み権限を削除する。

  chmod o-w file.txt

アクセス権限の確認方法

権限を確認するには、ls -lコマンドを使用します。
これにより、ファイルの詳細な情報が表示され、権限も確認できます。

ls -l filename

出力の最初の部分に、権限が表示されます(例: -rwxrwxrwx-rwxr-xr--)。
最初の文字はファイルの種類(-は通常のファイル、dはディレクトリなど)を示し、その後の文字(rwx)が権限を示します。

特殊な権限

先に紹介した基本的な権限に加えて、chmodでは特殊な権限も設定できます。
特殊な権限には以下の3つがあります。

セットUID(Set User ID)

数字モードで先頭に4を付与することで、所有者の権限でプログラムを実行できるようにし、実行時にプログラムの所有者の権限を取得します。

chmod 4755 executable_file

セットGID(Set Group ID)

数字モードで先頭に2を付与することで、グループの権限でプログラムを実行できるようにします。
また、ディレクトリに設定すると、新しく作成されたファイルがそのディレクトリのグループに属します。

chmod 2755 directory_name

スティッキーbit(Sticky Bit)

数字モードで先頭に1を付与することで設定します。
特に共有ディレクトリに有用で、ディレクトリに設定すると、所有者以外のユーザーがそのディレクトリ内のファイルを削除できないようにします。

chmod 1777 /tmp

複数ファイルを一括で権限変更

findコマンドと組み合わせることで、複数のファイルに対して一括で権限を変更できます。

特定の拡張子を持つすべてのファイルに読み取り権限を設定する。

find /path/to/directory -type f -name "*.txt" -exec chmod 644 {} \;

環境変数を使って、スクリプト内で動的に権限を設定する。

#!/bin/bash
if [ "$ENV" == "production" ]; then
    chmod 755 important_file
else
    chmod 644 important_file
fi

セキュリティの考慮

ファイルやディレクトリには、必要最小限の権限を設定することがセキュリティの基本です。

定期的にファイルやディレクトリの権限を確認し、不要な権限を削除することが重要です。

定期的なアクセス権限の見直し

findコマンドを使って特定の権限を持つファイルを検索する。

find /path/to/directory -type f -perm 777

使用しないアクセス権限の削除

定期的に使用していない権限を削除する。

find /path/to/directory -type f -perm 777 -exec chmod 644 {} \;

Dockerコンテナ環境での権限管理

Dockerではコンテナ実行時に、ユーザー指定することで権限を制限することができます。

docker run -u 1000:1000 your_image

これにより、非特権ユーザーとしてDockerコンテナを実行できます。

まとめ

chmodは非常に強力なツールであり、ファイルやディレクトリのアクセス権を管理するために不可欠です。

セキュリティに直結する非常に重要なコマンドですので、実際にコマンドを使いながら理解を深めていきましょう。

Ubuntu

Posted by このめ