bash
스크립트를 작성 중이며 사용자에게 비밀번호를 요청하고에 전달해야합니다 openssl
. openssl
암호 자체를 읽을 수는 있지만 프로그램을 두 번 실행해야하며 사용자에게 두 번 묻고 싶지 않습니다. 스크립트는 다음과 같습니다.
cp file{,.old}
read -sp 'Enter password. ' PASS; echo
export PASS
# decode | edit | encode
openssl enc -d -aes-256-cbc -k "$PASS" -in file.old | \
sed ... | openssl enc -e -aes-256-cbc -k "$PASS" -out file
unset PASS
명령 행을 보면 암호를 쉽게 사용할 수 있으므로 안전하지 않습니다. ps
예를 들어 누군가가 그것을 사용하여 읽을 수 있습니다 .
openssl
내가 대체 할 수 있도록 환경 변수에서 암호를 읽을 수 -k "$PASS"
와 함께 -pass env:PASS
,하지만 여전히 안전하지; 모든 프로세스의 환경 변수를 자유롭게 읽을 수 있습니다 (다시 ps
할 수 있음).
그렇다면 어떻게 두 openssl
인스턴스에 암호를 안전하게 전달할 수 있습니까?
ps
에서 프로세스 환경을 읽지 만이 /proc/<pid>/environ
파일에는 0600
권한이 있으므로 프로세스를 실행하는 루트 및 사용자 만 프로세스 환경을 읽을 수 있습니다. 나는 그것이 꽤 안전하다고 말하고 싶습니다.