스크립트에서 사용하는 비밀번호를 저장하는 가장 안전하지 않은 방법은 무엇입니까?


13

내 사용자 이름과 비밀번호를 사용하여 서비스로 자동 인증하는 Bash 스크립트가 있습니다. 자격 증명은 현재 스크립트 내에 일반 텍스트로 저장됩니다.

스크립트 액세스를 허용하면서 이러한 자격 증명을 가장 안전하게 저장하려면 어떤 예방책을 취해야합니까?

설명의 요점 :

  • 가능한 경우 다른 인증 방법을 대신 사용해야한다는 것을 이해합니다. 암호 인증이 유일한 옵션 인 경우 여전히해야 할 일을 알고 싶습니다.
  • 비밀번호를 전혀 저장하지 않으면 여기에 적합한 답변이 아닙니다. 스크립트가 암호에 무인으로 액세스 해야하는 경우에 대해 묻고 있습니다.

2
자격 증명의 암호 부분을 저장하지 마십시오.
토마스 워드

그놈 키링 또는 이와 유사한 기능에 액세스 할 수 없습니까?
Firefeather

아마도 SHA-1과 같은 암호화 해시로 저장할 수 있다면 좋을 것입니다.
Anonymous

ROT13은 그것을 모호하게 만들지 만 어떤 식 으로든 보안을 유지하지는 않습니다.
Anonymous

@Anonymous 암호가 암호화 해시로 저장된 경우 어떻게 검색하는 것이 좋습니까?
ændrük

답변:


8

어떤 종류의 서비스입니까? 특정 서비스에는 SSH 에이전트와 함께 SSH 용 SSH 키와 같은 다른 인증 방법이 있습니다.

스크립트와 별도로 비밀번호를 저장하고 모든 경로 구성 요소에 올바른 권한이 설정되어 있는지 확인하십시오. 예를 들면, 경로에 있는지 확인하십시오 /path/to/file, /, /path그리고 /path/to당신이 (신뢰하는 사용자가 소유 root) 및 이러한 파일을 볼 수 없습니다 사람에 쓰기 가능 권한이 없습니다 것을. 마지막으로 권장되는 권한 file은 600 또는 400입니다.

file다음과 같이 수 :

PASSWORD='something that you cannot remember'

스크립트에서 아래 코드를 사용하여 변수를 가져 오십시오.

. /path/to/file

스크립트의 경우 공격자가 스크립트 컨텍스트에서 코드를 실행할 수있는 구멍이 없는지 확인하십시오 (예 : 임의의 $PATH변수가 설정되어 있거나 다른 파일을 잘못 사용할 수있는 제어되지 않는 환경 (예 : 세계 쓰기 가능 파일 소싱)) .

암호의 실제 보호에 관해서는 할 수 없습니다. 다른 서비스에서 사용할 수 있어야합니다. 대안으로 openssl또는을 사용하여 비밀번호가 포함 된 파일 / 스크립트를 암호화 할 수 gpg있으므로 신임 정보를 잠금 해제하기 전에 비밀번호를 입력해야합니다. 서비스 암호를 기억하기 어려운 경우에 특히 유용합니다.


14

파일에 비밀번호를 하드 코딩하는 대신 비밀번호를 별도의 파일에 저장 하고 권한이있는 사용자 만 액세스 할 수 있도록 파일 ( chmod 700또는 chmod 500)을 보호하십시오 .

cat /dir/to/file/with/.password파일을 읽고 내용을 변수에 저장하는 대신 암호를 검색하십시오 .


이러한 이유로 gpg의 --passphrase-file옵션 과 같은 일부 도구에는 파일에서 직접 암호를 읽을 수있는 옵션이 있습니다.

2
... 그리고 그것을 .dotfile (/dir/to/file/with/.password)로 만드십시오
knb

2
chmod 400파일의 경우 (읽기 전용). 물론, 당신은 주요 디렉토리 (700 또는 500 또는 편집증 인 경우 100)를 보호해야합니다. 400 (또는 디렉토리의 경우 500)이면 충분하며 , 이름 앞에 점을 두어 파일을 숨기는 것처럼 다른 모드 (100)는 모호성을 통해 보안 으로 간주 될 수 있습니다 .
Lekensteyn 2013

1

나는 이것이 오래된 질문이라는 것을 알고 있지만이 비슷한 문제에 직면했으며 우분투의 열쇠 고리를 사용하여 해결했습니다. 다음은 우분투 18.04LTS에 대한 솔루션입니다. 터미널 열기 keyring set {{service}} {{username}} 예를 들어 학교 비밀번호 로깅에 사용하는 경우 적어 두십시오 .

keyring set school mohamed

비밀번호를 입력하면 비밀번호를 입력합니다. 이제 입력 한 비밀번호가 Ubuntu 키링에 저장됩니다.

이 암호를 터미널에 쓰려면 :

keyring get school mohamed

스크립트의 맥락에서 이것을 사용하려면 :

password=$(keyring get school mohamed)

이제 비밀번호는 이전에 입력 한 비밀번호를 나타냅니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.