비밀번호가 포함된 변수를 내보낸 다음 재설정해도 안전합니까?

비밀번호가 포함된 변수를 내보낸 다음 재설정해도 안전합니까?

내 스크립트는 암호가 필요한 프로그램을 여러 번 호출해야 하며 암호는 환경 변수로만 전달될 수 있습니다. 사용자에게 비밀번호를 한 번만 묻고 싶기 때문에 다음과 같이 합니다.

read -s PASSPHRASE
export PASSPHRASE
program some_option
program some_other_option
program yet_another_option
PASSPHRASE=""

내가 이해한 바로는 PASSPHRASE변수의 내용은 현재 셸에서만 액세스할 수 있으며 program세 번의 호출 동안 변수는 재설정되고 비밀번호는 다른 사람이 액세스할 수 없게 됩니다.

내가 옳은가, 아니면 내가 뭔가 잘못하고 있는 걸까?

root시스템의 다른 사용자( 제외 )와 내 사용자 계정에서 실행되는 다른 프로그램이 걱정됩니다 .

답변1

"보안"을 정의하십시오

  1. 모든 것은 항상 루트에서 읽을 수 있으므로 루트에서 안전한 것은 없습니다.
  2. 사용자 U의 환경 변수는 다른 사용자로부터 안전합니다.
  3. 사용자 U와 프로그램 P의 환경 변수는 사용자 U가 실행하는 프로그램 Q에 안전하지 않습니다.

따라서 루트는 짧은 시간 동안 환경 변수를 읽을 수 있고, 동일한 사용자가 실행하는 다른 프로그램도 짧은 시간 동안 환경 변수를 읽을 수 있습니다.

해결책:

  1. 자신의 뿌리, 또는 신뢰의 뿌리
  2. 동일한 사용자를 사용하여 다른 프로그램을 실행하지 마십시오
  3. 자신의 사용자로 이 프로그램을 실행하세요.

환경 변수를 내보내지 않으려면 다음과 같이 명령을 호출할 수 있습니다.

PASSPHRASE="$PASSPHRASE" command-name -option

상황을 좀 더 안전하게 만들 수 있지만 동일한 사용자가 실행하는 다른 프로그램에서는 몇 가지 트릭(ktrace/strace, 디버깅)을 사용하여 여전히 이를 볼 수 있습니다.

관련 정보