共有キー.ssh / authorized_keysとsudoを連携させる方法は?


15

.ssh / authorized_keysをセットアップし、pub / privateキーを使用して新しい「ユーザー」でログインできます...「ユーザー」をsudoersリストに追加しました...私はsudoコマンドを実行しようとします。

$ sudo cd /root

入力したパスワードの入力を求められますが、機能しません(設定した秘密キーのパスワードを使用しています)

また、次を使用してユーザーのパスワードを無効にしました

$ passwd -l user

私は何が欠けていますか?

どこかで私の最初の発言が誤解されています...

私は自分のシステムを強化しようとしています...最終的な目標は、単純なパスワード認証ではなく、パブ/秘密鍵を使用してログインすることです。authorized_keysファイルを使用してすべてを設定する方法を見つけました。

さらに、最終的にルートアカウントを介したサーバーログインを防止します。しかし、それを行う前に、2番目のユーザー(常にシステムにログインするユーザー)のためにsudoが必要です。

この2番目のユーザーについては、「passwd -l user ...」を使用してユーザーをロックしない場合、通常のパスワードログインを禁止し、パブ/プライベートキーログインのみを強制します。その後、キーを使用しない場合、通常のパスワードでサーバーに入ります。

しかし、もっと重要なのは、パスワードが無効になっているユーザーとのpub / private keyセットアップでsudoを動作させる必要があることです。


編集: OK、私はそれを持っていると思います(解決策):

1)/ etc / ssh / sshd_configを調整して設定しました。PasswordAuthentication no これにより、sshパスワードによるログインが防止されます(これを行う前に、公開キー/秘密キーが機能していることを確認してください)

2)sudoersリストvisudoを調整し、追加しました

root      ALL=(ALL) ALL
dimas     ALL=(ALL) NOPASSWD: ALL

