su は「別のユーザーに切り替える」コマンドで切り替え先のパスワードを使い、sudo は「許可された人が、別のユーザーの権限でコマンドを実行する」コマンドで自分のパスワードを使います。 どちらも root の権限で作業するために使われますが、パスワードの持ち方、環境変数、ログの残り方が異なります。

この記事では、su、su -、sudo コマンド、sudo -s、sudo -i、sudo su - の6通りを、Ubuntu 24.04.4 LTS(sudo 1.9.15p5、util-linux 2.39.3 の su)で実行した結果をもとに比べます。ユーザー名とホームディレクトリの表示は、検証用のユーザー名を taro(操作する人)と hanako(切り替え先の一般ユーザー)に置き換えています。RHEL系での動作など、手元で動かせなかった部分は「未実行」と明記しています。

su と sudo の比較早見表

コマンド 入力するパスワード 実行後の whoami 実行後の pwd HOME 環境変数 ログインシェル 向いている場面
su 切り替え先(root) root 元のまま 切り替え先 ほぼ引き継ぐ いいえ root のパスワードを知っている環境で手早く切り替える
su - 切り替え先(root) root 切り替え先のホーム 切り替え先 作り直す はい root としてログインし直した状態にする
sudo コマンド 自分 root(その1回だけ) 元のまま /root 必要なものだけ残す ― 日常の基本。1コマンドずつ実行
sudo -s 自分 root 元のまま /root 必要なものだけ残す いいえ 今いるディレクトリで root の作業を続ける
sudo -i 自分 root /root /root 作り直す はい root として続けて作業する
sudo su - 自分 root /root /root 作り直す はい sudo -i とほぼ同じ結果(SUDO_USER は消える)

結論を先に書くと、普段は sudo コマンド、root のまま続けて作業したいときは sudo -i を使えば足ります。 以降で、この表の各マスを実行結果で確かめていきます。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Linuxのsuとsudoの違い|su -・sudo -i・-sの比較表」

su と sudo の仕組みの違い

flowchart LR
    U["taro(一般ユーザー)"]
    subgraph S1["su"]
        A1["root のパスワードを入力"] --> A2["root のシェルが起動"]
    end
    subgraph S2["sudo"]
        B1["自分のパスワードを入力"] --> B2["sudoers で許可を確認"] --> B3["コマンドを root で実行<br>記録を残す"]
    end
    U --> S1
    U --> S2
項目 su sudo
名前の意味 substitute user(ユーザーを替える) substitute user do(別のユーザーとして実行)
認証に使うもの 切り替え先のユーザーのパスワード 実行する人自身のパスワード
だれが使えるか パスワードを知っている人 sudoers で許可された人
許可の細かさ 切り替えるか、切り替えないか ユーザー・グループ・コマンド単位で設定できる
記録 切り替えたことが残る だれが、どのコマンドを実行したかが残る
パスワードの再入力 毎回 一定時間(既定は5分)は省略
設定ファイル /etc/pam.d/su、/etc/login.defs /etc/sudoers、/etc/sudoers.d/

su は root のパスワードを使う人全員で共有することになります。sudo なら各自が自分のパスワードで操作でき、だれが何を実行したかも記録に残るため、複数人で管理するサーバーでは sudo が基本になっています。

6通りを実行結果で比べる

検証の準備

一般ユーザー taro でログインし、ホーム以外のディレクトリに移動して、目印の環境変数を1つ設定しておきます。

cd /tmp/work
export MYVAR=hello
whoami; pwd; echo $HOME
echo $PATH

実行結果(表示は環境に合わせて置き換えています。以下同じ):

taro
/tmp/work
/home/taro
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

各コマンドのあとで、ユーザー・カレントディレクトリ・HOME・PATH・MYVAR・SUDO_USER・ログインシェルかどうか(shopt -q login_shell)を表示して比べました。

su(ハイフンなし)

su はユーザー名を省略すると root に切り替えます。Ubuntu は初期状態で root のパスワードが設定されていないため、su で root になろうとすると認証エラーになります。

su

実行結果:

Password: 
su: Authentication failure

そこで、su の環境の扱いは、パスワードを設定した一般ユーザー hanako への切り替えで確かめました(root を切り替え先にした su は未実行です)。

su hanako
whoami; pwd; echo $HOME; echo $MYVAR
hanako
/tmp/work
/home/hanako
hello

