前の記事では、Linuxで複数のユーザをまとめて管理する グループについて学習しました。
しかし、ユーザやグループを作成しただけでは、 ファイルに対する権限は自動的に変わりません。
Linuxではファイルやディレクトリごとに、 「誰が所有しているのか」「どのグループが所有しているのか」 という情報が設定されています。
chownとchgrpは何が違う?
ディレクトリ内をまとめて変更するには?
今回は、 chown・chgrpコマンドを使って、 ファイルやディレクトリの所有者・所有グループを変更する方法を学習します。
Linuxファイルの所有者(owner)・所有グループ(group)
の仕組みを理解し、
chown・chgrpを使って
適切に変更できる状態を目指します。
Linuxのファイルには「所有者」と「所有グループ」がある
Linuxでは、ファイルやディレクトリに 次の2つの情報が設定されています。
そのファイルを所有するユーザ
そのファイルに設定されているグループ
たとえば、次のファイルがあるとします。
OWNER root
GROUP root
この場合、 ファイルの所有者はroot、 所有グループもrootです。
所有者・所有グループはls -lで確認できる
ファイルの所有者や所有グループを確認するときは、 ls -lを利用します。
ls -l index.html
$ ls -l index.html
-rw-r----- 1 root webadmin 1240 Aug 18 10:30 index.html
この表示には多くの情報がありますが、 今回注目するのは次の部分です。
つまり、
所有者 : 所有グループ
と読み取ることができます。
所有者・所有グループとパーミッションの関係
Linux初級で学習した
rwxのパーミッションは、
所有者・所有グループと密接に関係しています。
たとえば、
-rw-r----- root webadmin index.html
というファイルであれば、
という意味になります。
chmodは「どんな操作を許可するか」を設定します。
一方、chownやchgrpは
「その権限を誰に適用するか」に関係します。
chownとは?ファイルの所有者を変更する
chownは、 ファイルやディレクトリの 所有者(owner)を変更するコマンドです。
chownは change ownerと覚えると分かりやすいでしょう。
chown ユーザ名 ファイル名
たとえば、
index.htmlの所有者を
rootからtanakaへ変更する場合は、
sudo chown tanaka index.html
とします。
ここでは所有者だけが変更され、 所有グループのwebadminは変わりません。
chgrpとは?所有グループを変更する
chgrpは、 ファイルやディレクトリの 所有グループを変更するコマンドです。
chgrpは change groupと覚えると理解しやすくなります。
chgrp グループ名 ファイル名
たとえば、
index.htmlの所有グループを
rootからwebadminへ変更する場合は、
sudo chgrp webadmin index.html
今度は所有者rootはそのままで、 所有グループだけがwebadminへ変更されます。
chownでは所有者と所有グループを同時に変更できる
実はchownでは、 所有者だけでなく 所有者と所有グループを同時に変更できます。
基本形は次のとおりです。
chown ユーザ名:グループ名 ファイル名
たとえば、
sudo chown tanaka:webadmin index.html
を実行すると、
というように、 所有者と所有グループを一度に変更できます。
chown tanaka:webadmin file
のように指定すると、
所有者と所有グループをまとめて設定できます。
chownとchgrpの違いを整理しよう
chown tanaka file
所有者を変更する。 所有者+所有グループを 同時に変更することも可能。
chgrp webadmin file
所有グループだけを 変更したい場合に利用する。
-Rオプションでディレクトリ内をまとめて変更する
実際のLinuxサーバでは、 1つのファイルだけでなく ディレクトリ内に大量のファイルが存在する ことがあります。
その場合に利用できるのが、 -R(recursive)オプションです。
sudo chown -R tanaka:webadmin /var/www/html
このコマンドを実行すると、
/var/www/htmlと
その配下にあるファイル・ディレクトリへ
再帰的に変更が適用されます。
/var/www/html
├── index.html
├── css
│ └── style.css
└── images
└── logo.png
/var/www/html tanaka:webadmin
├── index.html tanaka:webadmin
├── css tanaka:webadmin
│ └── style.css tanaka:webadmin
└── images tanaka:webadmin
└── logo.png tanaka:webadmin
指定したディレクトリ以下へまとめて適用されるため、 実際のサーバで利用するときは 対象パスを十分に確認してから実行しましょう。
実際のサーバではどんな場面で使う?
たとえば、 Webサーバ上に次のディレクトリがあるとします。
OWNER root
GROUP root
一方、Webサイトを管理する tanakaとsatoは、前の記事で作成した webadminグループに所属しているとします。
この場合、 Webコンテンツの所有グループを webadminへ変更することで、 グループ単位の権限管理がしやすくなります。
sudo chgrp -R webadmin /var/www/html
さらに適切なパーミッションを設定すれば、 webadminグループに所属するユーザへ 必要な操作権限を与えられます。
「誰をグループに所属させるか」 「ファイルをどのグループの所有にするか」 「そのグループに何の操作を許可するか」 を組み合わせることで、Linuxのアクセス権を管理します。
ここまでの権限管理を一本につなげてみよう
Linux初級から学習してきた内容を整理すると、 次のようにつながります。
つまり、Linuxのファイルアクセスは単純に 「chmod 755にする」といった数字だけで決まるわけではありません。
これらを組み合わせて考えることが重要です。
ここで実際に試してみよう:chown・chgrpシミュレーター
ここまで学習した内容を、 疑似Linuxターミナルで実際に操作してみましょう。
今回は ls -l → chown → chgrp → chown user:group の流れを試せます。
Linux Ownership Practice
現在の所有者を確認してみましょう
ls -lを実行すると、ファイルの所有者・所有グループを確認できます。
理解度チェック:どのコマンドを使う?
所有者をtanaka、 所有グループをwebadminへ 一度のコマンドで変更したい場合、 どのコマンドを利用すればよいでしょうか?
所有者と所有グループを同時に指定する方法を考えてみましょう。
chown・chgrpで初心者が間違えやすいポイント
① chownとchmodを混同する
所有者・所有グループを変更
読み取り・書き込み・実行権限を変更
名前が似ていますが役割は異なります。
chmod = パーミッション
② chown user:groupの順番を逆にする
次の順番で指定します。
chown 所有者:所有グループ ファイル
ユーザ → グループの順番です。
③ -Rを不用意に使う
-Rは便利ですが、
ディレクトリ配下すべてへ変更が及びます。
特にsudoと組み合わせる場合、 誤ったパスへchown -Rを実行すると システムのファイル所有権まで変更してしまう可能性があります。
確認問題:chown・chgrpを理解できたか確認しよう
ファイルの所有者を変更する代表的なコマンドはどれですか?
chownはchange ownerの意味で、 ファイルやディレクトリの所有者を変更するコマンドです。
index.htmlの所有グループだけをwebadminへ変更するコマンドはどれですか?
所有グループだけを変更する場合は chgrpを利用できます。
/var/www/html以下の所有者と所有グループを tanaka:webadminへ再帰的に変更するコマンドはどれですか?
-Rはrecursive(再帰的)を意味し、 ディレクトリ配下にも変更を適用します。
3問に挑戦してみましょう。
まとめ
Linuxのファイルには 所有者(owner)と所有グループ(group) が設定されている
所有者・所有グループは
ls -lで確認できる
chownは所有者、
chgrpは
所有グループを変更する
chown tanaka:webadmin fileのようにすると、
所有者と所有グループを同時に変更できる
-Rを利用すると
ディレクトリ配下へ再帰的に適用できるが、
影響範囲には注意する
次は「ファイル」から「動いているプログラム」へ
ここまでのLinux中級では、 ユーザ・グループ・ファイル所有権を学習してきました。
しかし、Linuxサーバを管理するうえでは 「ファイルがどうなっているか」だけでなく、 現在どんなプログラムが動いているのか を確認することも非常に重要です。
Linuxでは実行中のプログラムを プロセス(process)として管理しています。
次の記事では、
psやtopを使って
Linux上で動いているプロセスを確認する方法を学習します。
次は「ps・topでLinuxプロセスを確認する」を学びましょう
Linuxサーバでは、WebサーバやSSH、 データベースなどさまざまなプログラムが動作しています。
次の記事では、 プロセスとは何か、PIDとは何か、 ps・topで実行中のプロセスを確認する方法 を実際に操作しながら学習します。
ps・topでLinuxプロセスを確認する →
