パスワードを使わずにサーバーでsudo認証を設定する最良の方法は何ですか?

パスワードを使わずにサーバーでsudo認証を設定する最良の方法は何ですか?

sudoを使用すると、パスワードを要求するかどうかを設定できます。

歴史的にすべてがパスワードで保護されていましたが、これが私がおなじみのモデルです。しかし最近では、暗号化はますます公開/秘密鍵認証を好むようです。

これは、GCP、AWS、またはDigitalOceanでサーバーを起動したときにパスワードを受け取らないという事実から明らかです。代わりにログインできるキーを受け取りました。

ログイン時に操作を実行したい場合は、sudoパスワードを求められません。これは明らかに私にパスワードは与えられておらず、鍵だけが与えられたためだと思います。 sudoは、次の規則に従ってパスワードを要求しません/etc/sudoers.d/90-cloud-init-users

Ubuntu ALL =(すべて)NOPASSWD:すべて

これはユーザーにとっては大丈夫です。しかし、サーバーに3〜4人のユーザーがいて、すべてsudoアクセスが必要で、すべてパスワードの代わりにキーを使用してログインした場合はどうなりますか?ユーザーがこれを実行できないようにしたいと思います。

sudo su - <someone else's username>
sudo <command>

sudoSSHDに接続するときにパスワード認証を許可せず、代わりにすべてのユーザーに認証用のパスワードを提供することをお勧めしますか?または、pam_ssh_agent_authを使用して、sudoが他の秘密鍵/公開鍵セットを使用してパスワードを認証できるようにしますか?それとも、やるべきことはありますか?

答え1

sudoにアクセスするためのパスワード認証は、実行できるコマンドを制限しません。

例えば

myuser ALL=(ALL) NOPASSWD: ALL
youruser ALL=(ALL) ALL

パスワードを入力する必要がありますが、私は入力しないことを除いて、両方のユーザーにまったく同じコマンドを実行させます。

代わりに、「すべての」コマンドではなく、ユーザーに必要な特権コマンドのみを付与するのがアイデアです。したがって、user1がサーバーを再起動する必要がある場合は、次のように指定できます。

user1 ALL=(root) NOPASSWD: /usr/sbin/reboot

今彼らができることはサーバーを再起動するだけです。

これは、人々に必要なコマンドのみを提供する最小限の権限の原則に従います。

追加資料: https://www.sweharris.org/post/2018-08-26-minimal-sudo/

関連情報