ユーザーと HOME は切り替わりますが、カレントディレクトリと自分で設定した環境変数(MYVAR)はそのまま残ります。 ログインシェルではないので、~/.profile は読まれません。

su -(ハイフンあり)

su - hanako
whoami; pwd; echo $HOME; echo $MYVAR

実行結果(~/.profile に目印の echo を入れてあります):

[.profile read]
hanako
/home/hanako
/home/hanako

su - は切り替え先のユーザーとしてログインし直した状態を作ります。 カレントディレクトリは切り替え先のホームになり、MYVAR は消え、~/.profile が読み込まれました。PATH も /etc/profile や ~/.profile の内容で作り直されます。su -、su -l、su --login は同じ意味です。

sudo コマンド

sudo whoami
sudo pwd
sudo sh -c 'echo $HOME'
sudo echo $HOME

実行結果:

[sudo] password for taro: 
root
/tmp/work
/root
/home/taro

入力するのは taro 自身のパスワードです。 カレントディレクトリは元のまま、HOME は /root になりました。4行目が /home/taro になっているのは、$HOME が sudo に渡る前に taro のシェルで展開されるためです。root 側の値を見たいときは、3行目のように sh -c '...' の中に書きます。

環境変数は次のようになりました。

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
SUDO_USER=taro MYVAR=

PATH は sudoers の secure_path に置き換わり、MYVAR は取り除かれ、SUDO_USER に元のユーザー名が入ります。

sudo -s

sudo -s
whoami; pwd; echo $HOME
root
/tmp/work
/root

sudo -s は root のシェルを起動します。カレントディレクトリは元のままで、ログインシェルではありません(login_shell は off、SUDO_USER=taro)。今いるディレクトリでそのまま root の作業を続けたいときに向いています。

sudo -i

sudo -i
whoami; pwd; echo $HOME
root
/root
/root

sudo -i は root のログインシェルを起動します。カレントディレクトリは /root になり、ログインシェルとして /etc/profile や root の ~/.profile が読まれます(login_shell は on、起動名は -bash)。PATH も root のログイン用の設定で作り直されました。SUDO_USER=taro は残るので、だれが root になったのかを後から確認できます。

sudo su と sudo su -

sudo su -
whoami; pwd; echo $HOME; echo "SUDO_USER=$SUDO_USER"
root
/root
/root
SUDO_USER=

sudo su - は「sudo で root になってから、su で root としてログインし直す」という2段階の動作です。結果は sudo -i とほぼ同じですが、su - が環境を作り直すため SUDO_USER が消えました。ハイフンなしの sudo su では、カレントディレクトリは /tmp/work のまま、SUDO_USER=taro も残りました。

実行結果のまとめ表

コマンド whoami pwd HOME PATH MYVAR SUDO_USER ログインシェル
(実行前) taro /tmp/work /home/taro 自分のPATH hello (空) ―
su hanako hanako /tmp/work /home/hanako 元と同じ値 hello (空) いいえ
su - hanako hanako /home/hanako /home/hanako ログイン用に作り直し (空) (空) はい
sudo コマンド root /tmp/work /root secure_path (空) taro ―
sudo -s root /tmp/work /root secure_path (空) taro いいえ
sudo -i root /root /root ログイン用に作り直し (空) taro はい
sudo su root /tmp/work /root /etc/environment の値 (空) taro いいえ
sudo su - root /root /root ログイン用に作り直し (空) (空) はい

Ubuntu 24.04 の su は、PAM(認証の仕組み)の設定で /etc/environment を読むため、sudo su のPATHには /usr/games などが含まれていました。PATH の中身はディストリビューションや設定で変わるので、手元では echo $PATH で確かめるのが確実です。

読み込む設定ファイルの違い

シェルがログインシェルとして起動するかどうかで、読み込まれるファイルが変わります(bash の場合)。

起動のしかた 該当するコマンド 読み込むファイル
ログインシェル su -、sudo -i、sudo su - /etc/profile → ~/.bash_profile、~/.bash_login、~/.profile のうち最初に見つかった1つ(Ubuntu の ~/.profile は ~/.bashrc も読む)
ログインシェルではない対話シェル su、sudo -s、sudo su /etc/bash.bashrc(Debian/Ubuntu)と ~/.bashrc
シェルを起動しない sudo コマンド 読まない(コマンドを直接実行)

今回は、su - hanako と sudo -u hanako -i で ~/.profile に入れた目印が表示されること、su hanako では表示されないことを確かめました。「root でログインしたときと同じ PATH やエイリアスで作業したい」ときは、ログインシェルになる sudo -i か su - を選びます。

