ログインパスワードとは異なるsudoパスワードを設定します


29

特権ユーザーとして、sudoパスワードを別のパスワードに設定してから、ログイン時に使用したパスワードを設定しようとしています。

私はいくつかの研究をしましたが、答えを見つけていません。いsudoた構成のサポートその種類は?

パスワードを紛失すると、すべてが失われます。誰かがログインしrootて、同じパスワードで昇格できます。

sudoには、root呼び出されたユーザーパスワードの代わりにパスワードを要求するオプションがあります(rootpw)が、rootパスワードを共有することは間違いなくオプションではないため、セットアップしsudoます。

config 2FA過去にやったことがありますが、それはうまく機能しましたが、自動化の目的を無効にします。たとえば、expectスクリプトを使用して多数のサーバーで特権コマンドを実行する場合、追加2FAしても実行できません。

私が見つけた最も近い解決策は、SSH秘密鍵のみを許可し、sudo(ログイン)パスワードとは異なる鍵でパスフレーズを設定することです。それでも、緊急事態では、そのキーを持たないPCでログインできないため、快適ではありません。


1
なぜこれが正確に必要なのですか?たぶん問題はどこか別の場所にあるのでしょう。sudoがパスワードを要求しないように、特権アカウントでシステムにログインするためのデュアルファクター認証を取得してから「NOPASSWD」を取得する方が良いでしょうか?次に、ネットワークがダウンしている場合(sshアクセスなし)にログインできるように、強力なパスワードを備えた別の緊急ローカルアカウントが必要です。
ジリブ

回答:


30

ユーザーのパスワードではなく、ルートパスワードを要求する場合は、に入力できるオプションがあります/etc/sudoersrootpw特に、rootパスワードを要求するようになります。ある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.so、代替パスワードをBerkeley DBデータベースに保存できます。

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

#umask 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オフのままにする必要があることに注意してください。

コメントのdannysauerによると、同じ編集を行う必要があるかもしれません。/etc/pam.d/sudo-i

さて、sudo passwordには、実際のログインパスワードの代わりに使用する必要があります。

anthony @ sudotest:〜$ sudo -K
anthony @ sudotest:〜$ sudo echo -e '\ nit working'
[sudo]アンソニーのパスワード: passwordRETURN

出来た

「sudo-i」も設定してください。これは、sudoの新しいバージョンが「sudo -i」によく使用するものです(ベンダーが何かを変更していない場合)。
ダニーザウアー

PAM config plsについて詳しく説明できますか?
シャウShắc13年

@ShâuShắcPAM構成の変更を含む例を追加しました。
デロバート

ありがとう。しかし、Redhat / centosまたはソースのどこにもdb51-utilsが見つかりません。Debianのバリアントでのみ使用できますか?
シャウシュエック2013年

3
crypt(3)glibcの最新バージョンの「古代のハッシュ」は、sha-512をサポートしています。mkpasswd -m sha-512。pam_userdb.soはこれらをうまく処理できます。
アンドリュードマゼク

6

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

特定のユーザー/グループのみがこのカスタムメソッドで認証される必要があるように、まだ設定方法を探しています。他のユーザー/グループは通常のsystem-authメソッドで認証されます。誰かアドバイスをいただけますか?


PAMの完全なアクション構文でこれを実行できるはずです。例えば[user_unknown=ignore,success=ok,default=bad]...しかし、あなたはそれを正しくするためにそれで遊ぶ必要があります(そしてPAMドキュメントを読む)
-derobert

これはpam_succeed_if、ユーザーがグループのリストの1つにいる場合は1つのモジュールをスキップするために使用でき、そうでない場合は2つのモジュールをスキップするために使用できます。
ダニーザウアー

したがって、一般的に次のようなものです。
dannysauer

3

