目次にジャンプページナビゲーションにジャンプ: 前のページ[アクセスキーp]/次のページ[アクセスキーn]
documentation.suse.com / sudoによるスーパーユーザとしてのコマンド実行

sudoによるスーパーユーザとしてのコマンド実行

発行日: 12/12/2024
概要

sudoの基本的なコンセプトと、sudoを通常のユーザとして使用する方法を習得します。

目的

コマンドによっては管理者特権を必要とするものがあります。管理者の権利でコマンドを実行するにはsudoコマンドを使用します。

所要時間

この記事の理解には20分ほどを要します。具体的な疑問があれば、該当の章へ直接移動してもかまいません。

目標

sudoの基本的なコンセプトを理解し、特定のユースケースでsudoを使用してコマンドを実行します。

要件
  • root特権またはsudo特権。これらの特権はシステム管理者のみが使用できます。詳細については、1項 「sudoの基本的なコンセプト」を参照してください。

  • sudoパッケージをインストールする必要があります。このパッケージは、デフォルトでSLE Microに用意されています。

1 sudoの基本的なコンセプト

sudoの基本的なコンセプトと、SLE Microシステムでのsudoの動作について習得します。

sudoは、一時的に別のユーザとしてプログラムを実行するためのLinuxコマンドです。sudoはsubstitute user and doの略語で、別のユーザ(たとえばrootユーザ)の特権を借用します。これにより、rootとしてログインせずに、sudoを使用してシステム管理タスクを実行できます。

1.1 Linuxシステムにおけるsudoの概要

Linuxの通常のユーザは、そのタスクのほとんどを実行するうえで十分な範囲で許可が制限されています。rootユーザはLinuxスーパーユーザであり、管理者に相当します。

sudoを使用すると、root以外の指定されたユーザまたはユーザのグループが、特権を要するタスクを実行できます。このようなタスクとして、rootユーザまたは別のユーザとしてシステム機能を呼び出す操作などがあります。設定ファイルを通じて、システム管理者はどのユーザがどのタスクに対してsudoコマンドを実行できるかを制御できます。

1.2 SLE Microシステムでのsudo

セキュリティ上の理由から、すべてのSLE Microシステムでは通常のユーザとrootユーザが区別されています。通常のユーザは、システムディレクトリへの書き込みやプログラムのインストールができません。rootパスワードにアクセスできるいずれかのユーザがこれらの特権を手に入れ、誤って、または悪意を持ってシステムを破壊する可能性があります。

たとえば、通常のユーザとしてログインし、誤って悪意のあるWebサイトを閲覧したとします。この場合、通常のユーザとしてログインしていて管理者権限がないことから、攻撃者が隠れてマルウェアをインストールすることはできません。

したがって、セキュリティ上の理由から、rootユーザとして長期間ログインすることはお勧めできません。より安全なアプローチは、通常のユーザでログインしたまま、制限付きのコマンドを、先頭にsudoを付けて実行する方法です。

注記
注記: sudoでは管理者の権利が必要です

独自のrootパスワードを設定したシングルユーザマシンでは、sudoコマンドを使用してシステムを管理し、sudo設定を行うために必要な権利を持っています。

sudoを設定するための詳しい方法についてはhttps://documentation.suse.com/smart/systems-management/html/sudo-configure-superuser-privileges/index.htmlを参照してください。

企業などのマルチユーザ環境では、sudo特権はシステム管理者によって管理され、rootユーザの許可を制限できます。sudoでコマンドを実行していても、特定のシステムディレクトリやシステムファイルを変更できないことがあります。

1.3 sudoの動作

先頭がsudoである名前のコマンドを実行するときは、rootアカウントのパスワードの入力が求められます。認証が成功すると、スーパーユーザ特権でコマンドが実行されます。

sudoの設定によっては、昇格された特権は、一定の期間、同じ端末セッションで作業している限り持続します。したがって、別のsudoコマンドを実行する際にパスワードを再入力する必要がありません。

sudoでコマンドを実行するには次の構文を使用します。

> sudo [command]

次の例では、sudoコマンドを使用して、端末でYaSTコントロールセンターを直接開く方法について説明しています。YaSTを開くには管理者権限が必要です。したがって、YaSTはsudoコマンドでのみ機能します。

例 1: sudoによるYaSTコントロールセンターの開始
> yast
Absolute path to 'yast' is '/usr/sbin/yast', so running it may require superuser privileges (eg. root).1
> sudo yast
[sudo] password for root:2

1

yastコマンドを入力した場合にのみ、root特権が必要であることが通知されます。

2