sudo でよく使うオプション

コマンド 意味 確認
sudo コマンド root としてコマンドを1つ実行 実行結果あり
sudo -u hanako コマンド 指定したユーザーとして実行 実行結果あり(-i と併用)
sudo -i root のログインシェルを起動 実行結果あり
sudo -s root のシェルを起動(ログインシェルではない) 実行結果あり
sudo -u hanako -i hanako としてログインし直した状態にする 実行結果あり
sudo -l 自分に許可されている内容を表示 実行結果あり
sudo -v パスワード入力の有効時間を延長 実行結果あり
sudo -k 有効時間を取り消し、次回はパスワードを聞く 実行結果あり
sudo -n コマンド パスワードを聞かずに実行(必要ならエラー) 実行結果あり
sudo -E コマンド 自分の環境変数を引き継ぐ(許可されている場合) 実行結果あり
sudo !! 直前のコマンドを sudo 付きでやり直す(bash の履歴機能) 未実行
sudoedit ファイル 自分のエディタで安全に編集する 未実行

sudo -l で許可内容を確認する

sudo -l

実行結果(sudo グループに入っている taro の場合):

Matching Defaults entries for taro on vm:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin,
    use_pty

User taro may run the following commands on vm:
    (ALL : ALL) ALL

(ALL : ALL) ALL は「どのユーザー・グループとしても、すべてのコマンドを実行できる」という意味です。vm は検証環境のホスト名です。

パスワードの有効時間(-v、-k、-n)

sudo -v          # 認証して有効時間を更新
sudo -n true; echo "exit=$?"
sudo -k          # 有効時間を取り消す
sudo -n true; echo "after -k exit=$?"

実行結果:

exit=0
sudo: a password is required
after -k exit=1

一度認証すると、しばらくはパスワードなしで sudo を実行できます。席を離れる前に sudo -k を実行しておくと、次の sudo で再びパスワードが求められます。

環境変数を引き継ぐ(-E)

sudo -s では MYVAR が空になりましたが、sudo -E -s では MYVAR=hello が残ることを確かめました。プロキシの設定など、自分の環境変数を root 側でも使いたいときに使います。

リダイレクトは sudo の外で処理される

sudo echo x > /etc/test.conf

実行結果:

bash: /etc/test.conf: Permission denied

> によるファイルへの書き込みは、sudo ではなく taro のシェルが行うため、権限が足りずに止まります。root でファイルに書き込むときは tee を sudo で動かします。

echo x | sudo tee /tmp/work/root_owned >/dev/null
ls -l /tmp/work/root_owned
-rw-r--r-- 1 root root 2 Oct  3 08:25 /tmp/work/root_owned

別のユーザーとして実行する(sudo -u と su -c)

su も sudo も、切り替え先は root に限りません。アプリケーション用のユーザーとして操作したいときにも使えます。

sudo -u hanako whoami
sudo -u hanako sh -c 'echo $HOME; pwd'
sudo -u hanako -g hanako id

実行結果:

hanako
/home/hanako
/tmp/work
uid=1002(hanako) gid=1003(hanako) groups=1003(hanako)

sudo -u は自分のパスワードで実行できるので、切り替え先のユーザーにパスワードを設定しておく必要がありません。 ログインできない設定のサービス用ユーザーを扱うときに便利です。su でコマンドを1つだけ実行したいときは -c を使います。

su - hanako -c 'whoami; pwd'
Password: 
[.profile read]
hanako
/home/hanako
やりたいこと sudo での書き方 su での書き方
別のユーザーでコマンドを1つ実行 sudo -u hanako コマンド su hanako -c 'コマンド'
別のユーザーのログイン環境でコマンドを1つ実行 sudo -u hanako -i コマンド su - hanako -c 'コマンド'
別のユーザーのシェルに入る sudo -u hanako -i su - hanako
入力するパスワード 自分 hanako(root から実行するときは不要)

root から su を実行するときにパスワードを聞かれないのは、/etc/pam.d/su の auth sufficient pam_rootok.so という行によるものです(Ubuntu 24.04 で確認)。同じファイルには pam_wheel.so を使って su を実行できる人を特定のグループに絞る設定がコメントの形で用意されています(有効化は未実行)。

sudo が設定する環境変数

sudo で実行したコマンドからは、元のユーザーの情報を環境変数で参照できます。

