アクセス権限を変更するchmodコマンドについて基本を総まとめ【Linux/Unix】
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
は非常に強力なツールであり、ファイルやディレクトリのアクセス権を管理するために不可欠です。
セキュリティに直結する非常に重要なコマンドですので、実際にコマンドを使いながら理解を深めていきましょう。
ディスカッション
コメント一覧
まだ、コメントがありません