PR
PR

【Ubuntu】sudoコマンドの使い方ガイド|基本操作からよくあるエラーの対処法まで

記事内に広告が含まれています。

UbuntuなどのLinux環境では、一般ユーザーの権限でシステム設定を変更したり、新しいパッケージをインストールしようとすると、以下のように権限エラー(Permission denied)が発生して処理が中断してしまいます。

$ apt install curl
E: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?

エラーメッセージに「are you root?(あなたは管理者ですか?)」とある通り、システムの根幹に関わる操作を行うには管理者権限(root権限)が必要になります。

そんなときに使用するのが、一時的に管理者権限を付与してコマンドを実行する「sudo」コマンドです。

この記事では、Ubuntuを扱う上で必須となる「sudo」コマンドの基本的な使い方と、初心者がつまずきやすいエラーの対処法をわかりやすく解説します。

sudoコマンドとは?

「sudo」は、指定したコマンドを一時的に管理者(root)権限で実行するためのコマンドです。

Linuxでは、誤操作によるシステム破壊やセキュリティ上のリスクを防ぐため、一般ユーザーが実行できる操作の範囲が制限されています。

そのため、以下のような操作を行う際には管理者権限(root権限)が必須となります。

  • パッケージのインストールやアップデート(apt update や apt install など)
  • システム全体に関わる設定ファイルの編集(/etc/ 配下のファイルなど)
  • サービスの起動・停止・再起動(systemctl コマンドなど)

なぜ毎回rootユーザーでログインしないのか?

Ubuntuでは、セキュリティ保護の観点から初期状態で「root」アカウントのパスワードが無効化(パスワード未設定・ロック状態)されていて、直接「root」としてログインできない設計になっています。

これには主に2つの理由があります。

誤操作によるシステム破壊を防ぐ
常時「root」権限のまま作業していると、「rm -rf」などのコマンド誤入力やパスの指定ミスが、即座にシステム全体の破壊につながる重大なリスクがあります。
操作履歴(監査ログ)を残す
一般ユーザーが「sudo」を使ってコマンドを実行すると、システムログ(/var/log/auth.log など)に「誰が・いつ・どのコマンドを実行したか」が正確に記録されます。
さらに、各ユーザの操作履歴(history)にも記録が残るため、トラブル発生時に「誰が何をしたか」を後から確認できます。

「必要なときだけ「sudo」を使って一時的に権限を昇格させる」という運用は、安全にシステムを管理するためにおける原則となっています。

基本的な使い方

「sudo」コマンドの基本的な使い方と実行時の流れを解説します。

管理者権限で実行したいコマンドの先頭に「sudo」をつけて実行します。

コマンドを実行すると、パスワードの入力プロンプトが表示されますが、ここで入力するのは「現在ログインしている自分自身のパスワード」です。

$ sudo [実行したいコマンド]
[sudo] password for ユーザ名:

パスワード入力時の注意点(画面に文字が表示されない)

パスワードを入力しても、画面には何も表示されません。

これは画面を覗き見られた際に、パスワードの文字数すら知られないようにするための、セキュリティ仕様(エコーバック無効化)によるものです。

キーボードの入力自体は正常に受け付けられていますので、パスワードを入力したらそのまま「Enter」 キーを押してください。

パスワードを間違えた場合

パスワードが間違っていると、以下のように再度入力を求められます。

$ sudo apt update
[sudo] password for ユーザ名: 
Sorry, try again.
[sudo] password for ユーザ名: 

デフォルトの設定では、連続して3回入力を間違えると「sudo: 3 incorrect password attempts」と表示されて処理が中断され、システムログ(/var/log/auth.log など)に記録されます。

実際にパスワード入力を3回間違えた場合の出力例

実際にパスワードの入力を3回間違えてみます。

$ sudo ls
[sudo] password for tamohiko: 
Sorry, try again.
[sudo] password for tamohiko: 
Sorry, try again.
[sudo] password for tamohiko: 
sudo: 3 incorrect password attempts

このとき「/var/log/auth.log」には以下のようなログが記録されます。

2026-09-15T21:26:06.476494+09:00 mypc sudo: tamohiko : 3 incorrect password attempts ; TTY=pts/4 ; PWD=/home/tamohiko ; USER=root ; COMMAND=/usr/bin/ls

ログを確認すると、実行ユーザー名(tamohiko)だけでなく、実行端末(TTY)、作業ディレクトリ(PWD)、昇格先(USER=root)、実行しようとしたコマンド(COMMAND=/usr/bin/ls)まで詳細に監査ログとして残っていることが分かります。

rootユーザーに一時的に切り替える(慎重に!)

複数の設定変更など、管理者作業を連続して行う場合は、「sudo -i」コマンドで一時的にroot権限のシェルに切り替えることができます。

コマンドを実行すると、プロンプトの末尾が一般ユーザーを表す「$」から、rootユーザーを表す「#」に切り替わります。

「-i」オプションは「ログインシェル」として起動するため、rootユーザーの環境変数(.bashrc や PATH など)を読み込み、作業ディレクトリも自動的に「/root」に移動します。

$ sudo -i
# pwd
/root

目的の作業が終わったら必ず「exit」コマンドで一般ユーザーに戻りましょう。

# exit
logout
$ 

プロンプトが「$」に戻ると、一般ユーザのシェルに復帰できています。

作業ディレクトリを維持したい場合(sudo -s)

現在の作業ディレクトリを移動させずに「root」権限のシェルを起動したい場合は、「sudo -s」を使用します。

$ pwd
/home/tamohiko
$ sudo -s
# pwd
/home/tamohiko