sudo env | grep -E '^(SUDO_|HOME|USER|LOGNAME|SHELL|MAIL)' | sort

実行結果(UIDとGIDは環境により異なります):

HOME=/root
LOGNAME=root
MAIL=/var/mail/root
SHELL=/bin/bash
SUDO_COMMAND=/usr/bin/env
SUDO_GID=1002
SUDO_UID=1001
SUDO_USER=taro
USER=root

スクリプトの中で「sudo を付けて実行した人」を知りたいときは $SUDO_USER を使います。特定の変数だけを引き継ぎたいときは sudo --preserve-env=MYVAR コマンド と書けます(MYVAR=hello が渡ることを確認しました)。

su と sudo が root の権限で動ける理由

ls -l /usr/bin/sudo /usr/bin/su
-rwsr-xr-x 1 root root  55680 Aug 20 01:47 /usr/bin/su
-rwsr-xr-x 1 root root 277936 Mar  2  2026 /usr/bin/sudo

権限の rws の s は setuid という印で、だれが実行しても、所有者である root の権限で動くことを表します。su と sudo はこの仕組みで起動し、パスワードや sudoers を確認したうえで、許可された操作だけを実行します。

つまずきやすい表示と対処

表示 理由 対処 確認
su: Authentication failure 切り替え先のパスワードが違う、または未設定(Ubuntu の root) sudo -i を使う 実行結果あり
taro is not in the sudoers file. sudo の許可がない sudo / wheel グループに追加 実行結果あり
Sorry, try again. 自分のパスワードの入力違い もう一度入力する 実行結果あり
sudo: a terminal is required to read the password 端末のない場所(スクリプトなど)でパスワードが必要になった 必要なコマンドだけ NOPASSWD: にする、または端末から実行する 実行結果あり
sudo: a password is required -n を付けたがパスワードが必要 先に sudo -v で認証する 実行結果あり
sudo: cd: command not found cd はシェルの組み込みコマンド sudo -i や sudo -s でシェルに入る、または sudo ls ディレクトリ で中を見る 実行結果あり
Permission denied(sudo echo x > ファイル) リダイレクトは自分のシェルが処理する sudo tee を使う 実行結果あり
sudo: unknown user ... -u に指定したユーザーがいない id ユーザー名 で確かめる 実行結果あり
sudo: command not found 最小構成の環境に sudo が入っていない root で apt install sudo や dnf install sudo 未実行

sudo cd /root を実行したときの表示は次のとおりで、sudo 自身が代わりの方法を案内してくれます。

sudo: cd: command not found
sudo: "cd" is a shell built-in command, it cannot be run directly.
sudo: the -s option may be used to run a privileged shell.
sudo: the -D option may be used to run a command in a specific directory.

端末のない場所から sudo を実行したときは、次の表示になりました。

sudo: a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper
sudo: a password is required

定期実行のスクリプトで sudo が必要になったときは、スクリプト全体を root で動かすか、必要なコマンドだけを NOPASSWD: で許可する形にすると、パスワードをスクリプトに書かずに済みます。

Ubuntu系とRHEL系の違い

項目 Ubuntu系(Ubuntu、Debianの一部設定) RHEL系(RHEL、Rocky Linux、AlmaLinux など)
root のパスワード 初期状態では未設定(root で直接ログインしない前提) インストール時に設定するかを選ぶ
su で root になる 初期状態では認証エラーになる(実行結果あり) root のパスワードを設定していれば可能(未実行)
sudo を使えるグループ sudo グループ wheel グループ
sudoers の該当行 %sudo ALL=(ALL:ALL) ALL %wheel ALL=(ALL) ALL
グループへの追加 usermod -aG sudo ユーザー名 usermod -aG wheel ユーザー名
認証の記録先 /var/log/auth.log /var/log/secure

Ubuntu 24.04 の /etc/sudoers から、コメントを除いた有効な行は次のとおりでした(実行結果)。

Defaults    env_reset
Defaults    mail_badpass
Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
Defaults    use_pty
root    ALL=(ALL:ALL) ALL
%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL
@includedir /etc/sudoers.d
行 意味
Defaults env_reset 環境変数を必要なものだけに絞る(MYVAR が消えた理由)
Defaults secure_path=... sudo で実行するコマンドの PATH を固定する
root ALL=(ALL:ALL) ALL root はすべて実行できる
%sudo ALL=(ALL:ALL) ALL % はグループ。sudo グループの人はすべて実行できる
@includedir /etc/sudoers.d このディレクトリのファイルも設定として読む