sudoyastコマンドを開始すると、rootパスワードの入力が求められます。入力時には、パスワードは表示されません(クリアテキストとしてだけでなく、マスク文字としても表示されません)。

正常に認証されると、YaSTコントロールセンターが開きます。

昇格された特権は特定の期間保持されるので、次回のsudoコマンド実行でパスワードを再入力する必要はありません。

2 名前の先頭がsudoであるコマンドの実行

通常のユーザは、任意のコマンドの前にsudoを追記することで、そのコマンドをrootとして実行できます。これにより、rootパスワードの入力が求められます。正常に認証されると、rootとしてコマンドが実行されます。

先頭がsudoである名前のコマンドを実行するときは、rootアカウントのパスワードの入力が求められます。認証が成功すると、スーパーユーザ特権でコマンドが実行されます。

sudoの設定によっては、昇格された特権は、一定の期間、同じ端末セッションで作業している限り持続します。したがって、別のsudoコマンドを実行する際にパスワードを再入力する必要がありません。

手順 1: 名前の先頭がsudoであるコマンドの実行

次の手順は、rootユーザのみが編集権限を持つディレクトリに、sudoコマンドを使用してファイルをコピーする方法を示しています。

  1. 端末を開き、次のコマンドを使用してテストファイルを作成します。

    > touch test.txt
  2. 次のコマンドで/usr/local/bin/ディレクトリにファイルをコピーします。

    > cp test.txt /usr/local/bin

    端末から次のメッセージが返されます。

    cp: cannot create regular file '/usr/local/bin/test.txt': Permission denied

    必要な特権がsudoに付与されていない場合にも、このメッセージが表示されます。

  3. ここで、先頭にsudoを付記した同じコマンドを入力します。

    > sudo cp test.txt /usr/local/bin
  4. rootパスワードの入力が求められます。入力時するパスワードは表示されません。クリアテキストとしてだけでなく、マスク文字としても表示されません。

    [sudo] password for root:
  5. 正常に認証されると、テストファイルが/usr/local/binにコピーされます。

  6. これで、最初のsudoコマンドを実行しました。

3 一般的なsudoコマンド

任意のコマンドの前にsudoを追記することにより、昇格された許可でコマンドを実行できます。別のユーザとしてコマンドを実行し、そのユーザの環境変数を使用することもできます。

このセクションでは、普通は管理者特権を必要とする一般的なコマンドの例を示します。

sudoを使用して最後のコマンドを繰り返す

最後のコマンドを管理者として繰り返すには、sudo !!を実行して、パスワードを入力します。たとえば、管理者特権のないユーザは、/etc/ディレクトリにディレクトリを作成できません。これを作成するにはsudo !!を実行します。

> mkdir /etc/test/
mkdir: cannot create directory ‘/etc/test/’: Permission denied

> sudo !!
sudo mkdir /etc/test/
[sudo] password for root:

> ls -alrt /etc  | grep test
drwxr-xr-x 1 root root        0 Apr 20 12:48 test
sudozypperを使用してパッケージを管理する

管理者としてパッケージ管理コマンドを実行するには、コマンドの前にsudoを追記します。

> sudo zypper [--GLOBAL-OPTIONS] <COMMAND> [--COMMAND-OPTIONS] [ARGUMENTS]

たとえば、Docker CEコンテナ化プラットフォームをその公式パッケージリポジトリからインストールするには、sudoを使用して次のコマンドを実行します。

> sudo zypper addrepo https://download.docker.com/linux/suse/docker-ce
            > sudo zypper refresh
            > sudo zypper search docker-ce
            > sudo zypper install docker-ce

システムの変更や情報への特権アクセスなどを伴わないzypperコマンドの前にsudoを追記する必要はありません。たとえば、システムにインストールされているソフトウェアパッケージのリポジトリを列挙する操作にはsudoを必要としません。

> zypper lr
sudosystemctlを使用してシステムサービスを管理する

サービスの管理にsystemdを使用するシステムでは、sudoを伴ったsystemctlコマンドを使用できます。たとえば、Apache Webサーバサービスを再起動するには次のコマンドを実行します。

> sudo systemctl restart apache2

システムの変更や情報への特権アクセスなどを伴わないsystemctlコマンドの前にsudoを追記する必要はありません。たとえば、sudoを使用しなくてもネットワークマネージャの状態を表示できます。

> systemctl status NetworkManager
● NetworkManager.service - Network Manager
     Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: disabled)
    Drop-In: /usr/lib/systemd/system/NetworkManager.service.d
             └─NetworkManager-ovs.conf
     Active: active (running) since DAY YYYY-MM-DD HH:MM:SS TIMEZONE; 1h 21min ago
       Docs: man:NetworkManager(8)
   [...]
