macOSやLinuxではスーパーユーザーあるいはrootと呼ばれる特権ユーザが用意されています。
どのようなときに、どのようにしてスーパーユーザになるのかを説明します。
sudoコマンドとは
sudoコマンドとは、スーパーユーザー(システム管理者)の権限でプログラムを実行するためのコマンドです。スーパーユーザーは、システムの設定や管理を行うことができますが、一般ユーザーはできません。しかし、一般ユーザーがスーパーユーザーの権限を必要とする作業を行う場合があります。例えば、システムのアップデートやソフトウェアのインストールなどです。このような場合に、sudoコマンドを使うことで、一時的にスーパーユーザーの権限を借りてプログラムを実行することができます。
sudoコマンドの使い方は、以下のようになります。
sudo [オプション] [コマンド] [引数]
オプションは、sudoコマンドの動作を変更するためのパラメータです。例えば、-uオプションは、実行するユーザーを指定することができます。
コマンドは、スーパーユーザーの権限で実行したいプログラムの名前です。例えば、LinuxのUbuntuで権限が必要なコマンドは、aptやshutdownなどです。
引数は、コマンドに渡すパラメータです。例えば、”apt install firefox”というコマンドでは、installとfirefoxが引数です。
具体的な例を見てみましょう。
Ubuntuでで”sudo apt update”というコマンドは、パッケージリストを更新するために使われます。このコマンドを実行すると、パスワードを入力するように求められます。パスワードを正しく入力すると、スーパーユーザーの権限でパッケージリストが更新されます。
次はmacOSで例を示します。
“sudo -u guest ls /Users/guest”というコマンドは、ユーザーguestのホームディレクトリの内容を表示するために使われます。このコマンドでは、-u guestというオプションで実行するユーザーをguestに指定しています。このコマンドもパスワードを要求されますが、この場合はguestのパスワードではなく、自分のパスワードを入力します。
% sudo -u guest ls /Users/guest Password: Desktop Downloads Movies Pictures Documents Library Music Public %
sudoコマンドでスーパーユーザーになるには
二通りの方法を紹介します。
“-s”オプションでroot
次の通り実行します。”$”はプロンプトです。
“sudo -s”と入力して実行しています。
次の行で現在のユーザのパスワードを入力します。
すると、rootのプロンプトが表示されます。プロンプトにはsudo実行時点のカレントディレクトリが表示されています。
$ sudo -s [sudo] password for linux: root@ub2204srv:/home/linux#
詳細な説明
sudoの-sオプションでは、SHELL 環境変数が設定されている場合は、それによって指定されたシェル、または呼び出し側ユーザーのログインシェルが実行されます。
“-i”オプションでroot
“sudo -i”と入力して実行しています。
パスワードを促された場合は入力します。
すると、rootのプロンプトが表示されます。プロンプトから、rootのホームディレクトリに移動したことがわかります。
$ sudo -i root@ub2204srv:~# pwd /root
詳細な説明
rootのログイン シェルを実行します。すなわち、.profile、.bash_profile、.login などのログイン固有のリソース ファイルがシェルによって読み込まれると言うことです。sudo は、シェルを実行する前に、rootのホーム ディレクトリに移動します。
sudoコマンドが使えるユーザー、使えないユーザとは
実は、どのユーザーでもsudoコマンドが使えるわけではありません。特権を持った管理者ユーザーにログインしている必要があります。具体的には、macOSやLinuxのインストール直後に、セットアップ画面で登録したユーザー名がsudoコマンドを使用できるユーザーです。
macOSやLinuxでsudoコマンドが使える管理者ユーザーかどうかを確認する方法は次の通りです。
macOSのGUIで確認する方法は
管理者ユーザーとは、システム環境設定の「ユーザとグループ」で「管理者を許可」がオンになっているユーザーです。
macOSやLinuxのコマンドラインで確認するには
コマンドでsudoコマンドが使える管理者ユーザーかどうかを確認する方法は、以下のようになります。
ターミナルアプリを開きます。
“sudo -l -U ユーザー名”というコマンドを入力します。このコマンドは、指定したユーザーがsudoコマンドで実行できるコマンドの一覧を表示します。
コマンドの結果を確認します。もし、「User <ユーザー名> may run the following commands on this host:」というメッセージが表示されたら、そのユーザーはsudoコマンドが使えることを意味します。
以下はmacOSで”apple”というユーザ名について調べた結果です。結果は管理者ユーザーでした。
% sudo -l -U apple Password: Matching Defaults entries for apple on appurunoiMac: <<省略>> User apple may run the following commands on appurunoiMac: (ALL) ALL
もし、User ユーザー名 is not allowed to run sudo on this host.というメッセージが表示されたら、そのユーザーはsudoコマンドが使えないことを意味します。
ユーザー”guest”は管理者ユーザではありません。
% sudo -l -U guest User Guest is not allowed to run sudo on appurunoiMac. %
上記のコマンドは、macOSとLinuxで共通しています。
Linux(Ubuntu 22.04 Server)でコマンドを実行した結果は下のようになります。
$ sudo -l -U linux [sudo] password for linux: <<略>> User linux may run the following commands on ub2204srv: (ALL : ALL) ALL
最後に
スーパーユーザになってシステムを操作することは、大きなリスクを伴います。十分ご注意ください。