このシナリオを想像してください。複数のユーザーがアクセスするLinuxサーバーを管理しています。すべてのユーザーはsudo
を持っています 権利。さまざまなユーザーで特定のLinuxコマンドをテストしたいとします。どのようにそれをしますか? 1人のユーザーとしてログインしてコマンドをテストしてから、ログアウトして別のユーザーとして再度ログインしてコマンドをテストしますか?はい、それはそれを行う一つの方法です。ただし、Linuxでsudoを介して別のユーザーとしてコマンドを実行する簡単な方法があります。読んで調べてください。
このガイドの目的のために、2つのユーザーアカウント、つまり "senthil"を作成しました。 および「クマール」 私のAlmaLinux8テストマシンで。現在のユーザーとして「senthil」を使用し、ターゲットユーザーとして「kumar」を使用します。
ユーザー「senthil」が、実際に「kumar」としてログインしなくても、任意のホストでユーザー「kumar」として任意のコマンドを実行できるようにしたいと思います。了解した?例を挙げましょう。
Sudoを介して別のユーザーとしてコマンドを実行する
現在、ユーザー「senthil」としてログインしています。 whoami
で現在ログインしているユーザーを表示します コマンド。
$ whoami senthil

次に、単純な「echo
」を実行します。 "sudo
を使用したコマンド 「senthil」としてログインしているときにターゲットユーザー「kumar」として:
$ sudo -u kumar bash -c 'echo "My Username is $USER, and my user ID is $UID"'
現在のユーザーのパスワード(この場合は「senthil」)を入力するように求められます。認証されると、echo
コマンドはユーザー「kumar」として実行され、「kumar」のユーザー名とユーザーIDが表示されます。
出力例:
sendhilの[sudo] password for senthil: My Username is kumar, and my user ID is 1001
実際に行ったのは、「echo
」を実行したことです。 「senthil」としてログインしているときに「commandasuser"kumar"」。これが、kumarのユーザー名とユーザーIDが表示されるのに、senthilのものは表示されない理由です。
ユーザー「kumar」のuidがid
で正しいかどうかを確認しましょう コマンド。
$ id kumar uid=1001(kumar) gid=1001(kumar) groups=1001(kumar),10(wheel)

はい、kumarのuidは両方の出力で正しいです。
ここで、-u
フラグは、指定されたコマンドを別のユーザー(この場合はkumar)およびbash -c
として実行するために使用されます。 コマンドの名前を示すために使用されます。コマンドについては一重引用符で囲んでください。
bash -c
を使用しない場合 オプション、echo
コマンドは、ターゲットユーザーではなく、現在のユーザーのユーザー名とuidを返します。
$ sudo -u kumar echo "My Username is $USER, and my user ID is $UID"
My Username is senthil, and my user ID is 1000
同様に、別のユーザーとして任意のコマンドを実行できます。
前のコマンド例では、sudo
を入力しなかったことに注意してください ターゲットユーザーのパスワード。なんで?なぜなら、echo
コマンドはsudo
を必要としません パスワード。
sudo
を必要とするコマンドを実行する場合 別のユーザーとしての権限がある場合は、パスワードを入力する必要があります。別の例を示します。
$ sudo -u kumar bash -c 'sudo dnf --refresh update'
出力例:
[sudo] password for senthil: [sudo] password for kumar: AlmaLinux 8 - BaseOS 344 B/s | 4.3 kB 00:12 AlmaLinux 8 - AppStream 388 B/s | 4.7 kB 00:12 AlmaLinux 8 - Extras 316 B/s | 3.9 kB 00:12 Dependencies resolved. Nothing to do. Complete!

sudo
と入力したことに気づきましたか 両方のユーザーのパスワード?はい。なぜなら、「sudo dnf update
」を実行するからです。 "、昇格された特権が必要です。そのため、sudo
を入力する必要があります ターゲットユーザーのパスワード。通常のコマンドの場合(例: ls
、uname
など、ターゲットユーザーのパスワードを入力する必要はありません。
Linuxコマンドだけでなく、このメソッドをスクリプトの実行にも適用できます。 $HOME
に保存されているバックアップスクリプトを実行するとします。 別のユーザーのディレクトリ。次のコマンドを使用して、現在のユーザーから他のユーザーとしてスクリプトを実行するだけです。
$ sudo -u kumar bash -c '~/backup_script_name'
Sudoパスワードなしでコマンドを実行
場合によっては、すべてのコマンドにsudoパスワードを入力したくない状況になることがあります。このような場合、NOPASSWD
を追加することで、特定のコマンドのパスワードプロンプトをスキップできます。 /etc/sudoers
のオプション ファイル。
特定のユーザーに任意のdnfの実行を許可したいとします。 sudoパスワードなしのコマンド。これを行うには、最初にdnf
のパスを見つけます which
を使用したコマンド またはwhereis
コマンド。
$ which dnf /usr/bin/dnf
$ whereis dnf dnf: /usr/bin/dnf /etc/dnf /usr/share/man/man8/dnf.8.gz
ご覧のとおり、dnf
の実行可能パス コマンドは/usr/bin/dnf
です 。
次に、/etc/sudoers
を編集します コマンドを使用したファイル:
$ sudo visudo
ヘッズアップ: sudoers
を手動で編集しないでください。 任意のテキストエディタを使用してファイル。常にvisudo
を使用してください sudoers
を安全に編集するコマンド ファイル。
ファイルの最後に次の行を追加して、「kumar」というユーザーがdnf
を実行できるようにします。 sudoパスワードなしのコマンド。
kumar ALL=NOPASSWD:/usr/bin/dnf
ファイルを保存して終了します。
今後、ユーザー「kumar」はdnf
を実行できるようになります sudo
のないコマンド パスワード。
[[email protected] ~]$ sudo -u kumar bash -c 'sudo dnf --refresh update' [sudo] password for senthil: AlmaLinux 8 - BaseOS 358 B/s | 4.3 kB 00:12 AlmaLinux 8 - AppStream 324 B/s | 4.7 kB 00:14 AlmaLinux 8 - Extras 302 B/s | 3.9 kB 00:13 Dependencies resolved. Nothing to do. Complete!
見る? sudo
を入力する必要はありません 「kumar」のパスワード。
この動作を取り消すには、上記の行を削除するだけです。
免責事項: この方法を適用するときは、十分に注意する必要があります。この方法は、生産的な目的と破壊的な目的の両方に使用できます。たとえば、ユーザーに'rm'
の実行を許可する場合を考えてみましょう。 sudo
なしのコマンド パスワードを使用すると、誤ってまたは意図的に重要なファイルを削除する可能性があります。本当に必要な場合を除いて、これを行わないでください。
この簡単なチュートリアルでは、ユーザーがLinuxでsudoを介して別のユーザーとしてコマンドを実行できるようにする方法について説明しました。また、sudoers
を変更して、特定のコマンドを実行するときに特定のユーザーのsudoパスワードプロンプトを無効にする方法も学習しました。 ファイル。
警告したように、本番システムでこのメソッドをテストするときは注意が必要です。ユーザーが無意識のうちに有害なコマンド(例:rm
)を実行することを許可する場合があります )sudoパスワードを入力する必要はありません。この種のLinuxのヒントをテストするときは、常に注意する必要があります。
関連記事:
- SSH経由でリモートLinuxシステムでコマンドを実行
- LinuxでSudoパスワードなしで特定のコマンドを実行する方法