Я не буду вдаваться в подробности, насколько это плохая идея; Проще говоря, запуск sudoв crontab требует, чтобы ваш пароль хранился где-нибудь в виде открытого текста.
Это плохая идея.
Ниже приведен предпочтительный метод запуска административных задач через cron. Поскольку вам не нужно писать sudoв crontab, если вы изменяете crontab root.
Использовать crontab root
Запустите следующую команду:
sudo crontab -e
Это открывает rootcrontab. sudoНет необходимости запускать вашу команду в этом контексте, так как она будет вызываться как и в rootлюбом случае.
Таким образом, вы просто добавили бы следующее в crontab root.
@hourly rm somefile
Теперь, если вы абсолютно хотите быть небезопасными и рисковать своим паролем, следующие команды запустят вашу команду из вашего собственного crontab и автоматически введут ваш пароль при появлении соответствующего запроса sudo.
Опять же, это не рекомендуется .
В вашем собственном crontab напишите вашу команду так:
@hourly echo "password" | sudo -S rm somefile
Очевидным недостатком здесь является то, что, если кто-нибудь когда-нибудь получит доступ к вашему crontab, ваш пароль будет доступен для чтения в виде открытого текста.
Рад, что это работает! Просто будьте осторожны с любыми дырами в безопасности, которые вы оставите позади. Они могут вернуться позже, чтобы преследовать вас.
SirCharlo
1
@SirCharlo Зачем использовать rootпользовательский crontab вместо общесистемного crontab /etc/crontab?
Элия Каган
1
@ Элайджа, почему бы и нет?
СэрЧарло
2
Этот ответ пропускает оценку, потому что он скрывает тонкости, имеющиеся в вашем sudoersфайле, например, группы sudo без требования пароля.
Brent
очень очень полезный момент, спасибо за большую помощь.
Насер Мансури
33
Если вы помещаете скрипт из одной из директорий cron ( /etc/cron.*), вам не нужно использовать sudo, так как он запускается от имени root.
Если вы используете crontab, то вы захотите использовать crontab root. Это запустит его как root, а также не нужно sudo.
Я также поместил бы команду в /etc/cron.hourly/something. Вот для чего эти каталоги.
Джон С. Грубер
3
Нет. Вы можете поместить это в /etc/cron.SOMETHING/SCRIPT, но я бы не стал делать то и другое. Оба дали бы примерно одинаковую функцию, хотя с помощью crontab у вас было бы немного больше власти над тем, как часто / когда все работает.
tgm4883
1
Я должен был дать понять, что я имел в виду в качестве альтернативы. Благодарю.
Джон С. Грубер
3
Запустите следующую команду в терминале
sudo visudo
Добавил следующую строку в конец файла:
vidyadhar ALL= NOPASSWD: /bin/rm
В приведенном выше примере vidyadhar является именем пользователя, и он не будет запрашивать пароль, если вы запускаете команду rm через vidyadhar.
Хм ... Тогда любая вредоносная команда, такая как sudo rm -rf 'slash'( не запускать эту команду ), запускаемая этим пользователем, не требует пароля ... Я не знаю, это кажется небезопасным, нет?
SirCharlo
Я знаю это. Ваш подход хорош. Но я использую описанный выше подход для предоставления права другому пользователю останавливать / запускать определенные службы.
Видьядхар
24
Это очень плохая идея. Пожалуйста, не делай этого.
bkanuka
2
Может быть vidyadhar ALL= NOPASSWD: /bin/rm somefile, будет более безопасным.
Вернфрид Домшайт
Это ужасная идея. Вы дали полное разрешение sudo для rm. Вместо этого, предоставьте права sudo для сценария, который ваша команда, включая rm или других в этом сценарии, сделайте его исполняемым, затем предоставьте разрешения sudo для этого сценария. <username> ALL=(ALL) NOPASSWD: /home/<username>/bin/<script>, что было бы намного безопаснее.
Ответы:
Я не буду вдаваться в подробности, насколько это плохая идея; Проще говоря, запуск
sudo
в crontab требует, чтобы ваш пароль хранился где-нибудь в виде открытого текста.Это плохая идея.
Ниже приведен предпочтительный метод запуска административных задач через cron. Поскольку вам не нужно писать
sudo
в crontab, если вы изменяете crontab root.Использовать crontab root
Запустите следующую команду:
Это открывает
root
crontab.sudo
Нет необходимости запускать вашу команду в этом контексте, так как она будет вызываться как и вroot
любом случае.Таким образом, вы просто добавили бы следующее в crontab root.
Теперь, если вы абсолютно хотите быть небезопасными и рисковать своим паролем, следующие команды запустят вашу команду из вашего собственного crontab и автоматически введут ваш пароль при появлении соответствующего запроса
sudo
.Опять же, это не рекомендуется .
В вашем собственном crontab напишите вашу команду так:
Очевидным недостатком здесь является то, что, если кто-нибудь когда-нибудь получит доступ к вашему crontab, ваш пароль будет доступен для чтения в виде открытого текста.
Ты не должен этого делать.
источник
root
пользовательский crontab вместо общесистемного crontab/etc/crontab
?sudoers
файле, например, группы sudo без требования пароля.Если вы помещаете скрипт из одной из директорий cron (
/etc/cron.*
), вам не нужно использовать sudo, так как он запускается от имени root.Если вы используете crontab, то вы захотите использовать crontab root. Это запустит его как root, а также не нужно sudo.
источник
Запустите следующую команду в терминале
Добавил следующую строку в конец файла:
В приведенном выше примере vidyadhar является именем пользователя, и он не будет запрашивать пароль, если вы запускаете команду rm через vidyadhar.
источник
sudo rm -rf 'slash'
( не запускать эту команду ), запускаемая этим пользователем, не требует пароля ... Я не знаю, это кажется небезопасным, нет?vidyadhar ALL= NOPASSWD: /bin/rm somefile
, будет более безопасным.<username> ALL=(ALL) NOPASSWD: /home/<username>/bin/<script>
, что было бы намного безопаснее.