2011-11-30 6 views
2

암호로 보호 된 데이터베이스에 연결하기위한 셸 스크립트를 작성했습니다. 두 사람은 동일한 쉘 스크립트를 사용하여 데이터베이스 액세스를 공유하려고하지만 사용중인 비밀번호를 공개하고 싶지 않습니다. 스크립트를 잠그고 아무도 그것을 읽고 실행할 수 없도록하는 방법이 있습니까? 또한 스크립트를 실행하기 위해 sudo 암호를 입력하는 것이 이상적입니다.셸 스크립트 만 실행하려는 경우

답변

6

아무도 그것을 읽을 수 있도록 스크립트를 고정 할 수있는 방법이 있나요 (그리고 파이썬 프로그래머는 펄이 읽을 수없는 말을 왜? 궁금) 만 그것을 실행? 또한 스크립트를 실행하기 위해 sudo 비밀번호 을 입력하는 것이 가장 좋습니다.

확실히. 자격 증명이 포함 된 스크립트가 /usr/local/bin/myscript이라고 가정 해 보겠습니다. 이 파일을 권한있는 사용자가 소유하게하십시오. 의 우리가 "자격 증명"라는 이름의 사용자가 있다고 가정 해 봅시다 :

# chown credentials /usr/local/bin/myscript 
# chmod 700 /usr/local/bin/myscript 

지금 만 credentials 사용자가 읽고이 스크립트를 실행할 수 있습니다. 적절한 /etc/sudoers 항목

#!/bin/sh 
exec sudo -u credentials /usr/local/bin/myscript 

그리고 만들 : 그래서 지금

auser ALL=(credentials) /usr/local/bin/myscript 

, 사용자 auser 실행 "mywrapper을"

은 다음과 같습니다 다른 스크립트 /usr/local/bin/mywrapper을 만듭니다. 차례로 sudo을 사용하여 실제 스크립트를 호출하면 auser의 비밀번호가 표시됩니다.

나는 이것이 당신이 원하는 모든 것을한다고 생각합니다. 우리는 자격 증명 (우리의 경우에는 ssh 개인 키)을 보호하기 위해 사무실에서 이와 비슷한 메커니즘을 사용합니다.

0

쉘 스크립트를 실행하려면 해당 스크립트를 읽을 수 있어야합니다. 다음과 같은 몇 가지 작업을 수행 할 수 있습니다.

  • 누가이 데이터베이스를 관리합니까? 사용자가 읽기 전용 액세스를 위해 자신의 암호를 얻을 수 있습니까? 이는 데이터베이스의 작은 하위 집합에 대한 액세스를 제한 할 수 있기 때문에 이상적입니다.
  • 이 스크립트를 실행하기 위해 sudo 액세스 권한이 있어야한다면 파일에서 600 개의 권한이 설정된 파일로 비밀번호를 제거 할 수 있습니다. 문제는 이것이 유출 될 수 있다는 것입니다. 예를 들어 set -xv으로 스크립트를 실행하면 어떻게됩니까? 그런 다음 스크립트가 실행될 때 암호를 볼 수 있습니다.
  • 데이터베이스 외부에서 관심있는 데이터의 하위 집합을 만들 수 있습니까? 그런 다음 스크립트에 액세스하도록하십시오.

또는 읽기 전용 모듈을 Perl로 살펴볼 수 있습니다. 나는 Acme::EyeDrops 또는 Acme::Bleach과 같은 것으로 Perl 스크립트에서보기 흉한 문자와 숫자를 모두 제거합니다.