web-dev-qa-db-ja.com

Linuxユーザーは、現在のパスワードを知らなくてもパスワードを変更できますか?

いくつかのubuntuボックスをセットアップし、構成ツールとしてopscodeのchefを使用しています。これらの各サーバーに各ユーザーの公開鍵をインストールし、パスワード認証を無効にするのはかなり簡単です。

ただし、ユーザーにはSudo権限も必要ですが、デフォルトではパスワードが必要です。

ユーザーの公開鍵をアクセス管理の方法として使用し、ユーザーにSudo特権を許可したい場合、つまり、visduoで_NOPASSWD: ALL_または公開鍵認証しか持っていない場合に、ユーザーが自分のパスワードを変更できる方法は?

26
cwd

Sudoは、最も一般的な構成では、ユーザーにパスワードの入力を要求します。通常、ユーザーは既に自分のパスワードを使用してアカウントへの認証を行っており、パスワードをもう一度入力すると、正当なユーザーがコンソールを放棄して乗っ取られていないことを確認できます。

セットアップでは、ユーザーのパスワードはSudoへの認証にのみ使用されます。特に、ユーザーのSSHキーが危険にさらされている場合、攻撃者はサーバーのルート権限に昇格することができません。攻撃者はアカウントにキーロガーを仕掛けることができますが、このキーロガーは他のユーザーによって検出され、自動的に監視される可能性さえあります。

ユーザーは通常、別のパスワードに変更するために、現在のパスワードを知っている必要があります。 passwdプログラムはこれを確認します(構成しないこともできますが、これはシナリオでは役に立たないか、まったく望ましくありません)。ただし、rootは古いパスワードを知らなくてもユーザーのパスワードを変更できます。したがって、Sudo権限を持つユーザーは、Sudo passwd $USERを実行することにより、passwdプロンプトで入力することなく自分のパスワードを変更できます。 Sudoがユーザーのパスワードを要求するように設定されている場合、ユーザーはとにかくSudoへのパスワードを入力している必要があります。

パスワード認証を選択的に無効にすることができます。あなたの状況では、sshや他のサービスでパスワード認証を無効にするでしょう。ほとんどの最新のunice(Ubuntuを含む)のほとんどのサービスは [〜#〜] pam [〜#〜] を使用して認証方法を構成します。 Ubuntuでは、PAM構成ファイルは/etc/pam.dにあります。パスワード認証を無効にするには、auth … pam_unix.so/etc/pam.d/common-auth行をコメント化します。さらに、PasswordAuthentication no/etc/ssh/sshd_configがあることを確認して、sshdの組み込みパスワード認証を無効にします。

一部の管理ユーザーがパスワードでログインできるようにするか、コンソールでパスワード認証を許可することができます。これはPAMで可能です(かなり柔軟性があります)が、頭から離れる方法を説明することはできませんでした。ヘルプが必要な場合は、別の質問をしてください。

pam_ssh_agent_auth モジュールを使用できます。コンパイルは非常に簡単で、エントリを追加するだけです

auth       sufficient pam_ssh_agent_auth.so file=~/.ssh/authorized_keys

before/etc/pam.d/Sudoの他のauth(またはinclude)エントリ

そして

Defaults    env_keep += "SSH_AUTH_SOCK"

/etc/sudoersvisudo経由)。

これで、すべてのユーザーが(転送またはローカル)SSHエージェントまたはのパスワードを使用してSudoに対して認証できます。 Sudoを呼び出すたびに少なくとも確認が必要になるように、ssh-add -cを使用するようユーザーに依頼するのが賢明な場合があります。

8
Tobias Kienzler

はい、それは信じられないほど安全ではなく、ユーザーが他のユーザーのパスワードにアクセスすることもできますが、彼らはSudoを持っているので、あなたができることはあまりありません。

基本的に、次のことを行います。

$ Sudo -i

今、私たちは根です。すべてにアクセスできます。

# passwd $username

$ usernameは、誰のユーザー名でもかまいません。

新しいUNIXパスワードを入力してください:

新しいUNIXパスワードを再入力してください:passwd:パスワードが正常に更新されました

ブーム、パスワードが変更されました。繰り返しますが、誰でも変更できるので信じられないほど安全ではありませんが、うまくいきますが、うまくいきます。私はそれをお勧めしませんが、むしろnotが何をするかの例としてこの回答を提供します。

1
jrg
#% useradd -g somegroup someuser
#% usermod -p "" someuser
#% chage -d 0 someuser
#% sed -i "s/^.*PasswordAuthentication .*/PasswordAuthentication no/" /etc/sshd/sshd_config
#% /sbin/service sshd restart
#% cp -r ~/.ssh `echo ~someuser`
#% chown -R someuser `echo ~someuser`/.ssh
#% chgrp -R somegroup `echo ~someuser`/.ssh
#% echo "%somegroup  ALL=(ALL)   ALL" >> /etc/sudoers

>これにより、公開鍵のみを使用してログインでき、ログインにパスワードを使用できないユーザーを作成できます。しかし、彼は初めてログインするときにパスワードを変更するように強制されます...しかし、前もっていくつかのダミーパスワードを教える必要はありません...ただし、そのパスワードを使用してログイン(ssh)することはできません。ここでの秘訣は、パスワードの変更が必要になったときにログイン時に入力する必要があるダミーのパスワードをユーザーに知らせないことです...ナットシェルでは、admin(root)からの通信はありません実際のユーザーには必須です。

0
hardeep

パスワードのポイントは、ユーザーのキーを取得したり、無人の端末を見つけたりしたハッカーがrootアクセスを取得できないようにすることです。このため、パスワードなしのSudoを使用するソリューションはお勧めしません。

シンプルに保つことをお勧めします。おそらく、できるだけ早く変更するための厳密な指示を含むデフォルトのパスワードをユーザーにメールで送信するか、スクリプトを.profileまたは.loginまたは何か新しいパスワードを要求するようなものに挿入します彼らの最初のログイン。完了すると自動的に無効になる可能性があり、expectを使用して既存のパスワードを入力できるため、ユーザーはそれを知る必要がありません。

0
ams