sudoパスワードをログインパスワードとは異なる設定にしてください。

sudoパスワードをログインパスワードとは異なる設定にしてください。

sudo特権ユーザーとしてログインするときに使用する別のパスワードでパスワードを設定してみました。

いくつかの調査をしてみましたが、答えが見つかりませんでした。sudoこれらの設定はサポートされていますか?

パスワードを忘れると、すべてが失われます。誰かがroot同じパスワードでログインして自分自身を宣伝できます。

sudoroot発信者のパスワード()の代わりにパスワードを尋ねるオプションがありますがrootpwrootパスワードを共有することは絶対オプションではないので設定しておきましたsudo

過去にやったことconfig 2FAがあり、うまくいきましたが、自動化という目標を達成できませんでした。たとえば、スクリプトを使用して12台のサーバーで特権コマンドを実行したい場合は、expectaddを使用して2FAこれを行うことはできません。

sudo私が見つけた最も近い解決策は、SSH秘密鍵のみを許可し(ログイン)、パスワードとは異なるキーでパスワードを設定することです。それでも緊急状況に対応するキーがないと、コンピュータにログインできないため、あまり快適ではありません。

答え1

ユーザーパスワードの代わりにルートパスワードの入力を求めるメッセージを表示するには、いくつかのオプションを入力します/etc/sudoersrootpw具体的には、ルートパスワードを入力するように求められます。はいrunaspwtargetpwそうです。詳細については、sudoers(5) マンページを参照してください。

それ以外の場合、sudoは他のすべてと同様にPAMを介して認証します。 PAMはアプリケーション固有の設定をサポートします。 Sudoの設定は(少なくとも私のDebianシステムでは)/etc/pam.d/sudo次のようになります。

$ cat sudo 
#%PAM-1.0

@include common-auth
@include common-account
@include common-session-noninteractive

つまり、デフォルトではシステムの他のすべてと同様に認証されます。その行を変更@include common-authし、PAM(およびsudo)に代替パスワードソースを使用させることができます。 common-authでコメントアウトされていない行は次のとおりです(デフォルトではLDAPなどを使用している場合は異なります)。

auth    [success=1 default=ignore]      pam_unix.so nullok_secure
auth    requisite                       pam_deny.so
auth    required                        pam_permit.so

pam_userdb.so代わりに、例を使用して、pam_unix.soBerkeley DBデータベースに代替パスワードを保存できます。

はい

私はディレクトリ/var/local/sudopass、所有者/グループroot:shadow、スキーマを作成しました2750。その中にパスワードデータベースファイルを作成しましたdb5.1_load(Debian Wheezyで使用されているBerkeley DBのバージョンです)。

#マスク0027
#db5.1_load -h /var/local/sudopass -t hash -T passwd.db
アンソニー
WMaEFvCFEFplI
^D

ハッシュはmkpasswd -m desパスワード「password」を使用して生成されます。非常に安全! (残念ながら、pam_userdbはcrypt(3)古代のハッシュよりも良いものをサポートしていないようです)。

さて、/etc/pam.d/sudoその@include common-auth行を編集して削除し、所定の位置に置きます。

auth    [success=1 default=ignore]      pam_userdb.so crypt=crypt db=/var/local/sudopass/passwd
auth    requisite                       pam_deny.so
auth    required                        pam_permit.so

pam_userdbは.db渡されたデータベースに拡張機能を追加するため、オフにする必要があります.db

~によるとデニサウア存在するコメント/etc/pam.d/sudo-i、同じ修正を行う必要があるかもしれません。

passwordsudoの場合、実際のログインパスワードの代わりに次のものを使用する必要があります。

アンソニー@sudotest:~$ sudo -K
anthony@sudotest:~$ sudo echo -e '\nit ジョブ'
[sudo] Anthonyのパスワード:passwordRETURN

効率的な

答え2

Redhat / Centosの場合、この要件は次の手順で達成できます。

カスタムユーザーを作成し、以下を渡します。

# db_load -t hash -T /usr/local/etc/passwd.db
user
pass
^d

sudo pam.d ファイルを次のように編集します。

$ cat /etc/pam.d/sudo

auth            required        pam_userdb.so db=/usr/local/etc/passwd
account         required        pam_userdb.so db=/usr/local/etc/passwd
password        include         system-auth

session         optional        pam_keyinit.so revoke
session         required        pam_limits.so

特定のユーザー/グループのみがこのカスタム方法で認証する必要があり、他のユーザー/グループはまだ一般的なシステム認証方法で認証できるように構成する方法を探しています。誰でも私にアドバイスを与えることができますか?

答え3

私はsudoがそのような設定をサポートしていないと思います。 sudoパスワードプロンプトの目的は、sudoコマンドを実行している人がログインしている人と同じであることを確認することです。最も簡単な方法は、現在ログインしているユーザーに再認証を要求することです。

つまり、sudoパスワードプロンプトの目的は次のとおりです。いいえ設立する特権つまり、確立するアイデンティティ。設定されたIDとsudo設定に基づいて、そのユーザーに必要な権限またはアクセス権があるかどうかを判断できます。

答え4

これをテストして詳細を解決できるシステムにすぐにアクセスすることはできませんが、次のアイデアがあります。

  • (一般ログインアカウントはと仮定しますshau。)
  • 2番目のアカウントを作成しますshau2。 (あなたが同じUIDを持つことを望むかどうかはわかりませんshau。)
  • shau2sudo権限を持つには、NOPASSWDで設定してください。
  • タスクを実行するには、エイリアスまたはシェルスクリプトを設定しますsu shau2 -c sudo "$@"shau2パスワードを要求する必要があります。正しく入力すると実行されますsudoshau2 パスワードは不要)。
  • sudo権限を削除しましたshau

残念ながら、sudo権限を持つ各ユーザーに対してこの操作を繰り返す必要があります。

関連情報