Зашифровать или взломать пароль - PullRequest
4 голосов
/ 21 декабря 2011

У меня ситуация не очень общительная или не очень удобная для кого-то.Мне нужно хранить некоторые пароли в базе данных.Позвольте мне объяснить, что мне действительно нужно.

У меня есть несколько серверов, к которым мне нужно обращаться 3 раза в день, каждый день, в течение всего года, это своего рода круглосуточная служба, служба SSH работаетв каждом из них, а также у меня есть программное обеспечение, которое запрашивает доступ к каждому серверу 3 раза в день.Ну, все работает просто отлично, как я хочу, проблема в том, ПАРОЛИ!Как управлять всеми паролями!

Сегодня у меня в скрипте есть пароли всех серверов (тот же скрипт, который фактически запускает службы SSH), так как я использую PHP-функции SSH2 ssh2_auth_password() для аутентификации на серверах,но это простой текст.

как насчет этой функции ssh2_ auth_ pubkey_ file()?Как мне это использовать?

Безопасно ли хранить пароль в моих собственных скриптах?Я так не думаю ..

Тогда что делать в этом случае?Если я сохраню пароль в базе данных, мне нужно будет получать пароль при каждом запросе к серверу (он выполняется cron), затем, если это хеш, я могу сравнить его с другим хешем в моем скрипте и вернуть простой текст для моегофункция аутентификации, все еще простой текст .. (но я думаю, что это еще не очень хорошее решение!).

EnCrypt пароли, а затем DeCrypt пароли каждый запрос сервера ??возможно, возможно ..

Кто-нибудь знает, что лучше всего делать в этой ситуации?

Я в бассейне!

Заранее спасибо за любой свет!

[EDITED]

My Arch - это ядро ​​Linux 2.6, большинство из них, SaaS-приложения, работающие на внешнем (нейтральном сервере), и CronJobs регулярно работают 3 раза /день все автоматически в командной строке, без участия человека.

[EDITED ONCE MORE]

Где мне создать пару ключей?Достаточно ли одной пары ключей для всех моих серверов, включая сервер SaaS APP?или мне нужно генерировать по одному?Немного смущен ..

                CRON JOBS (fire servers) 3x/day
              ------------
              | SaaS APP |________________________
      ________------------_______                |
     |             |             |               |
     |             |             |               |
-----------   -----------   -----------          |
| SERVER1 |   | SERVER2 |   | SERVER3 |  ....  SERVER4 ....
-----------   -----------   -----------

Еще раз спасибо!

Ответы [ 3 ]

4 голосов
/ 21 декабря 2011

Если вы осуществляете внутрисерверное общение через ssh, то обязательно используйте публичные клавиши.Если вы просто используете аутентификацию на основе пароля, пароль может быть получен, если целевой сервер взломан или взломан SSL-тюнер.Проблема в том, что вы должны каждый раз давать пароль (ну, вы можете использовать пароли без пароля, но лучше нет).Чтобы преодолеть эту трудность, вы можете использовать открытые ключи и ssh-агент, который хранит ваши пароли авторизации, поэтому вам нужно вводить эти пароли только один раз за перезагрузку.

Учебник по аутентификации Pubkey для debian

1 голос
/ 21 декабря 2011

Вы на правильном пути с ssh2_auth_pubkey_file().

  1. . Сгенерируйте публичную / приватную пару ключей с помощью ssh-keygen.
  2. Добавьте общедоступнуювведите ~/.ssh/authorized_keys на каждом сервере.
  3. Скопируйте открытый и закрытый ключи на свои клиентские машины и сделайте их доступными для чтения только для тех учетных записей, которым они необходимы.
  4. Измените свой код аутентификации в клиенте на что-то вроде этого:

    $ssh_conn = ssh2_connect('my.server.addr', 22, array('hostkey'=>'ssh-rsa'));
    if (ssh2_auth_pubkey_file(
       $ssh_conn,
       'sshuser',
       '/path/to/id_rsa.pub',
       '/path/to/id_rsa',
       'key_passphrase'
    )) {
       echo "Success";
    } else {
       echo "Failure";
    }
    
1 голос
/ 21 декабря 2011

Вы можете сохранить свой пароль в зашифрованном виде в базе данных / файле, используя mcrypt_encrypt функцию PHP, и перед каждым подключением автоматически расшифровывает этот пароль.Конечно, вам нужен другой пароль для шифрования ваших паролей SSH, этот может быть сохранен в другом файле или, как упоминалось ранее, запрашивать этот пароль после каждой перезагрузки и сохранять его только в памяти.

Пример:

<?php
$output = mcrypt_encrypt(MCRYPT_TWOFISH, $key, $plaintextPassword, MCRYPT_MODE_ECB);
//encode to base64 for easier manipulation
$stored = base64_encode($output);
...
$b64encoded = base64_decode($encryptedPassword);
mcrypt_decrypt(MCRYPT_TWOFISH, $key, $b64encoded, MCRYPT_MODE_ECB)
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...