2011-12-21 5 views
4

나는 아주 평범하지도 않고 아주 어리석은 사람입니다. 데이터베이스에 일부 암호를 저장해야합니다. 제가 정말로 필요한 것을 설명해 드리겠습니다.암호를 암호화하거나 암호를 해싱합니다.

하루에 세 번씩 매일 액세스해야하는 서버가 있으며 일종의 논스톱 서비스이며 SSH 서비스가 각 서버에서 실행되고 있으며 하루에 3 번씩 각 서버에 대한 액세스를 요청하는 소프트웨어. 글쎄, 내가 원하는만큼 잘 작동합니다. 문제는, 암호입니다! 모든 암호를 관리하는 방법!

오늘 나는 서버에 인증하기 위해 SSH2 PHP 함수 ssh2_auth_password()을 사용하고 있기 때문에 스크립트 (실제로는 SSH 서비스를 실행하는 동일한 스크립트)에 모든 서버 암호를 가지고 있지만 일반 텍스트입니다.

이 기능에 대해 ssh2_ auth_ pubkey_ file()? 어떻게 사용해야합니까?

내 개인 스크립트에 비밀번호를 저장하는 것이 안전할까요? 나는 그렇게 생각하지 않는다 ..

그 다음 무엇을해야 하느냐? 데이터베이스에 암호를 저장하면 각 서버 요청 (cron이 실행 중임)에서 암호를 검색해야합니다. 그러면 해시 인 경우 스크립트의 다른 해시와 비교하여 내 텍스트에 대한 일반 텍스트를 반환 할 수 있습니다. 함수는 여전히 평범한 텍스트를 인증합니다. (그러나 나는 아직 좋은 해결책이 아니라고 생각합니다!).

암호를 암호화 한 다음 모든 서버 요청에서 암호를 해지 하시겠습니까 ?? 아마도 가능할 것입니다.

누군가이 상황에서 최선의 방법을 알고 있습니까?

나는 수영장에있어!

미리 감사드립니다.

[EDITED가]

내 아치 그들 중 대부분은, SaaS는 응용 프로그램 외장 (중립 서버)에서 실행 CronJobs 3 회를 실행 regurlary 있습니다 2.6 커널 리눅스 인/일의 모든 명령 라인으로 자동이다 인간과의 상호 작용은 없습니다.

는 [ONCE 편집을 할 MORE] 나는 키 쌍 ​​(들)을 생성해야

? 모든 서버에 SaaS APP 서버가 포함되어 있어도 하나의 키 쌍만 있습니까? 또는 하나씩 생성해야합니까? 조금 혼동 ..

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

Thanks Again!

+7

"나는 수영장에있어!" 나는 그것을 읽었고 즉시 올드 스파이스 가이가 질문을하는 모습을 그렸습니다. –

+4

암호를 사용하지 마십시오. 공개/개인 키 인증을 사용하십시오. – ceejayoz

+1

스크립트가 외부에서 액세스 할 수없는 경우 (그리고 wwwroot가 아니어야하며 wwwroot 아래에 있으면 안 됨) 비밀번호가 "안전합니다". 물론 당신은 아무도 당신의 웹 서버에 대해 더 높은 권한을 얻을 수 없다는 것을 확신해야합니다. (그러나 그것은 모두 동일하게 이루어져야합니다.) – Viruzzo

답변

1

당신은 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"; 
    } 
    
+0

이것이 방법이라고 생각하지만 관리자가 서버 비밀번호를 빈번하게 변경하면 어떻게됩니까? 열쇠 쌍을 다시 생성해야합니까? 감사합니다. – B4NZ41

+0

이 방법을 사용하면 서버의 암호가 적합하지 않습니다. 클라이언트는 개인 키를 사용하여 자신이 말하는 사람임을 서버에 증명합니다. 이것은 인증 프로세스에서 암호 대신 사용됩니다. 관리자가 5 초마다 서버 암호를 변경할 수 있으며 여전히 작동합니다. –

+0

와우 대단해! 그것이 내가 듣기를 원하는 대답입니다. 이것은 확실히 방법입니다. 나는 그것을 지금 시도 할 것이다. 다시 한번 감사드립니다. – B4NZ41

4

ssh를 통해 서버 내부 통신을 수행하는 경우 확실히 공개 키를 사용하십시오. 단순히 암호 기반 인증을 사용하는 경우 대상 서버가 손상되거나 SSL 튜너에 금이 가면 암호를 해독 할 수 있습니다. 문제는 매번 암호를 지정해야한다는 것입니다 (음, 암호없는 pubkeys를 사용할 수 있지만 더 좋지는 않음). 이러한 어려움을 극복하기 위해 공개 키와 인증 암호를 저장하는 ssh 에이전트를 사용할 수 있으므로 재부팅 할 때마다 한 번만 입력하면됩니다.

Pubkey auth tutorial for debian

+0

어? 공개 키만 사용할 수 있다면 왜 세계에서는 그렇지 않을까요? 혼합 된 접근 방식보다 안전합니다. – Kzqai

1

당신은 당신의 암호가 자동으로이 암호를 해독하여 연결 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) 
?> 
+0

저는 현재 교차로의 한가운데에 있습니다. 한 쪽에서는 서버 암호를 자주 변경해야 할 가능성이 있으며, 암호가 실제로 자주 변경되는 경우에는 다른 쪽에서 암호를 EnCrypt로 설정하는 것이 가장 좋습니다. 당신이 당신의 대답에서 가정하는 것처럼 데이터베이스에 그것을 저장하십시오. 감사! – B4NZ41

관련 문제