Сложно, поскольку cron
ищет файлы crontab
в одном каталоге, что не подходит для отдельных пользовательские репозитории git. Я полагаю, вы могли бы заменить / usr / bin / crontab
кодом, который, помимо эмуляции crontab (1)
, определяет, кто пользователь, извлекает или создает его git хранит данные cron, фиксирует любые изменения, затем делает эти данные доступными для cron (8)
, либо вызывая исходный crontab (1)
(из-за бита setgid), либо устанавливается сам (предупреждение об опасности!). Обновление системы также будет сложным, так как во время обновления нужно будет установить обновленный / usr / bin / crontab
, а затем переместить его в сторону, чтобы установить оболочку с поддержкой git (и аналогично для любых исправлений касаются crontab
).
Пользователи, которые выяснили, где находится исходный crontab (1)
, смогут обойти git-материал; чтобы избежать этого, ваша реализация должна быть setgid crontab
, что может открыть дверь к проблемам безопасности произвольной перезаписи файла crontab любого пользователя или, другими словами, отличным способом разрешить полную компрометация системы (злоумышленник записывает в корневой
файл crontab, они выигрывают!), если ваш код содержит какие-либо проблемы с безопасностью.
Также сложно, если пользователь выясняет, где находится их репозиторий git для каждого cron, а затем начинает с этим разбираться; если это вызывает беспокойство, они должны принадлежать другому пользователю, и пользовательский crontab (5)
клиент будет затем разговаривать с каким-то демоном, у которого есть права на эти репозитории (например, как sshd
делает привсеп).
( rcs
может быть достаточно, если вам просто нужно отслеживать изменения с течением времени, и предлагает меньше веревок, чтобы повеситься, чем git
.)
В ваших конфигурациях виртуальных хостов вы используете виртуальные хосты на основе имени, как вы указываете ServerName
. Это означает, что конфигурация будет загружаться только тогда, когда заголовок «Host» в клиентском запросе совпадает. Поведение Apache по умолчанию, когда он не может сопоставить запрошенный хост с какими-либо настроенными виртуальными хостами, заключается в загрузке первого настроенного виртуального хоста, который он может найти.
Есть много способов получить нужный контент, один из них — настроить заголовок «Host» в вашем запросе, чтобы он соответствовал ServerName
, который вы пытаетесь достичь. Другой вариант — добавить IP-адрес в виде ServerAlias
или вы можете переключиться на виртуальные хосты на основе IP и настроить все таким образом.