Linux管理・運用の基本
システム管理者のための実践ガイド
システム管理者のための実践ガイド
Linuxシステムを運用していると、「ファイルにアクセスできない」「特定のユーザーにだけ編集させたい」といった権限に関する問題に直面することがよくあります。これらの問題の多くは、ファイルの所有権やグループの設定が適切でないために発生します。
今回は、ファイルやディレクトリの所有者やグループを変更するために不可欠なコマンド、chown
とchgrp
について、その使い方と実用例を詳しく解説します。
chown
コマンドでファイルの所有者・所有グループを変更する方法chgrp
コマンドでファイルの所有グループを変更する方法Linuxのファイルには、そのファイルを作成した「所有者」と、所有者が所属する「所有グループ」が設定されています。これらの情報は、ファイルやディレクトリのアクセス権限(読み取り、書き込み、実行)と深く関連しており、ls -l
コマンドで確認できます。
$ ls -l my_file.txt
-rw-r--r-- 1 user1 group1 1024 Jul 30 10:00 my_file.txt
上記の例では、my_file.txt
の所有者はuser1
、所有グループはgroup1
です。
より詳細なファイル情報、特にUID(ユーザーID)やGID(グループID)を確認したい場合は、stat
コマンドが便利です。
$ stat my_file.txt
File: my_file.txt
Size: 1024 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 132620 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ user1) Gid: ( 1000/ group1)
...
chown
コマンドは、ファイルやディレクトリの所有者と所有グループを同時に変更する際に使用します。
sudo chown [新しい所有者]:[新しい所有グループ] [ファイルまたはディレクトリ]
補足: chown
やchgrp
コマンドの実行には、通常rootユーザーまたはsudo権限が必要です。これは、悪意のあるユーザーがファイルの所有権を勝手に変更し、システムに不正なアクセスをすることを防ぐためのセキュリティ上の措置です。
sudo chown new_user file.txt
sudo chown :new_group file.txt
chown .new_group file.txt
というドット記法も一部の環境で利用可能ですが、コロン記法(:new_group
)が推奨され、より一般的です。sudo chown new_user:new_group file.txt
Webサーバーの公開ディレクトリの所有者を変更したい
Webサーバー(例: Apache, Nginx)が特定のディレクトリに書き込みを行う必要がある場合、そのディレクトリの所有者をWebサーバーの実行ユーザー(例: www-data
, apache
)に変更することがよくあります。
# Webサーバーユーザーをwww-data、グループもwww-dataに変更
$ sudo chown www-data:www-data /var/www/html/my_app
再帰的にディレクトリ内のすべての所有者を変更したい
ディレクトリとその中のすべてのファイル、サブディレクトリの所有者を一括で変更したい場合は、-R
オプション(recursive: 再帰的)を使用します。
$ sudo chown -R user2:group2 /home/old_user_data
chgrp
コマンドは、ファイルやディレクトリの所有グループのみを変更する際に使用します。chown
でもグループ変更は可能ですが、グループだけを変更したい場合に明示的に利用できます。
sudo chgrp [新しい所有グループ] [ファイルまたはディレクトリ]
特定のグループにだけ書き込み権限を与えたい
プロジェクトでファイルを共有する際、特定のグループに所属するユーザーにだけ書き込み権限を与えたい場合など、所有グループを変更し、適切なパーミッションを設定します。
# groupAにmy_projectディレクトリの所有グループを変更
$ sudo chgrp groupA /var/www/my_project
# groupAのメンバーに書き込み権限を付与 (パーミッションも合わせて変更)
$ sudo chmod g+w /var/www/my_project
複数のファイルやディレクトリの所有権をまとめて変更したい場合は、コマンドの引数にスペース区切りで複数指定したり、ワイルドカード(*
)を利用できます。
# 複数のファイルをまとめて変更
$ sudo chown user:group file1.txt file2.log dir_a
# ディレクトリ内のすべてのファイル/ディレクトリの所有者を変更
$ sudo chown user:group my_directory/*
大規模なディレクトリ内で特定の条件に合うファイルだけ所有権を一括変更したい場合は、find
コマンドとxargs
コマンドを組み合わせるのが強力です。
# /projectディレクトリ以下の全ての.logファイルの所有者を変更
$ find /project -type f -name "*.log" | xargs sudo chown user:group
所有者名やグループ名でなく、UID(ユーザーID)やGID(グループID)の数値で指定することも可能です。これは特に、ユーザー名/グループ名がシステム間で一致しないような特殊な環境や、ユーザー/グループが存在しないファイルなどに対して有効です。
# UID 1001、GID 1002 を指定して所有権を変更
$ sudo chown 1001:1002 unknown_file.txt
ファイルやディレクトリのパーミッション(chmod
)を変えてもアクセスできない場合、所有者やグループの設定が適切でないことが原因のことが多いです。例えば、ファイルのパーミッションは正しくても、所有者が異なると期待通りに動作しないことがあります。ls -l
やstat
コマンドで所有権も必ず確認しましょう。
chown
やchgrp
コマンドは、デフォルトではシンボリックリンク自体ではなく、リンク先のファイルに対して作用します。シンボリックリンク自体の所有権を変更したい場合は、-h
オプション(--no-dereference
)を使用します。これは通常の運用で使う機会は多くありませんが、覚えておくと役立つ場面があるかもしれません。
# シンボリックリンク 'mylink' のリンク先ファイル 'original_file' の所有者を変更
$ sudo chown new_user mylink
# シンボリックリンク 'mylink' 自体の所有者を変更 (稀なケース)
$ sudo chown -h new_user mylink
プロジェクト用ディレクトリにchmod g+s
(setgidビット)を設定しておくと、そのディレクトリ内に新しく作成されるファイルやディレクトリが自動的に親ディレクトリのグループ所有となり、複数ユーザーでの共同作業が非常に楽になります。これにより、手動でchgrp
を実行する手間を省けます。
# ディレクトリ 'shared_project' にsetgidビットを設定
$ sudo chmod g+s /path/to/shared_project
chown
とchgrp
コマンドは、Linuxシステムにおけるファイルやディレクトリのアクセス権限を適切に管理するために非常に重要なツールです。特に、Webアプリケーションのデプロイや複数のユーザーでファイルを共有する環境では、これらのコマンドの理解と活用が不可欠となります。
この記事がファイル所有権の管理について理解を深める一助となれば幸いです。ご覧いただきありがとうございました。次回は、Linuxにおけるユーザーグループの管理と追加方法について解説します。