いくつかのubuntu
ボックスをセットアップし、構成ツールとしてopscodeのchef
を使用しています。これらの各サーバーに各ユーザーの公開鍵をインストールし、パスワード認証を無効にするのはかなり簡単です。
ただし、ユーザーにはSudo
権限も必要ですが、デフォルトではパスワードが必要です。
ユーザーの公開鍵をアクセス管理の方法として使用し、ユーザーにSudo
特権を許可したい場合、つまり、visduo
で_NOPASSWD: ALL
_または公開鍵認証しか持っていない場合に、ユーザーが自分のパスワードを変更できる方法は?
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/sudoers
(visudo
経由)。
これで、すべてのユーザーが(転送またはローカル)SSHエージェントまたはのパスワードを使用してSudo
に対して認証できます。 Sudo
を呼び出すたびに少なくとも確認が必要になるように、ssh-add -c
を使用するようユーザーに依頼するのが賢明な場合があります。
はい、それは信じられないほど安全ではなく、ユーザーが他のユーザーのパスワードにアクセスすることもできますが、彼らはSudoを持っているので、あなたができることはあまりありません。
基本的に、次のことを行います。
$ Sudo -i
今、私たちは根です。すべてにアクセスできます。
# passwd $username
$ usernameは、誰のユーザー名でもかまいません。
新しいUNIXパスワードを入力してください:
新しいUNIXパスワードを再入力してください:passwd:パスワードが正常に更新されました
ブーム、パスワードが変更されました。繰り返しますが、誰でも変更できるので信じられないほど安全ではありませんが、うまくいきますが、うまくいきます。私はそれをお勧めしませんが、むしろnotが何をするかの例としてこの回答を提供します。
#% 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)からの通信はありません実際のユーザーには必須です。
パスワードのポイントは、ユーザーのキーを取得したり、無人の端末を見つけたりしたハッカーがrootアクセスを取得できないようにすることです。このため、パスワードなしのSudoを使用するソリューションはお勧めしません。
シンプルに保つことをお勧めします。おそらく、できるだけ早く変更するための厳密な指示を含むデフォルトのパスワードをユーザーにメールで送信するか、スクリプトを.profile
または.login
または何か新しいパスワードを要求するようなものに挿入します彼らの最初のログイン。完了すると自動的に無効になる可能性があり、expect
を使用して既存のパスワードを入力できるため、ユーザーはそれを知る必要がありません。