このシナリオを想像してください。複数のユーザーがアクセスする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パスワードなしで特定のコマンドを実行する方法