sudoがそのようなセットアップをサポートしているとは思わない。sudoパスワードプロンプトの目的は、sudoコマンドを発行するユーザーがログインしているユーザーと同じであることを確認することであり、それを行う最も簡単な方法は、現在ログインしているユーザーに再認証を求めることです。

つまり、sudoパスワードプロンプトの目的は、権限を確立することではなくアイデンティティを確立することです。確立されたIDとsudo構成に基づいて、問題のユーザーが必要な権限またはアクセス権を持っているかどうかを判断できます。


3
sudoは(rootパスワード、特定のユーザー、またはターゲットユーザーのパスワードを要求する場合を除き)ありませんが、PAMは要求します。また、sudoはPAMを使用します。
デロバート

1

あなたの懸念は、アカウントのパスワードが開示される可能性があることです。解決策は、ログインパスワードを開示できる方法で使用しないことです。sshを使用すると、パスワードはネットワーク上で暗号化されるため、問題ありません。人々は、パスワードの機密性を保護するためではなく、パスワード推測攻撃を防ぐためにsshでパスワード認証をオフにします。同じアカウントパスワードを他のものに使用している場合は、パスワードを提供するために安全で暗号化されたチャネルを使用していることを確認してください。キーロガーなどが心配な場合は、信頼できないマシンを使用してログインしないでください。

誰かがあなたのsshパスワードを手に入れることができれば、おそらく代替のsudoパスワードも手に入れることができるので、セキュリティを高めるためだけに物事を複雑にするだけでなく、接続をより安全にするために時間を費やす方が良いでしょう。


0

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

  • (通常のログインアカウントがであると仮定しますshau。)
  • 2番目のアカウントを作成しますshau2。(と同じUIDを使用するかどうかはわかりませんshau。)
  • shau2NOPASSWDでsudo特権を持つように構成します。
  • エイリアスまたはシェルスクリプトをセットアップしますsu shau2 -c sudo "$@"。これはshau2のパスワードを要求する必要があります。それが正しく 入力されると、(パスワードを要求するべきではない)sudoとして実行されshau2ます。
  • shauのsudo権限を削除します。

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


0

@ShâuShắc答えてくれてありがとう!このソリューションはLinuxMint 17.1 Cinnamon 32bitでも機能しますdb-util実行するためにパッケージのみをインストールしましたdb_load)。

しかし、私は結果のpasswd.dbファイルと非常に混同しています。私はあなたの答えと同じでしてきました(ただし、使用デビッドジョーンズを、彼らはより多くのを見て目を引きます):

# db_load -t hash -T /usr/local/etc/passwd.db
david
jones
^d

ただし、入力された資格情報はプレーンテキストとしてハッシュファイル内に保存されます。

# grep 'jones.*david'  /usr/local/etc/passwd.db
Binary file /usr/local/etc/passwd.db matches

mceditを介してdavidjonesを表示することもできます。

ここに画像の説明を入力してください

はい、の権限を制限することができ/usr/local/etc/passwd.dbます。とにかく、プレーンテキストとして保存されたユーザー名とパスワードは悪いです。


個別のsudoパスワードを使用しても、潜在的なセキュリティホールがいくつかあります(デフォルトでは、ディストリビューションのセットアップ)。したがって、suには個別のパスワードは適用されません(したがってsu、ログインパスワードを使用してrootセッションを開始することは可能です)。また、個別のパスワードはポリシーキットでは考慮されません(synaptic-pkexecログインパスワードを使用してSynapticを起動できます。その後、パッケージを削除します...)。これらの問題は、構成ファイルをさらに調整することで解消できます。

一般に、安全な個別のsudoパスワードは、カスタムPAMモジュール(おそらく、そのようなモジュールはパスワードとファイルから読み取られたSHA-512ハッシュを比較します)またはSELinux機能の助けを借りてのみ達成できるようです。

PS:ごめんなさい、それはコメントでなければなりません。しかし、それはテキスト形式のために答えとして行きます。理解に感謝。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.