Сценарій BASH, su до www-даних для однієї команди


26

Я працюю над автоматизацією створення сховищ підривних програм та пов’язаних із ними веб-сайтів, як описано в цьому написаному мною блозі . Я зіткнувся з проблемами прямо в частині, де я повинен користувачу 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користувача без політики входу)


1
Так, здається, я забув основне правило сценаріїв ... RTFM. Спасибі!
Брендон Дуган

15
Спробувавши це, я отримую помилкуThis account is currently not available.
rubo77

Я також отримую цю помилку, але відповідь futbolsalas15 нижче працює добре.
Андрій

18
Використовуйте, su - www-data -s /bin/bash -c 'your_command'щоб зробити цю роботу. Користувач www-data має оболонку, /usr/sbin/nologinтому без -sпараметра вона призводить до повідомлення про помилку.
Петро

63

З "su", ймовірно, це запит пароля, а у www-data немає пароля. Рекомендую команду sudo:

 sudo -u www-data command

Умова полягає в тому, що ваш користувач повинен бути root або налаштований у файл sudoers


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.

2
Слід зазначити, що команди su не працюють з обліковими записами, які мають відключені входи (наприклад, www-data). Вам доведеться використовувати судо.
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користувач без політики входу)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.