アクセス権の基礎: chmod
, chown
, umask
1. アクセス権の概念
Linuxでファイルやディレクトリを扱う場合、そのアクセス権を管理する必要があります。たとえば、靴下をその辺に放置していたら、家中の人がそれを使えるようになってしまいますよね!Linuxのアクセス権は、こうした「靴下の無許可使用」(もっと重要なもの、例えばスクリプトなど)を防ぐことができます。始めましょう。
Linuxのすべてのファイル(とディレクトリ)には、読む、書く、または実行する権利を誰が持つかを定めた3つのアクセス権セットがあります:
- 読み取り (r): ファイルの内容を見る、またはディレクトリ内のファイル一覧を見ることができます。
- 書き込み (w): ファイルの内容を変更したり、ディレクトリにファイルを追加/削除できます。
- 実行 (x): ファイルをプログラムとして実行する(またはディレクトリに入る)ことができます。
三層モデル
各権利は3つのユーザーグループに適用されます:
- 所有者 (owner): ファイルを作成した人。
- グループ (group): ファイルに割り当てられたグループに属するユーザー。
- その他 (others): システム内のそれ以外のすべてのユーザー。
ファイルのアクセス権の例:
-rwxr-xr--
分解してみましょう:
- 最初の文字
-
はファイルであることを表します(ディレクトリの場合はd
)。 - 最初の3文字
rwx
— 所有者の権利 (読み取り、書き込み、実行)。 - 次の3文字
r-x
— グループの権利 (読み取り、実行)。 - 最後の3文字
r--
— その他のユーザーの権利 (読み取りのみ)。
2. コマンドchmod
: アクセス権管理
シンボリック形式
コマンドchmod
は、ファイルやディレクトリのアクセス権を変更するためのものだよ。シンボリック形式の書き方はこんな感じ:
chmod [誰][アクション][権限] ファイル名
- 誰:
u
(所有者),g
(グループ),o
(その他),a
(全員). - アクション:
+
(権限を追加),-
(権限を削除),=
(権限を正確に設定). - 権限:
r
(読み取り),w
(書き込み),x
(実行).
例:
# 全員に実行権限を付与
chmod a+x script.sh
# グループにのみ書き込み権限を追加
chmod g+w file.txt
# その他の読み取り権限を削除
chmod o-r document.txt
数値形式
数値形式(またはオクタル形式)はコンパクトだけど、「数字の魔法」を理解する必要があるんだ。この形式では、各権限の組み合わせが数字で表されているよ:
r = 4
w = 2
x = 1
権限は足し算される:
rwx = 7
(4 + 2 + 1)rw- = 6
(4 + 2)r-- = 4
書き方:
chmod [数字][数字][数字] ファイル名
例:
# 所有者にrwx、グループにr-x、その他にr--を設定
chmod 754 file.sh
3. ファイルの所有者を変更する: コマンド chown
ファイルを別のユーザー(またはグループ)に渡す必要がある場合、chown
コマンドが役立ちます。
フォーマット:
chown [ユーザー]:[グループ] ファイル名
例:
# user1に所有権を渡す
chown user1 myfile.txt
# 所有者とグループを渡す
chown user1:group1 myfile.txt
# グループの変更のみ
chown :group2 myfile.txt
4. デフォルトマスク: umask
ファイルを作成すると、そのアクセス権はシステムによって決定されます。例えば、アクセス権は rw-r--r--
になる場合があります。でも、それはどこから来るのでしょう?答えは umask
コマンドにあります。
umask
とは何ですか?
umask
は、新しいファイルに対して設定されない権限を決定します。
例えば:
- ファイルの基本権限セット:
666
(実行権限なし). - マスク:
022
. - 最終的な権限:
644
(666 - 022
).
コマンド:
- 現在のマスクを見る:
umask
- 新しいマスクを設定する:
umask 0022
例:
# 新しいファイルが rw-rw-r-- の権限を持つようマスクを設定
umask 0002
5. 管理者権限とsudo
sudo
とは?
sudo
("superuser do"の略)は、LinuxやUnix系システムでスーパーユーザー(root)または他の特権を持つユーザー名でコマンドを実行できるコマンドだよ。
sudo
システムは、一時的に管理機能へのアクセスを提供し、常にrootアカウントで作業する必要がないので、システムの偶発的または悪意のある変更のリスクを減らせるよ。
簡単に言うと、管理者権限で実行するコマンドの前にsudoを書くんだ。
sudo
はどう動作するの?
コマンドの実行:
sudo
付きでコマンドを入力すると、システムはそのユーザーが特権付きのコマンドを実行する権利があるかどうかを確認するよ。
例えば:
sudo apt update
認証:
セッション中に最初にsudo
を使うと、システムは現在のユーザーのパスワード(rootではない)を入力するよう求めるよ。
パスワードを正しく入力すると、システムは短い期間(通常は5~15分)認証情報を保持して、毎回パスワードを求めないようにするんだ。
コマンドの実行:
ユーザーがsudo
の設定で指定された権限を持っていれば、そのコマンドはスーパーユーザー権限で実行されるよ。
sudo
の主な機能とコマンド
特権付きでコマンドを実行:
sudo <コマンド>
例えば:
sudo apt install nginx
他のユーザー名でコマンドを実行: -u
フラグを使用:
sudo -u <ユーザー名> <コマンド>
例えば:
sudo -u user1 ls /home/user1
管理者用のターミナル取得: root権限のシェルを起動:
sudo -i
または:
sudo su
sudo
設定の確認:
sudo -l
現在のユーザーが実行可能なコマンドを表示するよ。
sudo
設定の編集:
sudo visudo
このコマンドは、/etc/sudoers
構成ファイルを安全に編集するために開くんだ。
6. 例
実践で知識を試してみましょう。
タスク 1: chmod
を使った権限管理
ファイルを作成する:
touch myfile.txt
所有者に読み取り、書き込み、実行の権限を付与する:
chmod u+rwx myfile.txt
他のユーザーには読み取り権限だけを付与する:
chmod o+r myfile.txt
権限を確認する:
ls -l myfile.txt
タスク 2: chown
を使った所有者変更
ファイルを作成する:
touch ownedfile.txt
所有者をユーザー
user1
に変更する (管理者権限が必要):sudo chown user1 ownedfile.txt
変更を確認する:
ls -l ownedfile.txt
タスク 3: umask
での実験
現在のumaskを確認する:
umask
umaskを
027
に設定する:umask 027
新しいファイルを作成する:
touch newfile.txt
作成されたファイルの権限を確認する:
ls -l newfile.txt
7. 典型的なミスと特徴
- 所有者変更時に
sudo
を忘れる: ファイルの所有者を変更できるのは管理者だけだよ。もし"Operation not permitted"エラーが出たら、sudo
を追加してみて。 chmod
コマンドの順序ミス: 間違ったオブジェクトの権限を変更しちゃった。正しいファイルやディレクトリを選んでいるか確認してね。umask
は新しいファイルにだけ影響する: 既存のファイルの権限をumask
で変更しようとしても無理だよ。chmod
を使ってね。
Linuxのアクセス権がめっちゃ柔軟だって知ってた? 実は、全宇宙でたった一人だけが"見える"ファイルを作ることもできるんだよ!「大きな力には大きな責任が伴う」ってやつだね! さあ、chmod
、chown
、そしてumask
を使いこなして、自分のLinuxシステムを便利で安全なものにしよう!
GO TO FULL VERSION