Использование нескольких пользователей в сценарии crontab, при смене пользователей происходит тихая ошибка

Я пытаюсь запустить сценарий bash на centos сервер. Я запустил скрипт от имени пользователя root (как для прав доступа к файлам), но мне также нужно использовать разрешения службы aws, принадлежащие учетной записи службы. Мы решили не предоставлять учетной записи root доступ к среде AWS.

Если я запускаю сценарий вручную ./ disk-arcive.sh , он работает без проблем. Когда я запускаю его из своего crontab, он молча терпит неудачу при переходе на aws-cli-user . Нет сообщения об ошибке, и только при запуске cron.

Как это вызывается в Crontab sudo crontab -e :

0 20 * * * /bin/sh /etc/disk-arcive.sh

Сводка файла оболочки:

#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin    <<Same as root

find (old stuff) >> /old-stuff.temp 
while read line; do
    /opt/bin/encryption-tool "$line">> /encrypt_logfile.log     << key access requires root permission
done < /old-stuff.temp

while read line; do
    sudo -u aws-cli-user /usr/local/bin/aws s3 mv "$line.pgp" s3://mybucket"$line.pgp" >> /bucket_logfile.log     #<< switch to user fails, user needed for s3 permissions
    sudo -u aws-cli-user echo "User is now aws-cli-user" >> /bucket_logfile.log   #<< added for debugging, does not work
    echo "looks like $line is done" >> /bucket_logfile.log   #<< added for debugging, Works
done < /old-stuff.temp

exit

UPDATE1 Я обновил строки "переключение пользователей" следующим образом. Однако, похоже, что это не так, если я использую какие-либо параметры aws-s3 (например, --sse или --acl), они читаются как часть параметров su .

    su -l aws-cli-user -c '/usr/local/bin/aws s3 mv "$line.pgp" s3://mybucket"$line.pgp" --sse >> /bucket_logfile.log'     #<< switch to user fails, user needed for s3 permissions
    su -l aws-cli-user  -c 'echo "User is now aws-cli-user $(whoami)" >> /bucket_logfile.log'   #<< added for debugging, does not work. enters a blank line into the log file

Вывод ] строка echo показывает, что строка $ теперь передается при переключении пользователя.

0
задан 7 April 2020 в 17:53
1 ответ

OK заставило это работать, потребовалось несколько изменений

su -l username -c command Это позволило пользователю изменить cron Следующим шагом была работа с одинарными кавычками и дубляж-кавычками, чтобы команда «скомпилировалась» правильно, я нашел только одну ссылку на это, поэтому у меня может быть неправильная терминология.

su -l aws-cli-user -c '/usr/local/bin/aws s3 mv "$line.pgp" s3://mybucket"$line.pgp" --sse >> /bucket_logfile.log'

В одинарной кавычке пользователь «компилирует» команду, и он не знает, что такое переменная $line, поэтому команда не может найти ссылку на файл.

su -l aws-cli-user -c "/usr/local/bin/aws s3 mv '$line.pgp' s3://mybucket'$line.pgp' --sse >> /bucket_logfile.log"

Теперь с двойными кавычками пользователь Root компилирует работу, включая переменную $line, а затем передает завершенную команду другому пользователю для выполнения. Из-за этого используется $(whoami) всегда будет отображать root, даже если другой пользователь выполняет команду со своими разрешениями.

0
ответ дан 7 April 2020 в 15:32

Теги

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