sudo su, sudo su -, sudo -s, sudo -iと環境変数の関係

<!--
:::note info
インフォメーション
infoは省略可能です。
:::

:::note warn
警告
○○に注意してください。
:::

:::note alert
より強い警告
○○しないでください。
:::
-->

## はじめに
下記のツイートに関連して、環境変数の引継ぎがそれぞれどうなっているのか気になったので調べてみました。
@tmtms さん、良記事ありがとうございます。

https://x.com/yu1c1yu1c1/status/1842461435319992796


### この記事でわかる・できること
sudo su, sudo su -, sudo -s, sudo -iしたときの環境変数の違いがわかります。

:::note warn
やった後で気づきましたが、環境変数に変化がないからと言ってそれが引き継がれているといえるかどうか不明です。
あくまでも参考程度に見ていただければ幸いです。
:::

### 環境

```zsh
ubuntu@xxx:~$ uname -a
Linux xxx 5.15.0-122-generic #132-Ubuntu SMP Thu Aug 29 13:45:52 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
ubuntu@xxx:~$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
```


## 確認事項
それぞれのコマンドの入力前と入力後でenvしてそれをdiffします。ユーザーが定義した環境変数についても気になったのでexport FOOBAR=foobarも設定しています。
- sudo su
- sudo su -
- sudo -s
- sudo -i

初期状態の環境変数一覧
```zsh
ubuntu@xxx:~$ env
SHELL=/bin/bash
PWD=/home/ubuntu
LOGNAME=ubuntu
XDG_SESSION_TYPE=tty
MOTD_SHOWN=pam
HOME=/home/ubuntu
LANG=en_US.UTF-8
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
SSH_CONNECTION=192.168.1.211 57310 192.168.1.45 22
LESSCLOSE=/usr/bin/lesspipe %s %s
XDG_SESSION_CLASS=user
TERM=xterm-256color
LESSOPEN=| /usr/bin/lesspipe %s
USER=ubuntu
SHLVL=1
XDG_SESSION_ID=312
XDG_RUNTIME_DIR=/run/user/1000
SSH_CLIENT=192.168.1.211 57310 22
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
PATH=/home/ubuntu/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
FOOBAR=foobar
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
SSH_TTY=/dev/pts/0
_=/usr/bin/env
```

env_base.txtとして~/に保存しておきます。
```zsh
ubuntu@xxx:~$ env | sort > env_base.txt
```

### 1. sudo su
sudo suした後にenv | sort > /home/ubuntu/env1.txtとして環境変数を保存します。
```zsh
ubuntu@xxx:~$ sudo su
[sudo] password for ubuntu:
root@xxx:/home/ubuntu# env | sort > /home/ubuntu/env1.txt
```

diff
```zsh
ubuntu@xxx:~$ colordiff -y env_base.txt env1.txt
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus         | HOME=/root
FOOBAR=foobar                                                 <
HOME=/home/ubuntu                                             <
LANG=en_US.UTF-8                                                LANG=en_US.UTF-8
LESSCLOSE=/usr/bin/lesspipe %s %s                               LESSCLOSE=/usr/bin/lesspipe %s %s
LESSOPEN=| /usr/bin/lesspipe %s                                 LESSOPEN=| /usr/bin/lesspipe %s
LOGNAME=ubuntu                                                | LOGNAME=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=0   LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=0
MOTD_SHOWN=pam                                                | MAIL=/var/mail/root
PATH=/home/ubuntu/.local/bin:/usr/local/sbin:/usr/local/bin:/ | PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:
PWD=/home/ubuntu                                                PWD=/home/ubuntu
SHELL=/bin/bash                                                 SHELL=/bin/bash
SHLVL=0                                                         SHLVL=0
SSH_CLIENT=192.168.1.211 57310 22                             | SUDO_COMMAND=/usr/bin/su
SSH_CONNECTION=192.168.1.211 57310 192.168.1.45 22            | SUDO_GID=1000
SSH_TTY=/dev/pts/0                                            | SUDO_UID=1000
                                                              > SUDO_USER=ubuntu
TERM=xterm-256color                                             TERM=xterm-256color
USER=ubuntu                                                   | USER=root
_=/usr/bin/env                                                  _=/usr/bin/env
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desk <
XDG_RUNTIME_DIR=/run/user/1000                                <
XDG_SESSION_CLASS=user                                        <
XDG_SESSION_ID=312                                            <
XDG_SESSION_TYPE=tty                                          <
```

