sudo
によるスーパーユーザとしてのコマンド実行
- 概要
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
コマンドでのみ機能します。
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
| |
正常に認証されると、 が開きます。 |
昇格された特権は特定の期間保持されるので、次回の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
を付記した同じコマンドを入力します。>
sudo
cp test.txt /usr/local/bin
root
パスワードの入力が求められます。入力時するパスワードは表示されません。クリアテキストとしてだけでなく、マスク文字としても表示されません。[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 test
drwxr-xr-x 1 root root 0 Apr 20 12:48 testsudo
とzypper
を使用してパッケージを管理する管理者としてパッケージ管理コマンドを実行するには、コマンドの前に
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
sudo
とsystemctl
を使用してシステムサービスを管理するサービスの管理に
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) [...]sudo
とusermod
を使用してユーザアカウントを変更するユーザアカウントの変更で
usermod
コマンドを実行するには次のコマンドを使用します。>
sudo
usermod [OPTION] USERNAME
たとえば、パスワードの有効期限が経過した後で、そのユーザアカウント
tux
を永続的に無効にするには日数を30
に設定します。>
sudo
usermod --inactive 30 tux
sudo
とchown
を使用してファイルとディレクトリの所有権を変更するファイルとディレクトリの所有権を現在の所有者から新しい所有者に変更するには、次のコマンドを使用します。
>
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 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–2024 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、その関係者、著者、翻訳者のいずれも誤りまたはその結果に対して一切責任を負いかねます。