sudousermodを使用してユーザアカウントを変更する

ユーザアカウントの変更でusermodコマンドを実行するには次のコマンドを使用します。

> sudo usermod [OPTION] USERNAME

たとえば、パスワードの有効期限が経過した後で、そのユーザアカウントtuxを永続的に無効にするには日数を30に設定します。

> sudo usermod --inactive 30 tux
sudochownを使用してファイルとディレクトリの所有権を変更する

ファイルとディレクトリの所有権を現在の所有者から新しい所有者に変更するには、次のコマンドを使用します。

> sudo chown [OPTION] [OWNER:[GROUP]] FILE

たとえば、tux/home/test/tux-filesディレクトリ内のファイルとサブディレクトリの所有権を付与するには、次のコマンドを実行します。

> sudo chown tux /home/test/tux-files/ --recursive

次のコマンドを実行して所有権の変更をテストできます。

> ls -alrt /home/test/tux-files/ --recursive
sudo -sを使用して別のユーザとしてコマンドを実行

suコマンドを使用して別のユーザに切り替えてからコマンドを実行する代わりに、sudo -sコマンドを使用できます。sudo -sコマンドで実行するシェルには現在のユーザの環境が継承されます。sudo -sコマンドでは、いくつかの特権制御手段も使用できます。

別のユーザとしてコマンドを実行するには次のコマンドを使用します。

> sudo -s -u USERNAME COMMAND

デフォルトでは、前のユーザのディレクトリからコマンドが実行されます。現在のユーザは前のユーザの環境を継承するからです。

たとえば、ターゲットユーザtuxとして、/home/test/tux-files/ディレクトリのファイルとサブディレクトリを再帰的に一覧にするには、次のコマンドを実行します。

> sudo -s -u tux ls -alrt /home/test/tux-files/ --recursive

別のユーザとしてコマンドを実行するためにsudo -sによる手法を使用すると、実行したコマンドが履歴に記録されます。

sudo -iを使用してクリーンな環境で別のユーザとしてコマンドを実行

sudo -sコマンドを使用すると、現在のユーザは前のユーザの環境を継承します。sudo -iコマンドを使用すると、これを防ぐことができます。この場合、ターゲットユーザはクリーンな環境を取得し、専用の$HOMEディレクトリで起動します。

クリーンな環境で別のユーザとしてコマンドを実行するには次のコマンドを使用します。

> sudo -i -u USERNAME COMMAND

sudo -iコマンドでは、現在のユーザの対話型ログインシェルとしてシェルが実行されます。結果として、.profileファイルや.bash_profileファイルなどのシェル起動スクリプトが存在します。

たとえば、/home/test/tux-files/ディレクトリのファイルとサブディレクトリをtuxとして一覧にするには、次のコマンドを実行します。

> sudo -i -u tux ls -alrt /home/test/tux-files/

別のユーザとしてコマンドを実行するためにsudo -iによる手法を使用すると、実行したコマンドが履歴に記録されます。

4 sudosuの違い

sudoコマンドとsuコマンドの違いと、どちらをいつ使用するかについて説明します。

Linuxシステムでは、sudoまたはsuをコマンドの前に追記できます。どちらでもrootとしてコマンドを実行できます。

4.1 sudoコマンドの特徴

  • sudoを使用すると、rootとしてコマンドを実行できます。設定によっては、rootパスワードの入力は不要で、ユーザのパスワードのみを入力すれば済むことがあります。こうすることで、他のあらゆる通常のユーザと機密情報を共有する必要がなくなります。

  • sudo設定ファイルを使用すると、システム管理者はどのユーザにsudoの使用を許可するかを制御し、特定のタスクに使用を制限できます。

  • sudoによって、パスワードが特定の期間だけキャッシュに置かれます。この期間が経過すると、別のsudoコマンドを実行するときにパスワードの再入力を求められます。

  • sudoで実行したすべてのコマンドは個別にログに記録されます。ログファイルでは、日時、コマンドを実行したユーザ、およびコマンドそのものが追跡されます。

4.2 suコマンドの特徴

  • suを使用するとrootとしてコマンドを実行できますが、rootパスワードがわかっている必要があります。

  • 特定のユーザやタスクへのアクセスを制限したり、rootパスワードがわかっているユーザの特権を昇格させたりするように設定することはできません。

  • 端末セッション全体で特権が昇格されます。そのセッションに留まる限り、パスワードの再入力は求められません。

  • suを使用して実行したコマンドはログに個別記録されません。すべてのアクションはユーザアカウント単位でのみログに記録できるからです。