sudoによるスーパーユーザとしてのコマンド実行
- 概要
 sudoの基本的なコンセプトと、sudoを通常のユーザとして使用する方法を習得します。- 目的
 コマンドによっては管理者特権を必要とするものがあります。管理者の権利でコマンドを実行するには
sudoコマンドを使用します。- 所要時間
 この記事の理解には20分ほどを要します。具体的な疑問があれば、該当の章へ直接移動してもかまいません。
- 目標
 sudoの基本的なコンセプトを理解し、特定のユースケースでsudoを使用してコマンドを実行します。- 要件
 root特権またはsudo特権。これらの特権はシステム管理者のみが使用できます。詳細については、1項 「sudoの基本的なコンセプト」を参照してください。sudoパッケージをインストールする必要があります。このパッケージは、デフォルトでSUSE Linux Microに用意されています。
1 sudoの基本的なコンセプト #
sudoの基本的なコンセプトと、SUSE Linux 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 SUSE Linux Microシステムでのsudo #
    セキュリティ上の理由から、すべてのSUSE Linux 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コマンドでのみ機能します。
  
sudoによるYaSTコントロールセンターの開始 #>yastAbsolute path to 'yast' is '/usr/sbin/yast', so running it may require superuser privileges (eg. root).1>sudoyast[sudo] password for root:2
  | |
 正常に認証されると、が開きます。  | 
            昇格された特権は特定の期間保持されるので、次回のsudoコマンド実行でパスワードを再入力する必要はありません。
           
2 名前の先頭がsudoであるコマンドの実行 #
        通常のユーザは、任意のコマンドの前にsudoを追記することで、そのコマンドをrootとして実行できます。これにより、rootパスワードの入力が求められます。正常に認証されると、rootとしてコマンドが実行されます。
       
    先頭がsudoである名前のコマンドを実行するときは、rootアカウントのパスワードの入力が求められます。認証が成功すると、スーパーユーザ特権でコマンドが実行されます。
  
sudoの設定によっては、昇格された特権は、一定の期間、同じ端末セッションで作業している限り持続します。したがって、別のsudoコマンドを実行する際にパスワードを再入力する必要がありません。
  
sudoであるコマンドの実行 #
      次の手順は、rootユーザのみが編集権限を持つディレクトリに、sudoコマンドを使用してファイルをコピーする方法を示しています。
    
端末を開き、次のコマンドを使用してテストファイルを作成します。
>touch test.txt次のコマンドで
/usr/local/bin/ディレクトリにファイルをコピーします。>cp test.txt /usr/local/bin端末から次のメッセージが返されます。
cp: cannot create regular file '/usr/local/bin/test.txt': Permission denied
必要な特権が
sudoに付与されていない場合にも、このメッセージが表示されます。ここで、先頭に
sudoを付記した同じコマンドを入力します。>sudocp test.txt /usr/local/binrootパスワードの入力が求められます。入力時するパスワードは表示されません。クリアテキストとしてだけでなく、マスク文字としても表示されません。[sudo] password for root:
正常に認証されると、テストファイルが
/usr/local/binにコピーされます。
    これで、最初の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 testdrwxr-xr-x 1 root root 0 Apr 20 12:48 testsudoとzypperを使用してパッケージを管理する管理者としてパッケージ管理コマンドを実行するには、コマンドの前に
sudoを追記します。>sudozypper [--GLOBAL-OPTIONS] <COMMAND> [--COMMAND-OPTIONS] [ARGUMENTS]たとえば、Docker CEコンテナ化プラットフォームをその公式パッケージリポジトリからインストールするには、
sudoを使用して次のコマンドを実行します。>sudozypper addrepo https://download.docker.com/linux/suse/docker-ce>sudozypper refresh>sudozypper search docker-ce>sudozypper install docker-ceシステムの変更や情報への特権アクセスなどを伴わない
zypperコマンドの前にsudoを追記する必要はありません。たとえば、システムにインストールされているソフトウェアパッケージのリポジトリを列挙する操作にはsudoを必要としません。>zypper lrsudoとsystemctlを使用してシステムサービスを管理するサービスの管理に
systemdを使用するシステムでは、sudoを伴ったsystemctlコマンドを使用できます。たとえば、Apache Webサーバサービスを再起動するには次のコマンドを実行します。>sudosystemctl 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) [...]sudoとusermodを使用してユーザアカウントを変更するユーザアカウントの変更で
usermodコマンドを実行するには次のコマンドを使用します。>sudousermod [OPTION] USERNAMEたとえば、パスワードの有効期限が経過した後で、そのユーザアカウント
tuxを永続的に無効にするには日数を30に設定します。>sudousermod --inactive 30 tuxsudoとchownを使用してファイルとディレクトリの所有権を変更するファイルとディレクトリの所有権を現在の所有者から新しい所有者に変更するには、次のコマンドを使用します。
>sudochown [OPTION] [OWNER:[GROUP]] FILEたとえば、
tuxに/home/test/tux-filesディレクトリ内のファイルとサブディレクトリの所有権を付与するには、次のコマンドを実行します。>sudochown tux /home/test/tux-files/ --recursive次のコマンドを実行して所有権の変更をテストできます。
>ls -alrt /home/test/tux-files/ --recursivesudo -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 COMMANDsudo -iコマンドでは、現在のユーザの対話型ログインシェルとしてシェルが実行されます。結果として、.profileファイルや.bash_profileファイルなどのシェル起動スクリプトが存在します。たとえば、
/home/test/tux-files/ディレクトリのファイルとサブディレクトリをtuxとして一覧にするには、次のコマンドを実行します。>sudo-i -u tux ls -alrt /home/test/tux-files/別のユーザとしてコマンドを実行するために
sudo -iによる手法を使用すると、実行したコマンドが履歴に記録されます。
4 sudoとsuの違い #
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を使用して実行したコマンドはログに個別記録されません。すべてのアクションはユーザアカウント単位でのみログに記録できるからです。
5 法的事項 #
Copyright © 2006–2025 SUSE LLC and contributors. All rights reserved.
この文書は、GNUフリー文書ライセンスのバージョン1.2または(オプションとして)バージョン1.3の条項に従って、複製、頒布、および/または改変が許可されています。ただし、この著作権表示およびライセンスは変更せずに記載すること。ライセンスバージョン1.2のコピーは、「GNUフリー文書ライセンス」セクションに含まれています。
SUSEの商標については、https://www.suse.com/company/legal/を参照してください。その他の第三者のすべての商標は、各社の所有に帰属します。商標記号(®、™など)は、SUSEおよび関連会社の商標を示します。アスタリスク(*)は、第三者の商標を示します。
本書のすべての情報は、細心の注意を払って編集されています。しかし、このことは正確性を完全に保証するものではありません。SUSE LLC、その関係者、著者、翻訳者のいずれも誤りまたはその結果に対して一切責任を負いかねます。