3)rootはパスワードを持つ唯一のユーザーアカウントです。パスワードが設定されていない2つのユーザーアカウント「dimas」と「sherry」でテストしています(パスワードは空白ですpasswd -d user

上記は基本的に全員がパスワードでシステムにログインすることを防ぎます(公開/秘密鍵を設定する必要があります)。

さらに、sudoersリストのユーザーには管理機能があります。またsu、別のアカウントにもできます。だから、基本的には「ディマス」缶sudo su sherry、しかし「ディマスが行うことはできませんsu sherry。同様に、任意のユーザがsudoersファイルのリストにないわけではありませんsu usersudo su user

上記は機能しますが、セキュリティが低いと見なされます。「dimas」または「sherry」ユーザーとしてコードにアクセスできるスクリプトは、sudoを実行してルートアクセスを取得できます。設定にかかわらずリモートユーザーがログインできるsshのバグ、Firefoxのようなものでのリモートコード実行、またはユーザーがrootとして実行できるようになり不要なコードが実行されることを可能にするその他の欠陥。Sudoには常にパスワードが必要です。そうでない場合は、他のユーザーの代わりにrootとしてログインすることもできます。

回答:


10

sshそしてsudoお互いに何の関係もありません。ssh認証方法の設定は、何もしませんsudo。 パスワードsudoを理解しませんssh

passwd -lユーザーのアカウントをロックし、パスワードで認証できないようにすることを目的としています。これは、ユーザーがパスワードなしで認証できるようにするという、あなたが望むもののほとんど反対です。

あなたが欲しいのはあなたのファイルのNOPASSWDオプションだと思いますsudoers

(PS、親プロセスに伝播しない。で cdコマンドを実行する理由はないので、終了するとすぐに、元の場所に戻ります。)sudocdsudo

編集: アカウントパスワードをロックし、sudoに公開/秘密キーを理解させたいと言い続けます。申し訳ありませんが、sudoはsshキーを使用しません。sshではありません。ユーザーが自分のパスワードでログインできるようにしたくない場合、その答えはアカウントをロックするのではなく、sshパスワード認証無効にすることだと思います。その後、ユーザーのパスワードを保持し、ssh authorized_keysを介してログインした後にsudoに使用できます。


わかりましたが、ユーザーがpasswd -l user ...を介してパスワードを持っていないという事実は、sudoコマンドが機能しない原因になりますか?
ファリンスペース

@farinspaceはい、質問をよりよく理解し、発言を大幅に拡大しました。 passwd -lアカウントがロックされているという意味でパスワードを削除します。つまり、パスワードは機能しません。sudoでパスワード認証をオフにします。
cone落者

このロジックはどのように:sudoersファイルのパスワードをオフにすることは、システムがpub / private key loginsによって強化されるので、まだ安全です...また、管理者のみがsudoersリストにユーザーを追加できます
farinspace

秘密キーを使用する場合、通常はパスワードを設定するか、単に設定せずにサーバーログイン時にパスワードエントリをバイパスするだけの安全性があります
-farinspace

4
@coneslayerこの返信は100%正確ではありません。以下に示すように、sudoはssh認証を尊重するように構成できます。
アンドレデミランダ

18

やりたいことは可能ですが、pam-ssh-agent-authと呼ばれるPAMモジュールをコンパイルする必要があるため、ある程度の経験が必要です。

プロセスはかなり簡単です:

$ sudo aptitude install libssl-dev libpam0g-dev build-essential checkinstall
$ wget "http://downloads.sourceforge.net/project/pamsshagentauth/pam_ssh_agent_auth/v0.9.3/pam_ssh_agent_auth-0.9.3.tar.bz2"
$ tar -xjvf pam_ssh_agent_auth-0.9.3.tar.bz2
$ cd pam_ssh_agent_auth-0.9.3

$ ./configure --libexecdir=/lib/security --with-mantype=man

$ make
$ sudo checkinstall

sudo設定を編集します。

$ sudo visudo

以下を追加します。

Defaults env_keep += SSH_AUTH_SOCK

sudo PAM設定を変更して続行します。

$ sudo vi /etc/pam.d/sudo

追加(@include行のすぐ上):

**auth [success=2 default=ignore] pam_ssh_agent_auth.so file=~/.ssh/authorized_keys**
@include common-auth
@include common-account


4
これは受け入れられる答えである必要があります
クリストファーモンサント

1
これらの手順(特に/etc/pam.d/sudo手順)は、現在のUbuntuバージョンでは古くなっています。私は答えに更新された指示を提供しました。
クリスピック

4

アンドレ・デ・ミランダの答えはpam_ssh_agent_authを使用した優れたソリューションを提供しますが、一部は古くなっています。特に、/etc/pam.d/sudo現在の多くのLinuxバージョンを使用する場合の手順。

Ubuntu 12.04を正確に実行している場合、実際には、ppa:ppa:cpick / pam-ssh-agent-authからpam_ssh_agent_authビルドを提供することでプロセスを簡素化しました。

以下を実行してパッケージをインストールできます。

sudo add-apt-repository ppa:cpick/pam-ssh-agent-auth
sudo apt-get install pam-ssh-agent-auth

インストール後、このPAMモジュールをsudoで使用する場合は、sudoの設定とPAM構成を構成する必要があります。Ubuntu12.04では、次の2つのファイルを作成することで正確に構成できます。

/etc/sudoers.d/pam-ssh-agent-auth:

Defaults    env_keep+="SSH_AUTH_SOCK"

/etc/pam.d/sudo:

ent#%PAM-1.0

auth       required   pam_env.so readenv=1 user_readenv=0
auth       required   pam_env.so readenv=1 envfile=/etc/default/locale user_readenv=0
auth       sufficient pam_ssh_agent_auth.so file=/etc/security/authorized_keys
@include common-auth
@include common-account
@include common-session-noninteractive

chefを使用している場合、上記のプロセスは、次の2つの場所のいずれかにある私のクックブックで自動化できます
。https : //github.com/cpick/pam-ssh-agent-auth
http://community.opscode .COM /料理/ PAM-のssh-agent-AUTH

クックブックのfilesディレクトリには、Ubuntu 12.04で正確に動作する上記のファイル/etc/pam.d/sudo/etc/sudoers.d/pam-ssh-agent-authファイルが含まれており、他のバージョン/ distrosを使用する際に役立つ開始点になります。


-1

パスワードの入力をバイパスする唯一の方法は、sudoersファイルでパスワードを無効にすることです。

このようなものは、パスワードなしrootwheel フルアクセスのすべてのメンバーを与えます:

root    ALL=(ALL)   NOPASSWD: ALL
%wheel  ALL=(ALL)   NOPASSWD: ALL

ただし、これは絶対にお勧めしません。このサーバーで実行する特定のコマンドがある場合は、そのコマンドのみへのアクセスを許可します。あるいは、セキュリティホールを開ける必要のない、やりたいことを実現する別の方法を見つけてください。


パスワードを使用しても構いません。passwd-l userでユーザーパスワードを無効にした後のようです。pub/ privateキーを使用してシステムにログインできます(プライベートキーには安全なパスワードがあります) 、私はsudoを行うときにパスワードを要求しますが、これは秘密鍵からのパスワードではないようです、IVEがユーザーに対して無効にした場合、このパスワードはどこに設定されますか(私はむしろシステム上でパスワードを維持することを避けたいと思います秘密キーで)
ファリンスペース

「IVEがユーザーに対して無効にした場合、このパスワードはどこに設定されますか?」どこにもありません。アカウントをロックしているため、入力できるパスワードは機能しません。
cone落者

リモートシステムでアカウントを再度有効にし、パスワードを設定する必要があります。どちらの場合でも、両方のマシンでパスワードを確実に維持する必要があります。障害の場合にローカルログイン以外の理由がない場合。
ジャックM.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.