macOSやLinuxでスーパーユーザーになるには

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

最後に

スーパーユーザになってシステムを操作することは、大きなリスクを伴います。十分ご注意ください。