RHEL系の表の内容と wheel グループの行は、一般に知られた既定の設定をもとにしており、今回は未実行です。

「sudoersファイル内にありません」を再現して直す

エラーを再現する

sudo グループに入っていないユーザーで sudo を実行すると、次の表示になります。

sudo whoami

実行結果:

[sudo] password for taro: 
taro is not in the sudoers file.

日本語の表示にしている環境では「taro は sudoers ファイル内にありません。」という文になります(日本語メッセージは今回の環境では表示できず、未実行です)。このとき sudo -l も次のように表示されました。

Sorry, user taro may not run sudo on vm.

パスワードは合っているが、sudo を使う許可がないという状態です。パスワードが違う場合は別の表示になります。

[sudo] password for taro: 
Sorry, try again.

直し方1:グループに追加する(おすすめ)

sudo を使える別のユーザー(または root)で、対象のユーザーを sudo グループに追加します。

# Ubuntu系
sudo usermod -aG sudo taro
# RHEL系(未実行)
sudo usermod -aG wheel taro
id taro

実行結果(Ubuntu 24.04、ユーザーIDなどの数字は環境により異なります):

uid=1001(taro) gid=1002(taro) groups=1002(taro),27(sudo)

グループの変更は次のログインから有効になります。taro でログインし直してから確かめると、root として実行できました。

sudo whoami
root

-aG の -a を付け忘れると、ほかの所属グループが外れてしまうので、必ず -aG の形で書きます。グループから外したときに再び taro is not in the sudoers file. に戻ることも確かめました。

直し方2:visudo で設定を追加する

特定のコマンドだけを許可したいときは、sudoers に設定を書きます。sudoers は必ず visudo で編集します。 visudo は保存時に文法を確認してくれるため、書き間違いで sudo が使えなくなる状況を防げます。

sudo visudo                       # /etc/sudoers を編集
sudo visudo -f /etc/sudoers.d/taro   # 個別のファイルに分けて書く(おすすめ)

書き方は「だれが どのホストで=(だれとして) 何を」の順です。

taro   ALL=(ALL) ALL
%devs  ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx

1行目は taro にすべてのコマンドを許可、2行目は devs グループに「nginx の再起動だけをパスワードなしで」許可する例です。

今回の検証環境では共有の設定ファイルを書き換えられないため、/etc/sudoers の編集そのものは未実行です。代わりに、visudo の文法チェック機能(-c)を、作業用ディレクトリに置いたファイルに対して実行しました。

visudo -c
visudo -cf /tmp/ok.sudoers     # 上の2行を書いたファイル
visudo -cf /tmp/ng.sudoers     # かっこを閉じ忘れたファイル

実行結果:

/etc/sudoers: parsed OK
/etc/sudoers.d/README: parsed OK
/tmp/ok.sudoers: parsed OK
/tmp/ng.sudoers:1:15: syntax error
taro ALL=(ALL ALL
              ^~~

文法の誤りは行番号と位置つきで教えてくれます。 /etc/sudoers.d/ にファイルを置く前に visudo -cf ファイル で確認する習慣を付けると安心です。なお、/etc/sudoers の権限は -r--r-----(root だけが読める)でした。

管理者がだれもいないとき

sudo を使えるユーザーが1人もいない場合は、root として操作できる別の手段が必要です。RHEL系で root のパスワードがわかるなら su - で root になってから usermod -aG wheel taro を実行します。クラウドの仮想マシンでは初期ユーザーに sudo の権限が付いているので、そのユーザーで操作します(いずれも未実行)。

ログの残り方の違い

sudo は「だれが・どのディレクトリで・だれとして・何を実行したか」を記録します。 su は「だれがだれに切り替えたか」までで、切り替えたあとに実行したコマンドは認証ログには残りません。

コマンド 認証ログに残る内容 実行したコマンド名
sudo コマンド 実行者、端末、ディレクトリ、実行ユーザー、コマンド 残る
sudo -i、sudo -s シェルを起動したこと(COMMAND=/bin/bash) シェルの中の操作は残らない
su、su - だれがだれに切り替えたか 残らない
sudo su - sudo で su を実行したこと シェルの中の操作は残らない

記録の確認先は、Ubuntu系が /var/log/auth.log、RHEL系が /var/log/secure、systemd の環境では journalctl です。sudo の記録は一般に次のような形になります(書式の例です。今回の検証環境はログ収集のサービスが動いておらず、未実行です)。

sudo:     taro : TTY=pts/0 ; PWD=/tmp/work ; USER=root ; COMMAND=/usr/bin/systemctl restart nginx

1コマンドずつ sudo コマンド で実行するほど、後から経緯を追いやすくなります。 root のシェルに入ると操作が1行にまとまってしまうため、手順を残したい作業では sudo コマンド の形が向いています。

どれを使うべきか(結論)

やりたいこと 使うコマンド 理由
管理者権限のコマンドを1つ実行する sudo コマンド 記録が残り、権限を使う範囲が最小になる
root として続けて作業する sudo -i root のログイン環境になり、SUDO_USER も残る
今のディレクトリのまま root で数コマンド sudo -s カレントディレクトリが変わらない
サービス用のユーザーとして操作する sudo -u ユーザー名 -i または sudo -u ユーザー名 コマンド そのユーザーのパスワードが不要
root のパスワードで切り替える運用の環境 su - sudo の設定がなくても使える
root でファイルに書き込む コマンド | sudo tee ファイル リダイレクトは sudo の外で処理されるため
設定ファイルを編集する sudoedit ファイル または sudo エディタ ファイル 権限のあるファイルを編集できる

sudo su - は多くの手順書に登場し、結果も sudo -i とほぼ同じです。新しく手順を書くなら、コマンド1つで済み、SUDO_USER も残る sudo -i がすっきりします。 すでに sudo su - で書かれた手順は、そのまま使っても同じ環境になります。

作業前のチェックリスト

確認すること コマンド
今のユーザーはだれか whoami または id
今のディレクトリはどこか pwd
sudo が使えるか sudo -l
root のシェルから戻る exit または Ctrl+D
元のユーザーを確かめる(sudo の中) echo $SUDO_USER

root のシェルではプロンプトの末尾が # になります(一般ユーザーは $)。作業が終わったら exit で戻る習慣を付けておくと、意図しない操作を減らせます。

よくある質問

Q. su と su - はどちらを使えばよいですか? A. 迷ったら su - です。切り替え先のユーザーの PATH や設定ファイルで作業できるため、「コマンドが見つからない」といった差が出にくくなります。su は元のディレクトリのまま切り替えたいときに使います。

Q. sudo -i と sudo su - は何が違いますか? A. 今回の実行結果では、ユーザー・カレントディレクトリ・HOME・ログインシェルである点は同じで、違いは SUDO_USER が残るかどうかと、PATH の一部でした。sudo -i は sudo だけで完結するので、記録も設定も sudo 側にまとまります。

Q. Ubuntu で root のパスワードを設定してもよいですか? A. sudo passwd root で設定はできますが、Ubuntu は sudo で管理する前提で作られているため、sudo -i を使えば root のパスワードがなくても同じ作業ができます(passwd の実行は未実行)。

Q. sudo のたびにパスワードを聞かれないようにできますか? A. sudoers に NOPASSWD: を付けると省略できます。すべてのコマンドに付けるより、systemctl restart nginx のように必要なコマンドだけに絞ると、便利さと安全さを両立できます。

Q. root のシェルから元のユーザーに戻るにはどうしますか? A. exit と入力するか、Ctrl+D を押します。sudo su - のように2段階で入った場合も、su のシェルを抜けると sudo も終わるので、1回の exit で元のユーザーに戻ります。戻ったあとに whoami で確かめると確実です。

まとめ

  • su は切り替え先のパスワード、sudo は自分のパスワードを使う
  • su - と sudo -i はログインシェル。カレントディレクトリがホームになり、環境が作り直される
  • su と sudo -s はカレントディレクトリがそのまま。ログインシェルではない
  • Ubuntu は root のパスワードが未設定で su は認証エラーになる。sudo グループ(RHEL系は wheel)で管理する
  • 「sudoers ファイル内にありません」はグループへの追加で直せる。usermod -aG のあとログインし直す
  • sudoers の編集は visudo。visudo -cf で文法を確認できる
  • 普段は sudo コマンド、続けて作業するなら sudo -i。記録が残り、後から経緯を追いやすい

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Linuxのsuとsudoの違い|su -・sudo -i・-sの比較表」

株式会社RJCでは、suとsudoの使い分けのようなLinuxの基本を仲間と学び合っています。こうした知識を共有しながら、日々技術を磨いています。

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?