【Linux】su・sudo su・sudo -s・sudo -i の違いを徹底解説
Linuxターミナルでrootセッションを取得する方法は実にさまざまです。そのため、root権限を得たい初心者の中には、各コマンドがどのようにrootアクセスを取得するのか、互いにどう違うのか、そしてその違いがいつ問題になるのかを把握できていない方も少なくありません。この記事では、ターミナルでroot権限を取得するために使われる代表的なコマンドを一つずつ取り上げ、それぞれの仕組み、使いどころ、そして注意点まで詳しく解説します。
su
suコマンドは、シェルで現在使用しているユーザーを別のユーザーに切り替える(置き換える)ためのコマンドです。
suに続けてユーザー名を入力すれば、任意のユーザーに切り替えられます。これはシステムに対して「現在のユーザーから指定したユーザーへ切り替える(事実上ログアウトする)」よう指示するものです。また、suの後に何も指定せずに実行すると、root権限を取得できます。
「su」は、システムのrootアカウントに直接アクセスしたい場合に最適なコマンドです。sudoなどを経由せず、文字通りrootとしてログインするため、rootユーザーのパスワード入力が求められます。さらに、他の方法と違って、rootのホームディレクトリやroot環境にもアクセスできるのが大きな利点です。
sudo su
このコマンドは、rootのパスワードではなく、現在のユーザーのパスワードを要求します。
動作自体はシェルで単にsuを実行するのとほぼ同じですが、一つ重要な違いがあります。システムに直接「ユーザーを切り替える」よう指示するのではなく、「suコマンドをrootとして実行する」よう指示している点です。sudo suを実行すると、「.profile」「.bashrc」「/etc/profile」が読み込まれます。これはsu(またはsu root)を実行した場合と同様の挙動です。コマンドの前にsudoを付けると、そのコマンドにはroot権限が与えられます。
「sudo su」と「su」に大きな違いはありませんが、それでもsudo suが有用である重要な理由があります。「su」でroot権限を得るにはrootパスワードを知っている必要があります。一方sudo suでは、現在のユーザーのパスワードを求めることでroot権限が付与されます。これにより、rootパスワードなしでrootになれるため、セキュリティが向上します。
sudo -i
sudo -iの使い方はsudo suとほぼ同じですが、一点だけ例外があります。それは、rootユーザーと直接やり取りしないという点です。
sudo suと同様に、-iオプションを使えばrootパスワードを知らなくてもroot環境を取得できます。また、環境ファイル(.profileなど)をすべて読み込み、シェル内に環境を設定する点でもsudo suとよく似ています。
「sudo su」との違いは、sudo -iの方が、rootユーザーと直接やり取りすることなく、よりクリーンにrootおよびroot環境を取得できる点です。具体的に言うと、sudo suではバックグラウンドで複数のroot setuidコマンドが使用されるため、root環境へ切り替える際にどの環境変数が保持され、どれが変更されるのかを把握するのが難しくなります。sudo -iではそうした曖昧さが生じません。このため、多くの人は、直接ログインせずにrootを取得する方法としてはsudo -iが推奨される手段だと考えています。
sudo -s
このコマンドは、$SHELL変数を使ってシェルを呼び出します。
「sudo」コマンドの-sオプションは、コマンドを実行している現在のユーザーの$SHELL変数を読み取ります。このコマンドは、ユーザーがsudo /bin/bashを実行するのと同じように動作します。sudo -sは「非ログイン」形式のシェルです。sudo -iやsudo suとは異なり、システムは環境ファイルを一切読み込みません。ユーザーがシェルにsudo -sの実行を指示すると、root権限は得られますが、ユーザーやユーザー環境は変更されません。ホームディレクトリがrootのホームになることもありません。
このコマンドは、rootに完全に切り替わるのではなく、自分の$SHELL環境値を持つ対話型シェルが欲しい場合に最適です。前述の他のコマンドはroot権限を取得するものの、rootの環境ファイルに触れるため、より広範なrootアクセスが可能になり、セキュリティ上の懸念につながる可能性があります。
よくある質問
1. どのコマンドを使えばよい?
それぞれのコマンドには固有の用途があります。大切なのは、各コマンドが何をするのか、いつ使うべきかを理解することです。現時点では、root環境を取得する最も実用的でクリーンな方法はsudo -iです。一方、sudo -sを使えば、root環境に触れることなくrootシェルを取得できるため、セキュリティ面での追加メリットがあります。
2. rootにアクセスするとシステムに害を及ぼすことはある?
場合によっては、あります。特定のターミナルセッション全体で絶対にrootが必要だと確信できない限り、特定のコマンドだけroot権限で実行したい場合は、sudoに続けてコマンドを入力する方が賢明です。たとえば、Debian系のLinuxでsudo apt install vlcと入力すると、OSはVLCをインストールするためにAPTパッケージマネージャーを実行する間だけroot権限を使用します。
ここで非常に重要な注意点があります。実行したいコマンドごとにsudoを付けるのではなく、sudo -iやその他の方法でrootセッションに入った場合、コマンド履歴は/var/log/auth.logに記録されません。ミスをしても、後から何をしたのかを確認して修正することができないのです。rootセッションは記録されないため、記憶に頼って操作するしかありません。
3. コマンドの前に「sudo」と入力すると、どの種類の「sudo su」を実行していることになる?
コマンドを実行するためにsudoを入力する場合(つまり、実行したいコマンドと同じ行にsudoを入力する場合)、本質的には対話型のrootシェルの下でコマンドを実行していることになります。これは、単体のコマンドsudo -sが行うことに相当します。
まとめ
このリストの中に、100%ベストと言えるコマンドは存在しません。コマンドラインに慣れてくるにつれ、root権限を取得するさまざまな方法(実際には多数あります)それぞれについて、メリットとデメリットを比較検討し、状況に応じて使い分ける必要が出てきます。この記事が、その判断を少しでも容易にする助けになれば幸いです。コマンドについてさらに学びたい方は、ディレクトリの内容を一覧表示する便利なLinuxコマンドに関する記事もぜひご覧ください。
-
ビットコインとイーサリアムの違いを徹底解説!投資前に知っておきたい3つのポイント
2017年は間違いなく暗号資産(仮想通貨)の年となりました。その後、価格は下落したものの、特に主要通貨への関心は衰えていません。最も人気のある2つの通貨であるビットコインとイーサリアムは、この年、劇的な価格上昇を見せました。ビットコインは1,000ドル未満から約20,000ドル近くまで、イーサリアムは10ドル未満から1,300ドル超まで急騰しています。暗号資産への投資に関心がある方のために、ここではビットコインとイーサリアムの主な違いについてわかりやすく解説します。 1. ビットコインは第1世代、イーサリアムは第2世代 ビットコインは、一般の人々の注目を集めた最初の主要な暗号資産です。ある
-
Windows 10とWindows 11の違いを徹底比較!アップグレードすべきか判断するポイント
Microsoft(マイクロソフト)は、数々の新機能と改善点を盛り込んだ最新OS「Windows 11」をリリースしました。一方で、これまで数多くのパッチやアップデートが適用されてきたWindows 10は、新しいWindows 11よりも安定したOSと言えます。Microsoftによると、Windows 10のサポートは2025年以降に終了する予定のため、Windows 11へアップグレードするか、Windows 10を使い続けるかを検討する時間は十分にあります。この記事では、Windows 10とWindows 11の性能・機能・改善点を比較し、新しいOSへ移行すべきか、それともWindo