Linux · 1 min read · Dec 25, 2025

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

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

シェルでのpermission denied

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

sudoでコマンドを実行

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

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

しかし、先に進む前に、この記事で言及されているすべてのコマンドと指示は、Bashシェルを使用したUbuntuでテストされていることを述べておく価値があります。

sudoとは何ですか?

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

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

sudoとは何か

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

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

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

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

sudoユーザー

ウィンドウを解除する:

ウィンドウの解除

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

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のmanページがこのオプションについて述べている内容です:

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

-sオプション

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

その場合、sudoコマンドの-sコマンドラインオプションを使用したいかもしれません。以下は、sudoのmanページがそれを説明している内容です:

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

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

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

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

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