はじめに
「プロセスは実行中のプログラムのこと」とは理解していたものの、
「OSユーザーってそもそも何者なのか?」
「www-data や mysql って、プログラムじゃないの?」
といったところで混乱したので、自分の中で整理した内容をまとめておく。
プロセスとOSユーザーは別物
例えば、python3 script.py を実行すれば python3 というプロセスが起動する。
そのプロセスは「誰が実行したのか?」という情報(=OSユーザー)を持っている。
OSユーザーとは?
OSユーザーとは、OS内に登録された“名前付きの利用者”であり、
プロセスを実行する“主体”を示すもの。
ubuntu:普段使う人間用ユーザー(ログイン用)
www-data:Webサーバー専用のユーザー(Apache/Nginxなどがこの名義で動く)
mysql:MySQL専用ユーザー(mysqldがこの名義で動く)
root:管理者ユーザー(すべての権限を持つ)
これらはプロセスではないし、実行ファイルでもない。
ただの名義。そのプロセスがどのユーザーの責任で動いているかを表す。
なぜOSユーザーを分けるのか?
結論「全部をrootで動かすと何でもできてしまって危険」だから。
Webサーバーが乗っ取られても、www-dataユーザーなら他の重要ファイルにはアクセスできない。
mysqldはmysqlユーザーで動いていれば、データベースの領域だけ触れる。
それぞれのプロセスに必要最小限の権限だけを与えることで、セキュリティが保たれる。
まとめ
プロセス:実際に動いているプログラム
OSユーザー:そのプロセスを動かしている“名義”
OSユーザー自体はプログラムではないし、実行されているものでもない
プロセスには必ず「どのOSユーザーが動かしているか」という情報がある
OSユーザーを分けることで、安全にプロセスを管理・実行できる
自分としては、「プロセスは実行されているプログラム」「OSユーザーはそのプロセスの名義」と整理することで
ようやく腑に落ちた。
同じところでつまずいた人の参考になれば。