コース一覧
Linux運用・管理
権限の変更 chmod

Linux運用・管理

ユーザー権限、パーミッション、プロセス、ジョブ制御を学び、Linux上の実行中サービスと作業権限を安全に管理できるようにします。

1
パーミッションと権限管理
01. ユーザーとグループの概念5分
02. パーミッションの読み方5分
03. 権限の変更 chmod5分
04. 所有者の変更 chown5分
05. sudo - スーパーユーザーの力5分
06. 実行権限とスクリプト5分
07. パーミッションチェック5分
2
プロセス管理とジョブ制御
01. プロセスとは何か5分
02. psでプロセス一覧を確認する5分
03. topでリアルタイム監視する5分
04. プロセスの終了 kill5分
05. フォアグラウンドとバックグラウンド5分
06. nohupでログアウト後も実行する5分
07. プロセス管理チェック5分

権限の変更 chmod

鍵ファイルを置いた瞬間、SSH に門前払いされる

別の PC から ~/.ssh/id_ed25519 をコピーしてくると、Permissions are too open と言われて接続を断られることがあります。鍵の中身は正しいのに、他人からも読める置き方になっているせいで繋がりません。こういうときに権限を書き換えるのが chmod です。

指定のしかたは 2 通りあります。3 桁の数字で丸ごと置き換えるやり方と、記号で 1 つだけ足し引きするやり方です。

数字は「今の状態を捨てて、この形にする」

ターミナル

$ ls -l id_ed25519
-rw-r--r-- 1 user user 411 May 20 12:00 id_ed25519
$ chmod 600 id_ed25519
$ ls -l id_ed25519
-rw------- 1 user user 411 May 20 12:00 id_ed25519

3 桁は左から所有者、グループ、その他で、各桁は読み 4 と書き 2 と実行 1 の合計でした。600 は「所有者だけ読み書きできて、他の人は何もできない」です。秘密鍵や .env のように自分しか見てはいけないファイルは、この形にします。

数字での指定は、元の状態を一切参照しません。3 桁を書いた瞬間に、9 個の権利が全部その通りに上書きされます。だから確実ですが、意図しないものまで巻き込みます。

記号は「今の状態に足す・引く」

ターミナル

chmod u+x backup.sh    # 所有者に実行の権利を足す
chmod g-w config.yml   # グループから書き込みの権利を取り上げる
chmod o= secrets.env   # その他の人の権利を空にする

u が所有者、g がグループ、o がその他、a が全員です。+ が追加、- が削除、= がそのブロックだけの丸ごと指定になります。触っていないブロックはそのまま残るので、1 つだけ直したいときは記号のほうが安全です。

ディレクトリごと変えるときは型で分ける

ターミナル

find /srv/app -type f -exec chmod 640 {} +
find /srv/app -type d -exec chmod 750 {} +

chmod -R で配下をまとめて変える手もありますが、ファイルとディレクトリでは必要な権利が違います。ディレクトリには中に入るための x が要るのに、ファイルには要りません。-R で同じ値を配ると、全部のファイルが実行できる状態になるか、全部のディレクトリに入れなくなるかのどちらかです。find で型を分けてから当てると、この取り違えが起きません。

解説

動かないときの逃げ道として chmod 777 が出てくることがありますが、これは「このマシンに入れる全員が、そのファイルを書き換えてよい」という意味です。Web から見えるディレクトリを 777 にすると、外から置かれたスクリプトがそのまま実行できる状態になります。足りない権利がどれなのかを ls -l で確かめて、その 1 つだけを足してください。

課題

  1. chmod で 755 に変更する
  2. chmod で 644 に再変更する
  3. stat -c '%a' で権限の数値を確認する

ヒント

echo でファイル作成、リダイレクト > を使う

chmod 755 ファイル名 で権限を変更

stat -c '%a' は 8 進数表記だけを出力する

script.sh
script.sh
エディタを読み込んでいます
ターミナル出力