BASH Scripting, su to www-data для одной команды

26

Я работаю над автоматизацией создания репозиториев Subversion и связанных веб-сайтов, как описано в этом посте, который я написал . Я сталкиваюсь с проблемами прямо в той части, где я обращаюсь к пользователю www-data для выполнения следующей команды:

svnadmin create /svn/repository

В начале скрипта есть проверка, чтобы убедиться, что он запускается от имени root или sudo, и все, что после этой команды нужно запускать от имени root. Есть ли хороший способ запустить эту одну команду как www-data, а затем переключиться обратно на root для завершения?

Брендон Дуган
источник

Ответы:

24

Просто используйте su - www-data -c 'svnadmin create /svn/repository'в своем скрипте запуск от root. Так что только эта команда выполняется пользователем www-data.


Обновление для будущих зрителей :

Если вы получили сообщение "This account is currently not available"об ошибке, рассмотрите возможность использования:

su - www-data -s /bin/bash -c 'svnadmin create /svn/repository'

(Ценное упоминание @Petr о -sфлаге, чтобы приспособить www-dataпользователя к политике входа в систему)

johnshen64
источник
1
Да, похоже, я забыл основное правило написания сценариев ... RTFM. Благодарность!
Брендон Дуган
15
Пытаясь это, я получаю ошибкуThis account is currently not available.
rubo77
Я также получаю эту ошибку, но ответ futbolsalas15 ниже работает нормально.
Андрей
18
Используйте, su - www-data -s /bin/bash -c 'your_command'чтобы сделать эту работу. Пользовательские www-данные имеют оболочку, /usr/sbin/nologinпоэтому без -sпараметра это приводит к сообщению об ошибке.
Петр
63

С 'su', вероятно, тот запрос пароля, а www-data не имеет пароля. Я рекомендую команду sudo:

 sudo -u www-data command

Условие состоит в том, что ваш пользователь должен быть пользователем root или сконфигурирован в файле sudoers

futbolsalas15
источник
4
Вау, почему это не выбранный ответ? Мне потребовалось слишком много времени, чтобы найти это.
Капитан Гипертекст
3

Используйте su:

   su [options] [username]

   The options which apply to the su command are:

   -c, --command COMMAND
       Specify a command that will be invoked by the shell using its -c.
MikeyB
источник
2
Следует отметить, что команды su не работают с учетными записями, которые отключили вход (например, www-data). Вам придется использовать sudo.
Frantumn
2

2 возможных подхода :


1) sudoкоманда:

В большинстве случаев у вас будет доступ к sudoкоманде, и поэтому решение просто:

sudo -u target_user target_command


2) suкоманда (если sudo не установлен. Ex. alpine-linux images):

su - target_user -c 'target_command'

Если вы получаете сообщение об ошибке «Эта учетная запись в данный момент недоступна» , у пользователя действует политика отсутствия входа (доступ к оболочке). Если это так, рассмотрите возможность использования:

su - target_user -s /bin/bash -c 'target_command'

(На основании ценного комментария @Petr о -sфлаге, чтобы учесть www-dataполитику отсутствия входа пользователя)

мороженщик
источник