Я работаю над автоматизацией создания репозиториев Subversion и связанных веб-сайтов, как описано в это сообщение в блоге я написал. Я сталкиваюсь с проблемами прямо в той части, где я обращаюсь к пользователю www-data с просьбой выполнить следующую команду:
svnadmin create /svn/repository
В начале скрипта есть проверка, которая проверяет, запущен ли он как root или sudo, и все, что после этой команды, необходимо запускать как root. Есть ли хороший способ запустить эту команду как www-data, а затем вернуться к root, чтобы закончить?
С su, вероятно, запрашивается пароль, а www-data не имеет пароля. Рекомендую команду sudo
:
sudo -u www-data command
Условие состоит в том, что ваш пользователь должен быть root или настроен в файле sudoers
Просто используйте 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
политика отсутствия входа пользователя)
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
политика отсутствия входа пользователя)
Использовать 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.