Linux · 1 min read · Dec 16, 2025

Ubuntuにおけるsudoの理解のための初心者ガイド

Linuxコマンドラインで作業中に「Permission denied」というエラーが表示されたことはありませんか?おそらく、ルート権限を必要とする操作を試みていたのでしょう。例えば、以下のスクリーンショットは、バイナリファイルをシステムディレクトリの1つにコピーしようとしたときに表示されたエラーを示しています:

シェルでのpermission denied

この問題の解決策は何でしょうか?簡単です、sudoコマンドを使用します。

sudoでコマンドを実行

コマンドを実行しているユーザーは、ログインパスワードを求められます。正しいパスワードが入力されると、操作は成功します。

sudoはLinuxのコマンドラインで作業するすべての人が知っておくべきコマンドですが、コマンドをより責任を持って効果的に使用するために知っておくべきいくつかの関連する(そして詳細な)情報があります。そして、それがこの記事でお話しする内容です。

ただし、先に進む前に、この記事で言及されているすべてのコマンドと指示は、Bashシェルを使用したUbuntuでテストされていることをお伝えしておきます。

sudoとは?

sudoコマンドは、ほとんどの方がすでにご存知かもしれませんが、特権を持つコマンド(通常はrootとして)を実行するために使用されます。これについては、上記の導入部分で既に説明しました。しかし、必要であれば、sudoを使用して他の(非root)ユーザーとしてコマンドを実行することもできます。

これは、ツールが提供する-uコマンドラインオプションを通じて実現されます。例えば、以下に示す例では、私(ヒマンシュ)が他のユーザー(howtoforge)のホームディレクトリ内のファイルの名前を変更しようとしましたが、「permission denied」エラーが表示されました。そして、同じ’mv’コマンドを’sudo -u howtoforge’で試したところ、コマンドは成功しました:

sudoとは

どのユーザーでもsudoを使用できるのか?

いいえ。ユーザーがsudoを使用できるためには、そのユーザーに対応するエントリが/etc/sudoersファイルに存在する必要があります。以下の段落は、Ubuntuのウェブサイトからの引用で、より明確にするはずです:

/etc/sudoersファイルは、誰がどのコマンドをどのユーザーとしてどのマシンで実行できるかを制御し、特定のコマンドに対してパスワードが必要かどうかなどの特別なことも制御できます。このファイルは、エイリアス(基本的に変数)とユーザー仕様(誰が何を実行できるかを制御)で構成されています。

Ubuntuを使用している場合、ユーザーがsudoコマンドを実行できることを確認するのは簡単です:そのユーザーアカウントを「管理者」タイプにするだけです。これは、システム設定… -> ユーザーアカウントに移動することで行えます。

sudoユーザー

ウィンドウのロックを解除:

ロック解除ウィンドウ

次に、アカウントタイプを変更したいユーザーを選択し、そのタイプを「管理者」に変更します。

sudoアカウントを選択

ただし、Ubuntuでない場合や、ディストリビューションがこの機能を提供していない場合は、/etc/sudoersファイルを手動で編集して変更を加えることができます。そのファイルに以下の行を追加する必要があります:

[user]    ALL=(ALL:ALL) ALL

言うまでもなく、[user]はsudo権限を付与するアカウントのユーザー名に置き換える必要があります。ここで言及する価値のある重要な点は、このファイルを編集する公式に推奨される方法はvisudoコマンドを使用することです。実行するコマンドは次のとおりです:

sudo visudo

なぜそれが重要なのかを理解するために、visudoマニュアルからの抜粋を以下に示します:

visudoはsudoersファイルを安全な方法で編集します。visudoは、同時に複数の編集を防ぐためにsudoersファイルをロックし、基本的な整合性チェックを提供し、構文エラーをチェックします。sudoersファイルが現在編集中の場合、後で再試行するようにメッセージが表示されます。

visudoに関する詳細情報は、こちらを参照してください。

sudoセッションとは?

sudoコマンドを頻繁に使用している場合、一度パスワードを正しく入力すると、複数のsudoコマンドをパスワードを求められずに実行できることに気づくでしょう。しかし、しばらくすると、sudoコマンドは再度パスワードを求めてきます。

この動作は、実行するsudoコマンドの数とは関係なく、時間に依存します。はい、デフォルトでは、ユーザーが一度パスワードを入力した後、sudoは15分間パスワードを求めません。この15分が経過すると、再度パスワードを求められます。

ただし、この動作を変更したい場合は、次のコマンドを使用して/etc/sudoersファイルを開きます:

sudo visudo

そして、次の行を探します:

Defaults env_reset

env_reset

その行の最後に以下の変数(太字で強調表示)を追加します:

Defaults env_reset,timestamp_timeout=[new-value]

[new-value]フィールドは、sudoセッションを持続させたい分数に置き換える必要があります。例えば、私は40という値を使用しました。

sudoタイムアウト値

