экспорт переменных из файла среды с пробелами в значениях

#!/bin/sh

if [ "$(id -u)" -ne 0 ]; then
        echo 'This script must be run by root' >&2
        exit 1
fi

cat <<HEADER
Host:          $(hostname)
Time at start: $(date)

Running cache maintenance...
HEADER

swapoff -a && swapon -a
echo 1 >/proc/sys/vm/drop_caches

cat <<FOOTER
Cache maintenance done.
Time at end:   $(date)
FOOTER

Пользователь root имеет UID 0 (независимо от имени учетной записи «root» ). Если эффективный UID, возвращаемый id -u, не равен нулю, пользователь не выполняет сценарий с привилегиями root. Используйте id -ruдля проверки реального ID (UID пользователя , вызывающего скрипт ).

Не используйте $EUIDв скрипте, так как он может быть изменен непривилегированным пользователем:

$ bash -c 'echo $EUID'
1000

$ EUID=0 bash -c 'echo $EUID'
0

Если это сделает пользователь, это, очевидно, не приведет к повышению привилегий, но может привести к тому, что команды в сценарии не смогут выполнять то, что они должны делать, и файлы будут созданы с неверным владельцем и т. д.

1
25.09.2019, 21:02
1 ответ

Вы можете использовать parset?

parset "`perl -nE '/[^=]+/ && print "$&,"'.env`" echo ::: "`perl -pe 's/[^=]+=//'.env`"

Он успешно обрабатывает ввод, например:

vv=* ;   & " echo this is a value - not a command
0
28.01.2020, 00:00

Теги

Похожие вопросы