1. 概要

このチュートリアルでは、Linuxでのsudoコマンドとそのコマンドで使用できるさまざまなオプションについて説明します。

さらに、sudosuとどのように異なり、いつ使用する必要があるかを確認します。

2. 序章

すべてのユーザーにルートアクセスを提供することは良い習慣ではありません。 それでも、通常のユーザーはスーパーユーザーとしていくつかのコマンドを実行する必要がある場合があります。 ここで、 sudo S uper U ser DO )アクセスが登場します。 The sudo コマンドは、システム(ルート)レベルでコマンドを実行するための特別な権限をユーザーに付与する効率的な方法を提供します。 sudo 、ユーザーを切り替えることなく管理タスクを実行できるようになります。

3. インストール

ほとんどのLinuxディストリビューションでは、sudoパッケージがデフォルトでインストールされます。

使用するには sudo、 入力してみましょう sudo Enterキーを押します

$ sudo

sudo がインストールされている場合は、sudoパッケージの使用状況の詳細が表示されます。 そうでない場合は、「コマンドが見つかりません」というメッセージが表示されます。

それでは、 sudo がまだインストールされていない場合に、さまざまなLinuxディストリビューションにインストールする方法を見てみましょう。

apt パッケージマネージャーを使用している場合は、次のように入力します。

$ apt install sudo

または、 yum を使用している場合:

$ yum install sudo

4. sudoアクセスの許可

ユーザーを「sudoer」にするために、ユーザーにsudoアクセスを許可する必要があります。 ユーザーとグループのsudo特権は、 / etc /sudoersファイルで定義されています。 このファイルにユーザーを直接追加することも、sudoグループにユーザーを追加することもできます。

sudo 特権を示すために、ユーザー「baeldung」がすでに存在していることを前提としています。

4.1. sudoersファイルへのユーザーの追加

/ etc / sudoers ファイルにユーザーを追加するには、visudoエディターを使用します。

$ visudo

以下を挿入して、ファイルにユーザーを追加しましょう。

baeldung ALL=(ALL) NOPASSWD:ALL

この構成では、 sudo を使用するときにパスワードは不要であり、ユーザーにはすべてのsudo特権が付与されます。

パスワードなしの設定を、ディレクトリの作成や削除などの特定の権限に制限することもできます。 このために、次のステートメントを追加できます。

baeldung ALL=(ALL) NOPASSWD:/bin/mkdir,/bin/rmdir

4.2. sudoグループへのユーザーの追加

sudo グループは、rootアカウントにアクセスできるユーザーのグループです。 これは、Windows管理者グループに似ています。 「baeldung」ユーザーをsudoグループに追加しましょう。

$ usermod -aG sudo baeldung

前のコマンドを実行するには、rootユーザーまたはsudo権限を持つユーザーである必要があります。

5. ユーザーのsudo権限の確認

ユーザーにsudo権限が付与されているかどうかを確認したい場合があります。 2つのシナリオがあります。現在のログインユーザーを確認することと、別のユーザーを確認することです。

次に、各シナリオでsudo特権の検証を行う方法について説明します。

5.1. 現在のログインユーザーの確認

sudo は、現在のユーザーのsudoキャッシュされた資格情報を更新するためのオプション-vを提供します。 ユーザーにsudo権限がない場合、コマンドは失敗し、意味のあるエラーメッセージが出力されます。

いくつかの例を見てみましょう。

kent$ sudo -v
[sudo] password for kent: 

kent$ echo $?
0

まず、ユーザー kent としてログインし、コマンド sudo-vを実行します。

パスワードを入力した後、 sudo は何も出力せず、戻り値0を取得してから、コマンドは正常に実行されました。

したがって、ユーザーkentsudo特権が付与されていることがわかり、キャッシュされた資格情報を更新しました。

それでは、ユーザー guest としてログインし、もう一度テストしてみましょう。

guest$ sudo -v
Sorry, user guest may not run sudo on MyHost.

上記の出力が示すように、ユーザーが sudo 権限を持っていない場合、コマンドはエラーメッセージを出力します。

5.2. 任意のユーザーの確認

別のユーザーのsudo特権を確認する場合は、sudo-lおよび-Uオプションを使用できます。

ただし、チェッカーであるの現在のログインユーザーは、すでにsudo権限を持っている必要があります。 いくつかの例を見てみましょう:

kent$ sudo -l -U guest
[sudo] password for kent: 
User guest is not allowed to run sudo on MyHost.

kentユーザーはすでにsudo特権を持っています。 ユーザーguestを確認すると、 sudo は、ターゲットユーザーにsudo権限が付与されていないことを報告します。

それ以外の場合、ターゲットユーザーが sudo 権限を持っている場合、ユーザーの権限の詳細情報が出力に出力されます。

ユーザーericを確認しましょう。

kent$ sudo -l -U eric
Matching Defaults entries for eric on MyHost:
    env_keep+=http_proxy, env_keep+=https_proxy, env_keep+=ftp_proxy

Runas and Command-specific defaults for eric:
    Defaults!/etc/ctdb/statd-callout !requiretty

User eric may run the following commands on MyHost:
    (ALL) ALL

6. sudoを使用する

sudo 権限を持つコマンドは、次の方法で実行できます。

$ sudo COMMAND

options を含めて、sudoコマンドの動作をカスタマイズすることもできます。

$ sudo OPTION.. COMMAND

6.1. 例

sudoコマンドを使用したいくつかの例を見てみましょう。

ユーザー「sammy」のパスワードを変更できます。

$ sudo passwd sammy

または、 sudo を使用して、システムをすぐに再起動できます。

$ sudo shutdown -r now

-k オプションをsudoとともに使用して、現在のsudo認証強制終了できます。

$ sudo -k

これで、次にsudoコマンドを発行すると、システムはパスワードの入力を求めます。

sudo コマンドのバージョンを知りたい場合は、-Vオプションを使用できます。 これにより、 sudo バージョン番号が出力され、終了します。

$ sudo -V

ここで、ユーザーの操作なしで sudo コマンドをバックグラウンドで実行する場合は、-bオプションを使用できます。

$ sudo -b

-b オプションを使用してコマンドを実行すると、シェルジョブ制御を使用してそのプロセスを操作することはできません。

-h オプションを使用して、sudoコマンドとその使用可能なオプションに関するヘルプを取得できます。

$ sudo -h

これにより、 sudo コマンドで使用可能なすべてのオプションが、各オプションの簡単な説明とともに出力されます。

6.2. sudo戻り値

コマンドまたはプログラムがsudoで正常に実行されると、sudo0(ゼロ)の値で終了し、コマンドから期待される結果が得られます。 。

一方、エラーまたは権限の問題が発生した場合、sudoは終了値1(1)で終了します。

7. sudo vs suコマンド

sudo コマンドを使用すると、アカウントとパスワードを使用してroot権限でシステムコマンドを実行できますが、 su コマンドを使用すると、別のユーザーに切り替えて、現在のセッションからログアウトせずにシェル。

必要に応じて root権限でいくつかのコマンドを実行するには、sudoを使用する必要があります。 T o完全に別のユーザーに切り替えるか、より長いセッションでrootに切り替える場合は、代わりにsuを使用することをお勧めします。

8. 結論

要約すると、Linuxでのsudoコマンドについて説明しました。 使用方法を示し、一般的な使用例をいくつか示しました。 最後に、sudoコマンドとsuコマンドを比較し、どちらを選択するかを説明しました。