sudo
特権ユーザーとしてログインするときに使用する別のパスワードでパスワードを設定してみました。
いくつかの調査をしてみましたが、答えが見つかりませんでした。sudo
これらの設定はサポートされていますか?
パスワードを忘れると、すべてが失われます。誰かがroot
同じパスワードでログインして自分自身を宣伝できます。
sudo
root
発信者のパスワード()の代わりにパスワードを尋ねるオプションがありますがrootpw
、root
パスワードを共有することは絶対オプションではないので設定しておきましたsudo
。
過去にやったことconfig 2FA
があり、うまくいきましたが、自動化という目標を達成できませんでした。たとえば、スクリプトを使用して12台のサーバーで特権コマンドを実行したい場合は、expect
addを使用して2FA
これを行うことはできません。
sudo
私が見つけた最も近い解決策は、SSH秘密鍵のみを許可し(ログイン)、パスワードとは異なるキーでパスワードを設定することです。それでも緊急状況に対応するキーがないと、コンピュータにログインできないため、あまり快適ではありません。
答え1
ユーザーパスワードの代わりにルートパスワードの入力を求めるメッセージを表示するには、いくつかのオプションを入力します/etc/sudoers
。rootpw
具体的には、ルートパスワードを入力するように求められます。はいrunaspw
、targetpw
そうです。詳細については、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.so
Berkeley 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
、同じ修正を行う必要があるかもしれません。
password
sudoの場合、実際のログインパスワードの代わりに次のものを使用する必要があります。
アンソニー@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
。) shau2
sudo権限を持つには、NOPASSWDで設定してください。- タスクを実行するには、エイリアスまたはシェルスクリプトを設定します
su shau2 -c sudo "$@"
。shau2
パスワードを要求する必要があります。正しく入力すると実行されますsudo
(shau2
パスワードは不要)。 - sudo権限を削除しました
shau
。
残念ながら、sudo権限を持つ各ユーザーに対してこの操作を繰り返す必要があります。