www-dataって何者?誰?

最近Dockerを頻繁に扱うようになって必然的にwebサーバーに触れることが多くなった。
それにより`www-data`という文字列も良く見かける。

さぞ当たり前のように現れたこのwww-data(というユーザー&グループ)が気になったので簡単に調べてみた。

# what is www-data
> www-data is the user that web servers on Ubuntu (Apache, nginx, for example) use by default for normal operation. The web server process can access any file that www-data can access. ... Data written out by web servers will be owned by www-data.

以下 Google翻訳
www-dataは、Ubuntu上のWebサーバー（Apache、nginxなど）がデフォルトで通常の操作に使用するユーザーです。 Webサーバープロセスは、www-dataがアクセスできるすべてのファイルにアクセスできます。 ... Webサーバーによって書き出されたデータは、www-dataが所有します。

この辺は分かっていた(つもり)
じゃあ`www-data`っていつから存在してるのだろう？ apacheとかnginxとかをインストールしたときに新規で作られるのか?

```docker
docker run debian:buster-slim cat /etc/passwd
```

```
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin


www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin


backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
```

いた。
最初から用意されてるユーザーらしい、webサーバソフトウェアを実行するときは使ってね、と用意されてるのかな？

# CentOSだとapacheユーザー
CentOSは`apache`ユーザーで実行されるそう。
debian系とredhat系で違うのだろうか?

## docker環境で確かめてみよう

```docker
docker run -it centos
```

```bash
[root@4f621d28a1a4 /]# cat /etc/passwd
```

```
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin
```

それらしいユーザはいない。
apacheを入れたらもしかしたらこの中から使うかもしれない。見てみる。

## apacheを入れてみる

```bash
[root@4f621d28a1a4 /]# yum install httpd
[root@4f621d28a1a4 /]# cat /etc/passwd
```

```
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin


apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
```

新しくapacheユーザが作成されていた。
OSによっては必ずしも用意されてるわけでは無いみたい。

# nginxは？
### debian
`apt-get install nginx`で導入した場合`/etc/nginx/nginx.conf`にて

```
user www-data;
```
という記述があり、apache同様`www-data`を使用するようになっている。

### centos8
`yum install nginx`で導入後`/etc/passwd`で

```
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin
nginx:x:998:996:Nginx web server:/var/lib/nginx:/sbin/nologin
```
nginxユーザーが追加されているのが分かる。

# 終わりに
モヤっとした部分が解決できてよかった。
ただセキュリティ的観点からwww-dataではなく他のユーザーを作って割り当ててたりもする模様。あくまでデフォルト。