はじめに
下記のツイートに関連して、環境変数の引継ぎがそれぞれどうなっているのか気になったので調べてみました。
@tmtms さん、良記事ありがとうございます。
この記事でわかる・できること
sudo su, sudo su -, sudo -s, sudo -iしたときの環境変数の違いがわかります。
やった後で気づきましたが、環境変数に変化がないからと言ってそれが引き継がれているといえるかどうか不明です。
あくまでも参考程度に見ていただければ幸いです。
環境
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
初期状態の環境変数一覧
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として~/に保存しておきます。
ubuntu@xxx:~$ env | sort > env_base.txt
1. sudo su
sudo suした後にenv | sort > /home/ubuntu/env1.txtとして環境変数を保存します。
ubuntu@xxx:~$ sudo su
[sudo] password for ubuntu:
root@xxx:/home/ubuntu# env | sort > /home/ubuntu/env1.txt
diff
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
は引き継がれていませんでした。
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として環境変数を保存します。
ubuntu@xxx:~$ sudo su -
root@xxx:~# env | sort > /home/ubuntu/env2.txt
diff
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
は引き継がれていませんでした。
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として環境変数を保存します。
ubuntu@xxx:~$ sudo -s
root@xxx:/home/ubuntu# env | sort > /home/ubuntu/env3.txt
diff
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
は引き継がれていませんでした。
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として環境変数を保存します。
ubuntu@xxx:~$ sudo -i
root@xxx:~# env | sort > /home/ubuntu/env4.txt
diff
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
は引き継がれていませんでした。
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
最後に
取り急ぎでやったので何か大きな間違いを犯している気がする、、
コメント等で教えていただけると嬉しいです。