引き継がれていたのは下記で、自ら設定した`FOOBAR=foobar`は引き継がれていませんでした。
```zsh
LANG=en_US.UTF-8
LESSCLOSE=/usr/bin/lesspipe %s %s
LESSOPEN=| /usr/bin/lesspipe %s
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=0
PWD=/home/ubuntu
SHELL=/bin/bash
SHLVL=0
TERM=xterm-256color
_=/usr/bin/env
```

### 2. sudo su -
sudo su -した後にenv | sort > /home/ubuntu/env2.txtとして環境変数を保存します。
```zsh
ubuntu@xxx:~$ sudo su -
root@xxx:~# env | sort > /home/ubuntu/env2.txt
```

diff
```zsh
ubuntu@xxx:~$ colordiff -y env_base.txt env2.txt
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus         | HOME=/root
FOOBAR=foobar                                                 <
HOME=/home/ubuntu                                             <
LANG=en_US.UTF-8                                                LANG=en_US.UTF-8
LESSCLOSE=/usr/bin/lesspipe %s %s                               LESSCLOSE=/usr/bin/lesspipe %s %s
LESSOPEN=| /usr/bin/lesspipe %s                                 LESSOPEN=| /usr/bin/lesspipe %s
LOGNAME=ubuntu                                                | LOGNAME=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=0   LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=0
MOTD_SHOWN=pam                                                | MAIL=/var/mail/root
PATH=/home/ubuntu/.local/bin:/usr/local/sbin:/usr/local/bin:/ | PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:
PWD=/home/ubuntu                                              | PWD=/root
SHELL=/bin/bash                                                 SHELL=/bin/bash
SHLVL=0                                                         SHLVL=0
SSH_CLIENT=192.168.1.211 57310 22                             <
SSH_CONNECTION=192.168.1.211 57310 192.168.1.45 22            <
SSH_TTY=/dev/pts/0                                            <
TERM=xterm-256color                                             TERM=xterm-256color
USER=ubuntu                                                   | USER=root
_=/usr/bin/env                                                  _=/usr/bin/env
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desk   XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desk
XDG_RUNTIME_DIR=/run/user/1000                                <
XDG_SESSION_CLASS=user                                        <
XDG_SESSION_ID=312                                            <
XDG_SESSION_TYPE=tty                                          <
```

引き継がれていたのは下記で、自ら設定した`FOOBAR=foobar`は引き継がれていませんでした。
```zsh
LANG=en_US.UTF-8
LESSCLOSE=/usr/bin/lesspipe %s %s
LESSOPEN=| /usr/bin/lesspipe %s
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=0
SHELL=/bin/bash
SHLVL=0
TERM=xterm-256color
_=/usr/bin/env
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desk
```

