내 스크립트는 암호가 필요한 프로그램을 여러 번 호출해야 하며 암호는 환경 변수로만 전달될 수 있습니다. 사용자에게 비밀번호를 한 번만 묻고 싶기 때문에 다음과 같이 합니다.
read -s PASSPHRASE
export PASSPHRASE
program some_option
program some_other_option
program yet_another_option
PASSPHRASE=""
내가 이해한 바로는 PASSPHRASE
변수의 내용은 현재 셸에서만 액세스할 수 있으며 program
세 번의 호출 동안 변수는 재설정되고 비밀번호는 다른 사람이 액세스할 수 없게 됩니다.
내가 옳은가, 아니면 내가 뭔가 잘못하고 있는 걸까?
root
시스템의 다른 사용자( 제외 )와 내 사용자 계정에서 실행되는 다른 프로그램이 걱정됩니다 .
답변1
"보안"을 정의하십시오
- 모든 것은 항상 루트에서 읽을 수 있으므로 루트에서 안전한 것은 없습니다.
- 사용자 U의 환경 변수는 다른 사용자로부터 안전합니다.
- 사용자 U와 프로그램 P의 환경 변수는 사용자 U가 실행하는 프로그램 Q에 안전하지 않습니다.
따라서 루트는 짧은 시간 동안 환경 변수를 읽을 수 있고, 동일한 사용자가 실행하는 다른 프로그램도 짧은 시간 동안 환경 변수를 읽을 수 있습니다.
해결책:
- 자신의 뿌리, 또는 신뢰의 뿌리
- 동일한 사용자를 사용하여 다른 프로그램을 실행하지 마십시오
- 자신의 사용자로 이 프로그램을 실행하세요.
환경 변수를 내보내지 않으려면 다음과 같이 명령을 호출할 수 있습니다.
PASSPHRASE="$PASSPHRASE" command-name -option
상황을 좀 더 안전하게 만들 수 있지만 동일한 사용자가 실행하는 다른 프로그램에서는 몇 가지 트릭(ktrace/strace, 디버깅)을 사용하여 여전히 이를 볼 수 있습니다.