ファイル操作

chmod

ファイルやディレクトリのパーミッション(アクセス権限)を変更する

SYNTAX chmod [options] mode file...

パーミッションの仕組み

ファイルには 所有者(user)・グループ(group)・その他(other) の3種類のアクセス権が設定されている。

-rwxr-xr--
 ^^^         所有者(user):  読み(r) 書き(w) 実行(x)
    ^^^      グループ(group): 読み(r) 書き(-) 実行(x)
       ^^^  その他(other):  読み(r) 書き(-) 実行(-)
権限記号数値
読み取りr4
書き込みw2
実行x1
なし-0

数値モードの例

数値権限意味
755rwxr-xr-x所有者はフル、他は読み・実行のみ(スクリプト・ディレクトリの標準)
644rw-r--r--所有者は読み書き、他は読みのみ(通常ファイルの標準)
700rwx------所有者のみフルアクセス(秘密鍵など)
600rw-------所有者のみ読み書き(設定ファイルなど)
777rwxrwxrwx全員フルアクセス(通常は使わない)

使用例(数値モード)

# スクリプトに実行権限を付与
chmod 755 deploy.sh

# 設定ファイルを所有者のみ読み書き可能に
chmod 600 ~/.ssh/id_rsa

# ディレクトリ以下を再帰的に変更
chmod -R 755 ./public/

シンボリックモード

u(user)、g(group)、o(other)、a(all)と +(追加)、-(削除)、=(設定)を組み合わせる。

# 実行権限を追加(所有者・グループ・その他すべてに)
chmod +x script.sh

# その他ユーザーの書き込み権限を削除
chmod o-w file.txt

# グループに読み・書きを設定(既存の権限は置き換え)
chmod g=rw shared.txt

# 所有者に実行、その他から書き込みを削除(複数同時指定)
chmod u+x,o-w file.sh

SSH 鍵ファイルのパーミッション

SSH が要求する標準的なパーミッション:

chmod 700 ~/.ssh/
chmod 600 ~/.ssh/id_rsa        # 秘密鍵
chmod 644 ~/.ssh/id_rsa.pub    # 公開鍵
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/config

-R での再帰適用の注意

ディレクトリとファイルに同じ数値を適用すると、ファイルに実行権限が付くことがある。find と組み合わせて種別ごとに設定する方が安全。

# ディレクトリは 755、ファイルは 644 に分けて設定
find ./public -type d -exec chmod 755 {} +
find ./public -type f -exec chmod 644 {} +