### 3. sudo -s
sudo -sした後にenv | sort > /home/ubuntu/env3.txtとして環境変数を保存します。
```zsh
ubuntu@xxx:~$ sudo -s
root@xxx:/home/ubuntu# env | sort > /home/ubuntu/env3.txt
```
diff
```zsh
ubuntu@xxx:~$ colordiff -y env_base.txt env3.txt
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus         | HOME=/root
FOOBAR=foobar                                                 <
HOME=/home/ubuntu                                             <
LANG=en_US.UTF-8                                                LANG=en_US.UTF-8
LESSCLOSE=/usr/bin/lesspipe %s %s                               LESSCLOSE=/usr/bin/lesspipe %s %s
LESSOPEN=| /usr/bin/lesspipe %s                                 LESSOPEN=| /usr/bin/lesspipe %s
LOGNAME=ubuntu                                                | LOGNAME=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=0   LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=0
MOTD_SHOWN=pam                                                | MAIL=/var/mail/root
PATH=/home/ubuntu/.local/bin:/usr/local/sbin:/usr/local/bin:/ | PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:
PWD=/home/ubuntu                                                PWD=/home/ubuntu
SHELL=/bin/bash                                                 SHELL=/bin/bash
SHLVL=0                                                         SHLVL=0
SSH_CLIENT=192.168.1.211 57310 22                             | SUDO_COMMAND=/bin/bash
SSH_CONNECTION=192.168.1.211 57310 192.168.1.45 22            | SUDO_GID=1000
SSH_TTY=/dev/pts/0                                            | SUDO_UID=1000
                                                              > SUDO_USER=ubuntu
TERM=xterm-256color                                             TERM=xterm-256color
USER=ubuntu                                                   | USER=root
_=/usr/bin/env                                                  _=/usr/bin/env
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desk <
XDG_RUNTIME_DIR=/run/user/1000                                <
XDG_SESSION_CLASS=user                                        <
XDG_SESSION_ID=312                                            <
XDG_SESSION_TYPE=tty                                          <

```

引き継がれていたのは下記で、自ら設定した`FOOBAR=foobar`は引き継がれていませんでした。
```zsh
LANG=en_US.UTF-8
LESSCLOSE=/usr/bin/lesspipe %s %s
LESSOPEN=| /usr/bin/lesspipe %s
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=0
PWD=/home/ubuntu
SHELL=/bin/bash
SHLVL=0
TERM=xterm-256color
_=/usr/bin/env
``` 
### 4. sudo -i 
sudo -iした後にenv | sort > /home/ubuntu/env4.txtとして環境変数を保存します。
```zsh
ubuntu@xxx:~$ sudo -i
root@xxx:~# env | sort > /home/ubuntu/env4.txt
```

diff
```zsh
ubuntu@xxx:~$ colordiff -y env_base.txt env4.txt
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus         | HOME=/root
FOOBAR=foobar                                                 <
HOME=/home/ubuntu                                             <
LANG=en_US.UTF-8                                                LANG=en_US.UTF-8
LESSCLOSE=/usr/bin/lesspipe %s %s                               LESSCLOSE=/usr/bin/lesspipe %s %s
LESSOPEN=| /usr/bin/lesspipe %s                                 LESSOPEN=| /usr/bin/lesspipe %s
LOGNAME=ubuntu                                                | LOGNAME=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=0   LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=0
MOTD_SHOWN=pam                                                | MAIL=/var/mail/root
PATH=/home/ubuntu/.local/bin:/usr/local/sbin:/usr/local/bin:/ | PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:
PWD=/home/ubuntu                                              | PWD=/root
SHELL=/bin/bash                                                 SHELL=/bin/bash
SHLVL=0                                                         SHLVL=0
SSH_CLIENT=192.168.1.211 57310 22                             | SUDO_COMMAND=/bin/bash
SSH_CONNECTION=192.168.1.211 57310 192.168.1.45 22            | SUDO_GID=1000
SSH_TTY=/dev/pts/0                                            | SUDO_UID=1000
                                                              > SUDO_USER=ubuntu
TERM=xterm-256color                                             TERM=xterm-256color
USER=ubuntu                                                   | USER=root
_=/usr/bin/env                                                  _=/usr/bin/env
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desk   XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desk
XDG_RUNTIME_DIR=/run/user/1000                                <
XDG_SESSION_CLASS=user                                        <
XDG_SESSION_ID=312                                            <
XDG_SESSION_TYPE=tty                                          <

```

引き継がれていたのは下記で、自ら設定した`FOOBAR=foobar`は引き継がれていませんでした。
```zsh
LANG=en_US.UTF-8
LESSCLOSE=/usr/bin/lesspipe %s %s
LESSOPEN=| /usr/bin/lesspipe %s
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=0
SHELL=/bin/bash
SHLVL=0
TERM=xterm-256color
_=/usr/bin/env
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desk
```

## 最後に
取り急ぎでやったので何か大きな間違いを犯している気がする、、
コメント等で教えていただけると嬉しいです。