sudoコマンドを使用するたびにパスワードを求められるようにしたい場合は、その場合、この変数に値「0」を割り当てることができます。また、sudoセッションが決してタイムアウトしないようにしたい場合は、値「-1」を割り当てることができます。

値「-1」を持つtimestamp_timeoutの使用は強く推奨されません。

sudoパスワード

sudoがパスワードを求めるとき、入力を始めると何も表示されないことに気づいたかもしれません - 通常のアスタリスクさえも表示されません。一般的には大した問題ではありませんが、何らかの理由でアスタリスクを表示したいユーザーもいるかもしれません。

良いことに、それは可能であり、非常に簡単に行えます。次の行を/etc/sudoersファイルで変更するだけです:

Defaults        env_reset

Defaults        env_reset,pwfeedback

に変更し、ファイルを保存します。

これで、sudoパスワードを入力するときにアスタリスクが表示されるようになります。

sudoパスワードを隠す

いくつかの重要なsudoコマンドラインオプション

-uコマンドラインオプション(このチュートリアルの冒頭で既に説明しました)に加えて、言及に値する他の重要なsudoコマンドラインオプションがあります。このセクションでは、それらのいくつかについて説明します。

-kオプション

例えば、パスワードを入力した後にsudoコマンドを実行したとします。ご存知の通り、デフォルトではsudoセッションは15分間アクティブのままです。このセッション中に、誰かにターミナルへのアクセスを与えなければならないが、sudoを使用させたくない場合、どうしますか?

幸いなことに、-kというコマンドラインオプションが存在し、ユーザーがsudo権限を取り消すことを可能にします。sudoマニュアルページには、このオプションについて次のように記載されています:

-k, --reset-timestamp  
コマンドなしで使用すると、ユーザーのキャッシュされた資格情報を無効にします。言い換えれば、次回sudoが実行されるときはパスワードが必要になります。このオプションはパスワードを必要とせず、ユーザーが.logoutファイルからsudo権限を取り消すことを可能にするために追加されました。  
コマンドまたはパスワードが必要なオプションと一緒に使用すると、このオプションはsudoがユーザーのキャッシュされた資格情報を無視する原因となります。その結果、sudoはパスワードを求め(セキュリティポリシーによって必要とされる場合)、ユーザーのキャッシュされた資格情報を更新しません。

-sオプション

作業の都合上、root権限を必要とする大量のコマンドを実行する必要がある場合、毎回sudoパスワードを入力したくないことがあります。また、/etc/sudoersファイルを変更してsudoセッションのタイムアウト制限を調整したくない場合もあります。

その場合、sudoコマンドの-sコマンドラインオプションを使用することを検討するかもしれません。sudoマニュアルページでは、次のように説明されています:

-s, --shell  
SHELL環境変数で指定されたシェルを実行します。コマンドが指定されている場合、それはシェルの-cオプションを介して実行されます。コマンドが指定されていない場合、対話型シェルが実行されます。

基本的に、このコマンドラインオプションが行うことは:

  • 新しいシェルを起動します - どのシェルかは、SHELL環境変数が参照されます。$SHELLが空の場合、/etc/passwdファイルに定義されたシェルが選択されます。
  • -sオプションとともにコマンド名を渡す場合(例えば:sudo -s whoami)、実行される実際のコマンドは:sudo /bin/bash -c whoamiです。
  • 他のコマンドを実行しようとしていない場合(つまり、単にsudo -sを実行しようとしている場合)、root権限を持つ対話型シェルが得られます。

ここで覚えておくべきことは、-sコマンドラインオプションはroot権限を持つシェルを提供しますが、root環境は得られないということです - あなたの.bashrcがソースされます。つまり、例えば、sudo -sが実行される新しいシェルでwhoamiコマンドを実行すると、あなたのユーザー名が返され、’root’にはなりません。

-iオプション

-iオプションは、先ほど説明した-sオプションに似ています。ただし、いくつかの違いがあります。主な違いの1つは、-iがroot環境も提供することです。つまり、あなたの(ユーザーの).bashrcは無視されます。これは、明示的にrootとしてログインすることなくrootになるようなものです。さらに、rootユーザーのパスワードを入力する必要もありません。

*重要suコマンドが存在し、ユーザーを切り替えることもできます(デフォルトではrootになります)。このコマンドは「root」パスワードを入力する必要があります。これを避けるために、sudoで実行することもできます(’sudo su’)。その場合、ログインパスワードを入力するだけで済みます。ただし、’su’と’sudo su’にはいくつかの根本的な違いがあります - それらを理解し、’sudo -i’がどのように比較されるかを知るには、こちらを参照してください。*

結論

これまでに、少なくともsudoの基本的な考え方と、そのデフォルトの動作を調整する方法を理解していただけたと思います。ここで説明した/etc/sudoersの調整を試してみてください。また、sudoコマンドについてのさらなる洞察を得るために、フォーラムの議論(最後の段落にリンクされています)もご覧ください。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。