Piszę bash
skrypt i muszę zapytać użytkownika o hasło i przekazać je openssl
. Chociaż openssl
mogę odczytać samo hasło, potrzebuję dwóch uruchomień programu i nie chcę pytać użytkownika dwukrotnie. Oto skrypt:
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
Nie jest to bezpieczne, ponieważ hasło jest łatwo dostępne, patrząc w wierszu poleceń; na przykład ktoś może to przeczytać ps
.
openssl
może odczytać hasło ze zmiennej środowiskowej, więc mogę wymienić -k "$PASS"
z -pass env:PASS
, ale wciąż nie jest bezpieczne; zmienne środowiskowe dowolnego procesu można odczytać dowolnie (ponownie, ps
można to zrobić).
Jak mogę bezpiecznie przekazać hasło do obu openssl
instancji?
ps
odczytuje środowisko procesu /proc/<pid>/environ
, ale ten plik ma 0600
uprawnienia, więc tylko root i użytkownik uruchamiający proces są w stanie odczytać środowisko procesu. Powiedziałbym, że to całkiem bezpieczne.