GNU/Linux >> Linux の 問題 >  >> Ubuntu

Ubuntuでsudoを理解するための初心者向けガイド

Linuxコマンドラインでの作業中に「アクセスが拒否されました」というエラーが発生したことがありますか?ルート権限を必要とする操作を実行しようとしていた可能性があります。たとえば、次のスクリーンショットは、バイナリファイルをシステムディレクトリの1つにコピーしようとしたときにスローされるエラーを示しています。

では、この問題の解決策は何ですか?シンプルで、 sudoを使用します コマンド。

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

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

But before we move ahead, it's worth mentioning that all the commands and instructions mentioned in this article have been tested on Ubuntu 14.04LTS with Bash shell version 4.3.11.

sudoとは何ですか?

sudoコマンドは、ご存知のとおり、昇格された権限(通常はrootとして)でコマンドを実行するために使用されます。この例については、上記の紹介セクションですでに説明しました。ただし、必要に応じて、sudoを使用して他の(root以外の)ユーザーとしてコマンドを実行できます。

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

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

いいえ。ユーザーがsudoを使用できるようにするには、そのユーザーに対応するエントリが / etc / sudoersにある必要があります。 ファイル。次の段落(UbuntuのWebサイトから抜粋)は、より明確にする必要があります:

The /etc/sudoers file controls who can run what commands as what users on what machines and can also control special things such as whether you need a password for particular commands. The file is composed of aliases (basically variables) and user specifications (which control who can run what).

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

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

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

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

[user]    ALL=(ALL:ALL) ALL

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

sudo visudo

なぜそうなのかを理解するために、visudoマニュアルからの抜粋を次に示します。

visudo edits the sudoers file in a safe fashion. visudo locks the sudoers file against multiple simultaneous edits, provides basic sanity checks, and checks for parse errors. If the sudoers file is currently being edited you will receive a message to try again later.

visudoの詳細については、こちらをご覧ください。

sudoセッションとは何ですか?

sudoコマンドを頻繁に使用する場合は、パスワードを1回正常に入力すると、パスワードの入力を求められることなく、複数のsudoコマンドを実行できることに気付いたと思います。しかし、しばらくすると、sudoコマンドはパスワードを再度要求します。

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

ただし、必要に応じて、この動作を変更できます。このためには、次のコマンドを使用して/ etc/sudoersファイルを開きます。

sudo visudo

次に、次の行に移動します。

Defaults env_reset

行の最後に次の変数(下で太字で強調表示されている)を追加します

Defaults env_reset,timestamp_timeout=[new-value]

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

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

値「-1」でtimestamp_timeoutを使用することは強くお勧めしません。

sudoパスワード

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

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

Defaults env_reset

Defaults        env_reset,pwfeedback

そして、ファイルを保存します。

これで、sudoパスワードを入力するたびに、アスタリスクが表示されます。

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

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

-kオプション

パスワードを入力した後、sudo-poweredコマンドを実行したばかりの場合を考えてみます。すでにご存知のように、sudoセッションはデフォルトで15分間アクティブのままです。このセッション中に、誰かに自分の端末へのアクセスを許可する必要があるが、その人にsudoを使用させたくないとします。どうしますか?

ありがたいことに、コマンドラインオプション -kがあります これにより、ユーザーはsudo権限を取り消すことができます。このオプションについてsudoのmanページに記載されている内容は次のとおりです。

-k, --reset-timestamp

When used without a command, invalidates the user's cached credentials. In other words, the next time sudo is run a password will be required. This option does not require a password and was added to allow a user to revoke sudo permissions from a .logout file.

When used in conjunction with a command or an option that may require a password, this option will cause sudo to ignore the user's cached credentials. As a result, sudo will prompt for a password (if one is required by the security policy) and will not update the user's cached credentials.

-sオプション

作業中に、root権限を必要とするコマンドのバケットロードを実行する必要があり、sudoパスワードを時々入力したくない場合があります。また、/ etc / sudoersファイルに変更を加えて、sudoセッションのタイムアウト制限を微調整する必要はありません。

その場合は、 -sを使用することをお勧めします sudoコマンドのコマンドラインオプション。 sudoのmanページで説明されている方法は次のとおりです。

-s, --shell

Run the shell specified by the SHELL environment variable if it is set or the shell specified by the invoking user's password database entry. If a command is specified, it is passed to the shell for execution via the shell's -c option. If no command is specified, an interactive shell is executed.

したがって、基本的に、このコマンドラインオプションの機能は次のとおりです。

  • 新しいシェルを起動します-どのシェルについては、SHELLenv変数が参照されます。 $ SHELLが空の場合、 / etc / passwdで定義されたシェル ファイルが取得されます。
  • -sオプションとともにコマンド名も渡す場合(例: sudo -s whoami )、実行される実際のコマンドは次のとおりです。 sudo / bin / bash-cwhoami。
  • 他のコマンドを実行しようとしていない場合(つまり、 sudo -sを実行しようとしているだけの場合 )次に、root権限を持つインタラクティブシェルを取得します。

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

-iオプション

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

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

結論

これまでに、少なくともsudoの背後にある基本的な考え方と、それをデフォルトの動作に微調整する方法を理解していただければ幸いです。ここで説明した/etc/ sudoersの微調整を試してみてください。また、フォーラムのディスカッション(最後の段落にリンクされています)を実行して、sudoコマンドに関する詳細を確認してください。


Ubuntu
  1. Ubuntu 18.04にMongoDBをインストールする方法–初心者向けガイド

  2. Ubuntu14.10のVagrantから始める-初心者ガイド

  3. Ubuntu 22.04でrootユーザーになる-ステップバイステップガイド?

  1. Ubuntu 20.04 LTSにRabbitMQをインストールします-ステップバイステップガイド?

  2. vi エディターの初心者向けガイド (コマンド ライン リファレンス)

  3. Ubuntu - sudo を使用して起動時にコマンドを実行する

  1. 初心者向けのLinuxターミナルガイド

  2. Ubuntu 20.04にPostgreSQLをインストールします-ステップバイステップガイド?

  3. Ubuntu 20.04LTSにApacheSubversionをインストールします-ステップバイステップガイド?