2012-03-22 1 views
7

프로그램을 실행하기 위해 암호를 작성해야하는 bash 스크립트가 있습니다. 다른 사람들이 그것을 볼 수 있습니다. 비밀 번호를 너무 분명한 방법으로 쓰는 방법이 있습니까? 그가 bash에서 동일한 명령을 수행하고 암호를 얻을 수 있다고해도 텍스트로 읽을 수는 없습니다.bash에서 저장된 암호 난독 화

오늘은 이렇게 :

PASSWORD="1234567" 
program --pass=$PASSWORD 

나는이

PASSWORD="10101001001010010101010100101" #binary or other code 
NEW_PASS=`decrypt $PASSWORD` 
program --pass=$NEW_PASS 

어떤 생각을하고 싶지?

답변

6

당신이 원하는 것은 악의가 아니라 단지 은 작동하지 않습니다..

모든 사용자는 암호가 bash -x your_script를 실행하는 것입니다 참조 할 가지고 있으며, 출력은 상관없이 난처되었을 수 있습니다 얼마나 효과적

+program '--pass=decrypted-password-here' 

을 ... 포함됩니다.

암호를 입력해야하는 실제 프로그램은 무엇입니까? 래퍼가 암호 파일을 실행할 수있는 사용자라도 암호 파일을 읽을 수 있도록 암호를 setuid 래퍼 뒤에 숨길 수 있습니까? DigitalRoss의 제안을 빌려서 저장된 비밀번호 (또는 인증서 또는 키 쌍)의 복사본이있는 사용자 계정을 설정하고 스크립트를 실행할 수 있도록 설정하고 SSH를 통해 다른 것을 설정할 수 있습니까? 해당 사용자로 SSH에 대한 스크립트 권한을 실행할 수 있어야하는 사용자 (또는 단일 명령에 대해서만 해당 사용자에게 sudo 등)? 한마디로

: 실제 보안이 아닌 난처을 목표. 이제


, 당신은 이 난처 할 않은 경우 - 전통적인 접근 방식은 ROT-16 :

obfuscated_password="qrpelcgrq-cnffjbeq-urer" 
real_password="$(tr a-zA-Z n-za-mN-ZA-M <<<"$obfuscated_password")" 

...하지만 당신이 실제로 전혀 신경 암호 인 경우,하지 난독 화 (obfuscate) - 암호를 사용자가 읽을 수있는 방식으로 저장하는 것을 피하기 위해 위에 제시된 방법 중 하나를 사용하십시오.

+0

이 프로그램은 cURL – Rodrigo

+1

@Rodrigo ...이고 컬은 클라이언트 인증서를 사용할 수 있습니다 (인증하려는 웹 서버가 구성되어있는 경우). setuid 래퍼와 같은 것을 사용하여 권한을 상승시켜야하지만 curl을 호출하는 프로그램을 실행할 수있는 사용자가 SSL 키를 읽지 못하도록하기 위해) 암호 매개 변수를 추가하는 setuid 래퍼 (wrapper) 뒤에 호출 할 수 있으며, 그렇지 않으면 여기에있는 모든 접근법을 사용할 수 있습니다. –

3

A "너무 어려운 일이 아니다"방법은 ROT13을 사용하는 것입니다

PASSWORD=cnffjbeq 
REAL_PASSWORD=`echo $PASSWORD | rot13` 

당신은 단지뿐만 아니라 tr a-z n-za-m 작품을 사용하여 rot13 프로그램이없는 경우.

은 보안이 전혀 없음을 제공합니다. 그러나 "캐주얼 시청"목적으로는 충분할 수 있습니다.

5

유닉스 시스템에서 자주 설치되는 (패키지를 통해 항상 쉽게 사용 가능) uuencode and uudecode,을 사용할 수 있습니다. 인코딩이 무의미하기 때문에 관찰자가 비밀번호를 쉽게 기억하는 것을 막을 수 있습니다. 즉, 잘 선택된 임의의 일반 텍스트 비밀번호는 보안에 대한 허위의 착각없이 동일한 목적을 달성합니다.

자동화 구성 관리가 점점 더 필요해지면서 요즘 정확한 문제는 everyone in DevOps에 직면합니다.

는 여기에 몇 가지 더 나은 솔루션입니다 :

  • 는 스크립트가 실행되는 시스템에서 비밀 파일이 있습니다. 스크립트는 런타임에 파일의 비밀을 읽을 수 있습니다. 이렇게하면 암호를 브로드 캐스트하지 않고 소스 코드 제어로 스크립트를 확인할 수 있으며 사용자 권한을 사용하여 암호 파일을 보호 할 수 있습니다. 암호를 전파하지 않고 스크립트를 재사용 할 수 있습니다. 무 암호 SSH 공개 키 인증

  • 사용은 원격 시스템

  • 사용 역할 제한 사용자와 위의 접근 방법의 조합을 얻을 수 있습니다. 나는 대개 스크립트가 원하는 것을 제외하고는 아무 것도 할 수없는 대상 시스템에 사용자를 만듭니다. 최신 버전의 ssh는 들어오는 명령 (sshd_config의 forcecommand 또는 something like ssh-forcecommand 참조)을 무시하고 항상 특정 작업을 수행 할 수 있으므로이 기능을 지원합니다.

  • 은 서버 서명 인증서를 통해 관리 에이전트 클라이언트를 인증합니다. PuppetChef과 같은 실제 구성 관리 시스템이이를 수행합니다.

  • 웹 페이지에 연결하는 경우 역할 제한 사용자 또는 최소 한도의 사용자를 만들 수 있습니다. 아마도 한 번 손으로 로그인하여 지속적인 세션을 설정할 수 있습니다. Curl은 쿠키를 사용하고 이러한 접근 방식에 협조 할 수 있습니다.

+3

+1은 역할 제한 사용자 접근 방식을 제안합니다. 로그인 할 때 저장된 자격 증명으로 컬을 실행하고 (이 사용자로 호출 할 수 있도록 RSA 키와 같은 것을 사용하는) 사용자 계정을 만듭니다. 스크립트의 권한을보다 직접적으로 에스컬레이션하기 위해 setuid 래퍼를 빌드 할 필요가없는이 문제에 대한 훌륭한 솔루션입니다. –

2

키를 도어 매트 아래에 두는 것은 안전하지 않습니다. 그러나 '프로그램'이 통과해야한다는 사실은 ..... 'ps -ef'를하는 사람이 누구나 볼 수 있음을 의미합니다. 'program'에 파이프에서 암호를 읽을 수있는 형식이 있으면 대신 사용해야합니다. 예 : program --pass = - ... < /home/me/.something 파일을 읽을 수 있도록 설정하십시오.