【sudo】Linuxコマンド_別のユーザーで管理者権限のコマンドを実行する

「sudo」コマンドを利用することにより、管理者(スーパーユーザー)のパスワードを入力してログインしなくても、スーパーユーザーの権限でコマンドを実行することができます。




↓↓↓ITエンジニアのおすすめ学習・開発環境の詳細へ↓↓↓

「sudo」コマンドの使い方(Linux)

以下では「test」ユーザーでログインし、「dnf」コマンドを実行した例となります。

$ dnf -y install wget
エラー: このコマンドはスーパーユーザー特権(大概のシステムではrootユーザー)で実行しなければいけません。

上記のように「dnf」コマンドは

「test」ユーザーは「visudo」で事前にsudo権限を追加しておく必要があります。
※sudo権限に追加していない方はsudo権限へ追加を確認します。

以下ではスーパーユーザーに昇格せずに「test」ユーザーで「sudo」コマンドを実行し、自身のパスワードを入力することで、スーパーユーザーとしてコマンドが実行できた例となります。

$ sudo dnf -y install wget
[sudo] test のパスワード:
メタデータの期限切れの最終確認: 0:15:08 時間前の 2022年02月05日 16時27分16秒 に実施しました。
パッケージ wget-1.19.5-10.el8.x86_64 は既にインストールされています。
依存関係が解決しました。
行うべきことはありません。
完了しました!

※すでに「wget」はインストール済みとなります。

上記で一度「sudo」コマンドを実行すると少しの間はパスワードを実行せずにsudoコマンドを利用することが可能です。

※「xxxxxxは sudoers ファイル内にありません。この事象は記録・報告されます。」と言う警告で実行できなかった場合

このエラーは、一般ユーザにsudoコマンドの権限を付与していなかったのが原因となります。
ルート権限で「visudo」コマンドで以下を追加します。
「test」ユーザーにsudo権限を追加した例

単純な設定もれですが、環境構築時に忘れがちなのでここにメモしておきます。

$ visudo

------中略------

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL
%test   ALL=(ALL)       ALL

------中略------

スーパーユーザー以外のユーザーでコマンドを実行する

「sudo」コマンドではスーパーユーザー以外のユーザーとしてもコマンドを実行することが可能です。
実行するユーザーでコマンドを実行する場合、「-u」オプションを使用した後に指定します。

以下では「touch」コマンドを「user01」として実行した場合と、スーパーユーザーで実行した場合の例となります。

ユーザー「user01」で実行した例

$ sudo -u user01 touch ~user01/user01.txt
[sudo] test のパスワード:

スーパーユーザーで実行した例

$ sudo touch ~user01/test.txt

以下で「user01」フォルダは以下に「root」権限と「user01」権限で作成したファイルが確認できます。

$ sudo -u user01 ls -l ~user01/
合計 4
-rw-r--r-- 1 root   root    0  2月  6 12:40 test.txt
-rw-rw-r-- 1 user01 user01 18  2月  6 12:38 user01.txt

「sudo」コマンドでスーパーユーザーのパスワード変更が可能

「passwd」コマンドはスーパーユーザーや一般ユーザーのパスワード変更が可能なコマンドとなります。
ですが、スーパーユーザーのパスワードを忘れてしまった場合は、ログインもできなくなるので「passwd」コマンドが使用できずアクセスできないトラブルが発生する可能性があります。

ユーザーユーザーのパスワードを再設定する方法の一つとして「sudo」コマンドを使用することによりスーパーユーザーのパスワードを再設定することが可能です。

以下では「test」ユーザーでログイン後にスーパーユーザーのパスワード再設定を実行した例となります。

$ sudo passwd 
ユーザー root のパスワードを変更。
新しいパスワード:

sudoコマンドを実行できるユーザーは事前に一つは作成した方がおすすめな場合もあります。

「sudo」コマンドオプション

「sudo」コマンドのオプションは以下の通りとなります。

$ sudo --help
sudo - 別のユーザーとしてコマンドを実行します

usage: sudo -h | -K | -k | -V
usage: sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user]
usage: sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command]
usage: sudo [-AbEHknPS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] [VAR=value]
            [-i|-s] [<command>]
usage: sudo -e [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] file ...

オプション:
  -A, --askpass                 パスワード要求のために補助プログラムを使用する
  -b, --background              コマンドをバックグラウンドで実行する
  -B, --bell                    プロンプトと同時にベルを鳴らす
  -C, --close-from=num          num 以上のすべてのファイル記述子を閉じる
  -E, --preserve-env            コマンドを実行する時にユーザーの環境変数を維持する
      --preserve-env=list       指定の環境変数を維持する
  -e, --edit                    コマンドを実行するのではなくファイルを編集する
  -g, --group=group             指定したグループ名またはグループIDでコマンドを実行する
  -H, --set-home                HOME 変数を変更先となるユーザーのホームディレクトリに設定する
  -h, --help                    このヘルプを表示して終了する
  -h, --host=host               host でコマンドを実行する(プラグインがサポートしている場合)
  -i, --login                   変更先のユーザーとしてログインシェルを実行する;
                                コマンドを指定することもできます
  -K, --remove-timestamp        タイムスタンプファイルを完全に削除する
  -k, --reset-timestamp         無効なタイムスタンプファイルです
  -l, --list                   
                                ユーザーの権限を一覧表示するまたは指定したコマンドについて確認する
                                ;長い表示にするには2回指定すること
  -n, --non-interactive         非対話モードで実行し、ユーザーに入力を求めない
  -P, --preserve-groups         グループベクトルを保護する
                                (変更先のユーザーのものに設定しない)
  -p, --prompt=prompt           指定したパスワードプロンプトを使用する
  -r, --role=role               指定した役割で SELinux セキュリティーコンテキストを作成する
  -S, --stdin                   標準入力からパスワードを読み込む
  -s, --shell                   変更先のユーザーとしてシェルを実行する;
                                コマンドを指定することもできます
  -t, --type=type               指定したタイプで SELinux セキュリティーコンテキストを作成する
  -T, --command-timeout=timeout 指定した制限時間でコマンドの実行を中止する
  -U, --other-user=user         リストモードで、ユーザーの権限を表示する
  -u, --user=user               指定したユーザー名またはユーザーIDでコマンドを実行する
                                (またはファイルを編集する)
  -V, --version                 バージョン情報を表示して終了する
  -v, --validate                コマンドを実行せずにユーザーのタイムスタンプを更新する
  --                            コマンドライン引数の処理を終了する

「sudo」コマンドの使い方は以上となります。

エンジニアのオンライン学習

エンジニアにおすすめのオンライン教材比較
ITエンジニアが自宅で学習ができるオンラインスクール比較

エンジニアのおすすめ学習「Progate」と「Udemy」比較

VPS_比較
最新情報をチェックしよう!