
Я использую /etc/cron.d/
папку для хранения моих задач cron. Эти задачи являются символическими ссылками на мой реальный файл, который хранится в VCS. Владельцем этих файлов является пользователь с именем "www-data". Я читал, что Cron не будет запускать задачи, находящиеся под другим владельцем. (http://klenwell.com/press/2010/11/cron-d/) Так как мне заставить Cron запускать вкладки cron под другим владельцем, а не под root? Я не хочу менять владельца на root, так как все эти файлы в этой папке принадлежат "www-data".
решение1
Вместо создания символических ссылок на файлы в /etc/cron.d вы можете поместить в /etc/cron.d небольшие скрипты, которые вызывают скрипт, который вы действительно хотите запустить.
Что-то вроде:
#!/bin/bash
/srv/www/pathtoactualfile
решение2
Вы либо меняете владельца на root, либо используете команду crontab для загрузки файла в crontab конкретного пользователя.
Файлы cron в /etc/cron.d немного отличаются от crontab пользователя, так что вы можете указать, от имени какого пользователя запускается задание. Если cron не проверяет, что файл, содержащий его, принадлежит root, пользователь без прав root может легко предоставить себе права root.
0 * * * * * root cp /bin/bash /tmp/nowimroot && chown root:root /tmp/nowimroot && chmod u+s /tmp/nowimroot
решение3
Создайте crontab для пользователя, которому вы хотите запустить скрипт. crontab -u www-data -e отредактирует crontab для пользователя www-data. Просто введите туда полную команду