Я работаю над автоматизацией создания репозиториев Subversion и связанных веб-сайтов, как описано в этом посте, который я написал . Я сталкиваюсь с проблемами прямо в той части, где я обращаюсь к пользователю www-data для выполнения следующей команды:
svnadmin create /svn/repository
В начале скрипта есть проверка, чтобы убедиться, что он запускается от имени root или sudo, и все, что после этой команды нужно запускать от имени root. Есть ли хороший способ запустить эту одну команду как www-data, а затем переключиться обратно на root для завершения?
This account is currently not available.
su - www-data -s /bin/bash -c 'your_command'
чтобы сделать эту работу. Пользовательские www-данные имеют оболочку,/usr/sbin/nologin
поэтому без-s
параметра это приводит к сообщению об ошибке.С 'su', вероятно, тот запрос пароля, а www-data не имеет пароля. Я рекомендую команду
sudo
:Условие состоит в том, что ваш пользователь должен быть пользователем root или сконфигурирован в файле sudoers
источник
Используйте
su
:источник
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
политику отсутствия входа пользователя)источник