Як запустити роботу cron за допомогою команди sudo


118

Чи можливо запустити роботу cron, яка потребує команди sudo ?

Подібно до:

 sudo rm somefile

Ласкаво просимо, Саєм Сіам, подивіться відповіді на це питання askubuntu.com/questions/2368/how-do-i-setup-cron-job . як я вважаю, ваше запитання було задано раніше тут в AU
stephenmyall

1
Я намагаюся виконати sudo, який потребує пароля, але як я можу дати пароль з файлу cron
sayem siam

3
@sayemsiam вам не потрібно ставити sudo, просто відредагуйте кореневий crontab.
Брайам

Відповіді:


240

Я не буду вникати, наскільки це погана ідея; Простіше кажучи, для запуску sudoв crontab потрібен ваш пароль зберігатися десь у простому тексті.

Це погана ідея.


Далі подано кращий метод виконання адміністративних завдань через cron. Оскільки вам не потрібно писати sudoв crontab, якщо ви змінюєте crontab root.

Використовуйте кронтаб кореня

Виконайте таку команду:

sudo crontab -e

Це відкриває rootкронтаб. sudoне потрібно запускати свою команду в цьому контексті, оскільки вона буде викликана як rootінакше.

Тому ви просто додасте наступне до кронати кореня.

@hourly rm somefile

Тепер, якщо ви абсолютно хочете бути небезпечними та ризикувати своїм паролем, наступне запустить вашу команду зі свого власного crontab та введе ваш пароль автоматично, коли буде запропоновано sudo.

Знову ж таки, це не рекомендується .


У власному crontab напишіть свою команду так:

@hourly echo "password" | sudo -S rm somefile

Очевидним недоліком тут є те, що якщо хто-небудь коли-небудь матиме доступ до вашого crontab, ваш пароль буде читабельний у простому тексті.

Ти не повинен цього робити.


1
Радий, що працює! Просто будьте обережні до будь-яких дірок у безпеці, які ви залишите. Вони можуть пізніше повернутися, щоб переслідувати вас.
SirCharlo

1
@SirCharlo Навіщо використовувати rootcrontab користувача 'замість загальносистемного crontab /etc/crontab?
Елія Каган

1
@Elijah чому б і ні?
SirCharlo

2
Ця відповідь не вистачає позначки, оскільки вона переливається над тонкощами, наявними у вашому sudoersфайлі, як групи судо без вимоги пароля.
brent

дуже дуже корисний момент, дякую за велику допомогу.
Насер Мансурі

33

Якщо ви розміщуєте скрипт з одного з директорій cron ( /etc/cron.*), вам не потрібно використовувати sudo, оскільки він працює як root.

Якщо ви використовуєте crontab, тоді вам потрібно буде використовувати crontab root. Це запустить його як root, а також не потребуватиме sudo.

sudo crontab -e

1
Я також розміщую команду у /etc/cron.hourly/something. Ось для чого ці довідники.
John S Gruber

3
Ні. Ви можете поставити це в /etc/cron.SOMETHING/SCRIPT, але я б не робив обох. І те й інше дають приблизно однакову функцію, хоча, використовуючи crontab, ви мали б трохи більше влади над тим, як часто / коли запускаються речі.
tgm4883

1
Я мав би дати зрозуміти, що я маю на увазі це як альтернативу. Дякую.
John S Gruber

3

Виконайте наступну команду в терміналі

sudo visudo

До кінця файлу додано наступний рядок:

vidyadhar  ALL= NOPASSWD: /bin/rm

У наведеному вище прикладі vidyadhar - це ім'я користувача, і він не буде запитувати пароль, якщо ви виконуєте команду rm через vidyadhar.


17
Хм .. Тоді будь-яка шкідлива команда, на зразок sudo rm -rf 'slash'( не запускайте цю команду ), запускається від цього користувача, не вимагає пароля .. Я не знаю, це почувається небезпечно, ні?
SirCharlo

Я це знаю. Ваш підхід хороший. Але я використовую вище підхід для надання права іншому користувачеві зупиняти / запускати певні послуги.
Відядхар

24
Це надзвичайно погана ідея. Будь ласка, не робіть цього.
bkanuka

2
Можливо, vidyadhar ALL= NOPASSWD: /bin/rm somefileбуло б більш безпечно.
Wernfried Domscheit

Це жахлива ідея. Ви дали дозвіл на судовий ковдру на rm. Натомість, надайте права доступу до сценарію для вашої команди, включаючи rm чи інші в цьому сценарії, зробіть його виконуваним, а потім надайте права доступу до цього сценарію. <username> ALL=(ALL) NOPASSWD: /home/<username>/bin/<script>, що було б набагато безпечніше.
RJ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.