Возврат к ec2-пользователю от пользовательского пользователя

240
florin

При создании экземпляра ec2 я использую скрипт начальной загрузки. На экземпляре я устанавливаю и настраиваю веб-сервер nginx. Из соображений безопасности мне нужно создать нового пользователя (www-data).

Пользователь www-data создается с использованием:

sudo groupadd www-data sudo adduser www-data -g www-data sudo passwd -d www-data 

Дополнительно я запускаю некоторые скрипты на этом компьютере. Для этого я использовал virtualenv. Я запускаю следующий поток:

su www-data pip install --user virtualenv  python -m virtualenv $VIRTUALENV_NAME cd /path/to/bin source activate pip install `stuff` deactivate 

Моя проблема возникает после вышеуказанного потока, когда я хочу вернуться к ec2-пользователю. В терминале печатание exitделает работу. Внутри скрипта начальной загрузки он выйдет из скрипта.

Я пытался с, su ec2-userно он просит пароль. У меня его нет.

Как вернуться к ec2-пользователю от другого пользователя? Или как обойти это

0

1 ответ на вопрос

1
Kamil Maciorowski

Когда вы печатаете это

su www-data whatever something-else exit 

suзапускает дополнительную оболочку от имени www-dataпользователя. Затем вы вводите последовательные команды, они выполняются в этой оболочке, поэтому exitвы возвращаетесь к старой оболочке.

Если эти команды находятся в скрипте, whateverони не будут выполняться в дополнительной оболочке. Исходная оболочка будет ожидать suвыхода, прежде чем она пойдет в whateverи дальше. Если вы запустите такой скрипт (файл script.shс правильным shebang) из терминала, вы попадете в интерактивную оболочку. Введите exitтам вручную, чтобы продолжить со сценарием.

Теперь внутри скрипта начальной загрузки нет прикрепленного TTY, он su www-dataне может запустить интерактивную оболочку и немедленно завершает работу. Остальная часть скрипта выполняется (очевидно, не как www-dataпользователь); и если есть exitгде-то, он выйдет из сценария.

Чистейший способ справиться с ней, чтобы вставить whateverи something-elseв отдельный хелперах сценарий, то вы можете вызвать в основном сценарии

su www-data -c "/path/to/the/helper/script" 

Основной скрипт будет ждать suвыхода. Когда это происходит, любая следующая строка выполняется исходным пользователем.

Другой способ таков:

su www-data -c 'whatever; something-else' 

или эквивалентно

su www-data -c ' whatever something-else ' 

Последний подход может быть проблематичным, если команды нуждаются в цитировании. С дополнительным скриптом такой проблемы нет.

Другой вариант может быть [heredoc] (https://en.wikipedia.org/wiki/Here_document#Unix_shells) - `su www-data < Attie 5 лет назад 0

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