web-dev-qa-db-ja.com

sudoの簡単なマルチレベル認証

パスワードベースのSSHが有効になっているFreeBSDサーバーがあります。 Sudoを有効にしたいのですが、潜在的な攻撃者がrootアクセスから1パスワード離れていることを望んでいません。私の現在の解決策は、公開鍵を使用してrootとしてログインすることです(rootに対してリモートパスワード認証が無効になっています)。通常のユーザーはホイールに参加しておらず、Sudoはインストールされていません。

以前は、Sudoアクセスにワンタイムパスワードを使用していました(システムに公開鍵をかけることはできましたが、SudoにはOTPが必要であり、すべてを再認証せずに実際に作業を実行できるように30分のタイムアウトがありました。時間)。ただし、少なくともOPIE/S/Keyの場合、これはかなりの面倒です。ハードウェアトークンがあれば大丈夫かもしれませんが、現時点では持っていません。

エージェント転送を介してSSH公開鍵でSudoに認証できるものを探していました。 pam_ssh FreeBSDに含まれているものは、これを行っていないようです—ユーザーがサーバー上の秘密鍵を復号化できるかどうかを確認することによってのみ認証します。見つけた - pam_ssh_agent_auth ですが、他の場所でそれへの参照はほとんどありません。現在は0.9ですが、実際に使用している証拠があまりないプログラムへのルートへのゲートウェイを信頼することを少しためらっています。

だから、私の質問は基本的に2です:

  1. pam_ssh_agent_auth野生で使用され、信頼できますか?
  2. ログインパスワードを超えた障壁を持ちながらSudoを有効にする別の良い解決策はありますか? Sudoアクセスがあり、パスワード認証がない2番目のアカウントを作成することを考えましたが、これもやや面倒なようです。
5

あなたはすでにOTP(より多くのセキュリティ=より多くのフープ)を介してこれを解決しました、そして私はpam_ssh_agent_authについてコメントすることができません。しかし、あなたの本当の関心事はSudoではなく、ネットワークレベルのアクセスにあるようです。つまり、特定のシステムアカウントではなく、特定の1つまたは複数のホストからユーザーに付与される特権に関心があるようです。その場合は、SSHデーモンの前にポートノッキングスキームを実装して、SSHが特定のIPから、およびシークレットノックを知っている人だけがアクセスできるようにすることを検討してください。その後、既知のホストからの通常の古い公開鍵認証で十分です。攻撃者がその時点でまだシェルアクセスを取得できる場合は、とにかくあなたはおそらく勝っています。

私が考えることができる他の唯一のシナリオは、信頼できないネットワーク上にいるときに接続をバウンスできる信頼できるホストでsshプロキシを使用することです(そして、bsdworldにいるので、刑務所を使用することもできますまさにそれを行うホスト)。私の知る限り、攻撃者がシェルにアクセスできるボックスは完全に危険にさらされています。その後、ルート資格を取得するかどうかは完全に議論の余地があります。あなたの努力は、その最初の成功した侵入を防ぐために最もよく使われるかもしれません。

乾杯、-G

2
evilchili

マイケル、

達成したいことは、次の2つの方法で実行できます。

あなたが見つけたものの1つは、 pam_ssh_agent_auth を使用することです。または、その "poor cousin"を使用することもできます。

SSHキー転送に関連するローカルホストへのssh。ここでのステ​​ップバイステップの説明はUbuntuサーバーを指していますが、すべてのコマンドはFreeBSDで問題ないはずです。 OpenSSH自体の機能。

1。キーをssh-agentに追加します:

user@workstation:~$ ssh-add
Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa)

2。ターゲットサーバーのユーザーアカウントにキーをコピーします

user@workstation:~$ ssh-copy-id destination-server
user@destination-server's password: 
Now try logging into the machine, with "ssh 'destination-server'", and check in:

  ~/.ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

3。キーベースのログインをテストします:

user@workstation:~$ ssh -A destination-server
Welcome to Ubuntu 11.04 (GNU/Linux 2.6.38-10-server x86_64)

 * Documentation:  http://www.ubuntu.com/server/doc

Last login: Mon Aug  8 20:38:48 2011 from 192.168.123.123
user@destination-server:~$ 

4。ここで、SSHキーを/root/.ssh/にコピーします。

user@destination-server:~$ Sudo cp ~/.ssh/authorized_keys /root/.ssh/
[Sudo] password for user:
user@destination-server:~$ Sudo ls -l /root/.ssh/au*
total 4
-rw------- 1 root root 392 2011-08-08 20:44 authorized_keys

5。通常のユーザーライフに戻り、SSH認証ソケットの存在を確認します:

$ echo $SSH_AUTH_SOCK 
/tmp/ssh-bUhwiw3004/agent.3004

6。楽しい時間!注:SSHdがルートアクセスを拒否するように構成されている可能性があることに注意してください。有効にすることを忘れないでください

user@destination-server:~$ ssh root@localhost
Welcome to Ubuntu 11.04 (GNU/Linux 2.6.38-10-server x86_64)

 * Documentation:  http://www.ubuntu.com/server/doc

Last login: Mon Aug  8 21:07:29 2011 from eedev.local
root@destination-server:~# id
uid=0(root) gid=0(root) groups=0(root)

7。パーティーは終わっていません...エイリアスを使用して、少しリラックスしてセットアップを試すことができます:

注:SSHとttyの関係は厄介になる傾向があることに注意してください

user@destination-server:~$ alias sshudo='ssh -4 -t root@localhost'
user@destination-server:~$ sshudo id
uid=0(root) gid=0(root) groups=0(root)
Connection to localhost closed.
user@destination-server:~$ sshudo vi /etc/sudoers

そしてvoilà!

Welcome to Ubuntu 11.04 (GNU/Linux 2.6.38-10-server x86_64)

 * Documentation:  http://www.ubuntu.com/server/doc

~                                                                                                                             
~                                                                                                                             
~                                                                                                                             
~                                                                                                                             
~                                                                                                                             
~                                                                                                                             
~                                                                                                                             
~                                                                                                                             
~                                                                                                                             
~                                                                                                                             
~                                                                                                                             
~                                                                                                                             
~                                                                                                                             
~                                                                                                                             
~                                                                                                                             
~                                                                                                                             
~                                                                                                                             
"/etc/motd" 4 lines, 114 characters

8。行く前に...微調整してください:

user@destination-server:~$ sshudo vi /root/.ssh/authorized_keys

使用しているSSHキーの前にfrom="localhost"を追加します。これにより、そのキーとテストを使用したリモートユーザーアクセスが制限されます。

user@destination-server:~$ sshudo id
user@destination-server:~$ uid=0(root) gid=0(root) groups=0(root)
user@destination-server:~$ Connection to localhost closed.

ログアウトして制限をテストします

user@destination-server:~$ exit
Connection to destination-server closed.

user@workstation:~$ ssh root@destination-server
root@destination-server's password:

お役に立てれば。

4