よくあるエラーと対処法

「ユーザ名 is not in the sudoers file.」と表示される場合

一般ユーザーを作成した直後などに「sudo」を実行すると、以下のようなエラーメッセージが表示されてコマンドが拒否されることがあります。

$ sudo apt update
[sudo] password for tamohiko: 
tamohiko is not in the sudoers file.
This incident has been reported to the administrator.

最後の行には「この事象は管理者に報告されました(This incident has been reported to the administrator)」というメッセージが表示されますが、これはセキュリティ監査としてログが「/var/log/auth.log」等に、不正アクセスの試みとして記録されたことを意味します。

原因

ログインしているユーザーが「sudo」の実行を許可されていないためです。

Ubuntuで「sudo」を実行するためには、以下のいずれかの条件を満たしている必要があります。

  • 「/etc/sudoers」(または「/etc/sudoers.d/」配下のファイル)に個別設定が登録されていること
  • 管理者権限を持つ sudo グループ に所属していること

Ubuntuの「/etc/sudoers」では、初期設定で以下のように「sudo」グループの所属メンバーに対してすべての管理者コマンドの実行を許可する設定がされています。

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

そのため、通常は「sudo」の実行を許可したいユーザーを「sudo」グループへ追加することで解決します。

対処法

エラーが出ているユーザー自身は「sudo」が使用できないため、「sudo」できる別のユーザでログインし直して、対象のユーザを「sudo」グループに追加します。

$ sudo  gpasswd -a ユーザ名 sudo
設定の反映には再ログインが必要

グループの追加操作を行った後、対象ユーザーがすでにログインしている場合は、一度ログアウトして再ログインし設定を反映させる必要があります。

VPSごとのrootユーザアカウント設定状況

Ubuntuの標準仕様では、「root」ユーザのパスワードが無効化されていて、直接ログインすることが出来ないと、この記事の冒頭で説明しました。

ですが、「ConoHa VPS」等一部のVPSサービスでは、OSテンプレートを使用してサーバを作成する際、「root」のパスワードをユーザが設定する仕様になっています。

もし、VPSサーバを作成した直後で、まだ一般ユーザを「sudo」グループに追加していない場合、VPSの管理画面のコンソール機能を使って「root」ユーザでログインし、対象の一般ユーザを「sudo」グループに追加してあげてください。

# gpasswd -a ユーザ名 sudo

まだ一般ユーザを作成していない場合は、先に「adduser」コマンドでユーザを作成してから、「sudo」グループに追加してあげてください。

# adduser ユーザ名
# gpasswd -a ユーザ名 sudo

リダイレクト(> や >>)で「Permission denied」になる場合

「sudo」を付けてリダイレクト(上書き > や追記 >>)を行うと、「Permission denied」(権限エラー)が発生して書き込みに失敗します。

$ sudo touch /root/test.txt
$ sudo echo "sudo test" >> /root/test.txt
bash: /root/test.txt: Permission denied

原因

このエラーが発生するのは、「sudo」の管理者権限が「echo」コマンドだけに適用され、リダイレクト処理(>>)は操作している一般ユーザーのシェル権限で処理されるためです。

Linuxのシェルは、コマンドを実行するよりも前にリダイレクト先のファイルを開こうとします。

このファイルオープン処理を実行しているのが一般ユーザーであるため、書き込み権限がなく弾かれてしまいます。

解決策

この問題を解決するには、標準入力を受け取ってファイルに書き込む「tee」コマンドをパイプ(|)で「sudo」と組み合わせて使います。

$ echo "メッセージ" | sudo tee -a ファイル

「echo」による出力(一般ユーザー権限)をパイプで受け渡し、ファイルへの書き込み処理を「sudo tee」(管理者権限)に担当させることで、ファイルへ書き込むことができます。

警告: tee に -a(append: 追記)を付け忘れると、ファイル全体が上書き(クリア)されてしまうため、追記したい場合は必ず「-a」を付けましょう。
実行例:「-a」オプションなし(上書き)

「-a」オプションを付けずに実行すると、通常のリダイレクト「>」と同じ動作になり、既存の内容を上書きしてしまいます。

$ sudo cat /root/test.txt
test text

$ echo "sudo test 01" | sudo tee /root/test.txt
sudo test 01

$ sudo cat /root/test.txt
sudo test 01

元の内容である「test text」が消え、新しく書き込んだ「sudo test 01」だけになっています。

実行例:「-a」オプションあり(追記)

「-a」オプションを付けて実行すると、追記のリダイレクト「>>」と同じ動作になり、既存内容の末尾に追加で書き込みをします。

$ echo "sudo test 02" | sudo tee -a /root/test.txt
sudo test 02

$ sudo cat /root/test.txt
sudo test 01
sudo test 02

既存の「sudo test 01」を残したまま、次の行に「sudo test 02」が追記されていることが確認できます。

まとめ

  • sudo の役割: 常時「root」で作業するリスクを避け、必要なコマンドだけを一時的に管理者権限で実行するためのコマンド。
  • パスワード入力の仕様: 入力文字が表示されないのはセキュリティ(覗き見防止)のため。
  • 連続作業時の root シェル: 「sudo -i」でrootのシェルへ切り替え可能だが、作業完了後は必ず「exit」で一般ユーザーへ戻る。
  • is not in the sudoers file の対処: 対象ユーザーを「gpasswd -a ユーザー名 sudo」でグループに追加し、再ログインする。
  • リダイレクトエラーの対処: 「sudo echo ... >>」ではなく、「|」(パイプ)と「sudo tee -a」を組み合わせる。

コメント

タイトルとURLをコピーしました