Указываете переменную PIDFILE в юните, и systemd сам её удалит.
А если в более общем виде, если нужно несколько директорий очистить? В сценарии оболочки это может быть
rm -rm /var/cache/squid / /var/tmp/squid
А в systemd с таким же успехом
CACHE_DIRS=«/var/cache/squid / /var/tmp/squid»
Ну и как systemd будет от этого защищать? В точности такое же решето. Если systemd может хоть что-то делать, то он сможет делать и вредные вещи, в том числе по ошибке.
Программа должна уметь корректно работать без всяких инитов.
То есть systemd в этом отношении в точности такое же говно как и всё прочее говно и наличие или отсутствие в нём возможности/необходимости запуска сценариев оболочки ничего не меняет.
И таки systemd должен уметь работать с тем ПО которое есть, а не отказывать в запуске программ, которые ему по каким-то причинам не нравятся.
Если systemd может хоть что-то делать, то он сможет делать и вредные вещи, в том числе по ошибке.
В 99% случаев достаточно встроенного в юниты функционала, где вероятность подобного факапа близка к нулю. Да, в оставшемся 1% случаев можно также выстрелить себе в ногу, но шансов на это гораздо меньше, чем с инитскриптами. Инитскрипты можно сравнить с заряженным пистолетом, лежащем на столе, тогда как в случае системд этот пистолет разряжен и в сейфе, ключи от сейфа в дальнем углу антресолей.
Логика работы софтины, вынесенная на уровень рутового init скрипта, суть есть дикий быдлокод.
И? systemd от этого спасает? Нет, не спасает. Я не защищаю сейчас squid, я осуждаю защитников systemd, который в подобной ситуации был бы столь же бесполезен сколь и любая другая программа для запуска демонов.
Сначала вы пытались утверждать, что systemd такую ситуацию практически исключает, а я показал вам, что от замены шила на мыло в общем-то ничего не меняется. Проблема тут не в systemd, и решается она не средствами systemd.
Сначала вы пытались утверждать, что systemd такую ситуацию практически исключает, а я показал вам, что от замены шила на мыло в общем-то ничего не меняется.
Без systemd такое с лёгкой руки майнтейнера может произойти с любым демоном. С systemd - только с изначально кривыми, да и то вряд ли, как указал shahid.
Без systemd такое с лёгкой руки майнтейнера может произойти с любым демоном.
С systemd тоже с любым.
С systemd - только с изначально кривыми
С любой другой системой инициализации тоже только с кривыми.
да и то вряд ли, как указал shahid.
Вероятность примерно такая же.
Ключевые слова «с лёгкой руки майнтейнера». Нет никаких оснований полагать, что использование нового языка программирования/конфигурации вместо существующих избавит от вероятности совершения ошибки.
С любой другой системой инициализации тоже только с кривыми.
Если у сервиса есть PID файл, это не значит, что он кривой. Но это потенциальное место ошибки в инит-скрипте на баше.
Вероятность примерно такая же.
Речь не о вероятности, а о последствиях. Без рутовых привилегий rm -rf / не сработает.
Ключевые слова «с лёгкой руки майнтейнера». Нет никаких оснований полагать, что использование нового языка программирования/конфигурации вместо существующих избавит от вероятности совершения ошибки.
От вероятности такой ошибки - избавит. Не шлангуйте.
Я уже несколько раз пытался увести вас от осуждения конкретного случая squid к более общему. Но вы продолжаете игнорировать возможность совершения множества других ошибок в других местах напирая на одну единственную от которой systemd возможно спас бы. Даже учитывая, что package containing this bug has never been released.
Что здесь может пойти не так?
Любой ментейнер глядя на любой сценарий задаётся тем же вопросом. Да и любой программист тоже. Уверенность в верности неверного ответа не добавляет надёжности.
Если у сервиса есть PID файл, это не значит, что он кривой. Но это потенциальное место ошибки в инит-скрипте на баше.
Я вам уже сказал, что может быть необходимость удалять не единичный файл, но целый набор директорий, и вы даже признали мою правоту, но продолжаете возвращаться к вашему любимому случаю со squid'ом. Частное не доказывает общее.
Речь не о вероятности, а о последствиях. Без рутовых привилегий rm -rf / не сработает.
И по этому поводу я тоже уже отвечал. «rm -rf /» от непривилегированного пользователя работает одинаково при любых системах инициализации.
От вероятности такой ошибки - избавит. Не шлангуйте.
Вы опять пытаетесь перейти от обсуждения общего к частному. Повторяю, частное не доказывает общее. Не шлангуйте.
Я уже несколько раз пытался увести вас от осуждения конкретного случая squid к более общему.
Да, вы уже несколько раз пытались срулить на то, что, если очень постараться, то ногу можно себе прострелить и из systemd. Только это херовый аргумент.
Уверенность в верности неверного ответа не добавляет надёжности.
Чистая демагогия.
Я вам уже сказал, что может быть необходимость удалять не единичный файл, но целый набор директорий
А я признал, что, если упереть приклад в угол и нажимать на курок длинной палкой, то с определённой попытки можно попасть в ногу даже если длина ствола у ружья вдвое больше вашего роста.
И по этому поводу я тоже уже отвечал. «rm -rf /» от непривилегированного пользователя работает одинаково при любых системах инициализации.
Это не ответ. В сабжевом случае оно сработало от рута. Systemd этого бы не допустил.
Вы опять пытаетесь перейти от обсуждения общего к частному.
Если на краю обрыва поставить оградку, то падать с него будут меньше. Конечно, найдутся гении, которые через неё перелезут, или великаны, которые её не заметят, но это не отменяет факта повысившейся безопасности. Какое, к чёрту, общее и частное?
Ну и как systemd будет от этого защищать? В точности такое же решето. Если systemd может хоть что-то делать, то он сможет делать и вредные вещи, в том числе по ошибке.
Только я не понял, а зачем кэш сквида очищать при старте системы, а не сквида?
С systemd сабжевую ошибку можно устроить ТОЛЬКО явно и преднамеренно.
В случае с sysv и прочими bash-поделками, дающими полный рутовый кард-бланш, всё происходящее на усмотрение великой неопределенности и внимательности писателя init-скрипта, что мы и наблюдаем в ОП-посте. Пейсатели init-скриптов почти всегда сбрасывают права только на самом последнем шаге, когда запускается демон, или не сбрасывают вообще, предоставляя это дело демону.
В системе с Upstart или OpenRC «rm -rf /» вызванный с правами squid удалит всё из корня?
Логика работы софтины, вынесенная на уровень рутового init скрипта, суть есть дикий быдлокод.
systemd от этого не спасёт (ибо есть костыли), а если бы этого явления не было, то и init скрипты были бы мягкими и шелковистыми. Более того, так как systemd перезапускает крашищийся сервис, быдлокодеры совсем распояшутся.
То есть systemd в этом отношении в точности такое же говно как и всё прочее говно и наличие или отсутствие в нём возможности/необходимости запуска сценариев оболочки ничего не меняет.
Нет, просто systemd создавался для того, чтобы заменить толстые init-скрипты(на 100 и более строчек), где каждый PIDFILE контролировался кодом на bash, на простые ini-юниты, где ты просто указываешь, где должен лежать этот PIDFILE, и systemd уже сам, православным способом, проконтролирует его создание и удаление. По пути отсеяв всякие ошибки типа rm -rf / var...
Именно поэтому получается быстрее. Потому что вместо bash-скрипта, который постоянно создаёт одноразовые микрофорки(программы из окружения), идут уже вызовы на православных Сях, с распараллеливанием, и всем прочим.
Тем самым, ответственность за написание init-скриптов мягко переложили с плеч разрабов демонов на плечи мейнтейнеров дистрибутива, которые тупо пишуют unitы. А выполнение типичных/базовых для init-скриптов операций, на плечи поделия поцерринга.
// ИМХО, они всё правильно сделали. Единственное, чего делать не стоило, так это делать из сырцев systemd комбайн из разных программ, и принудительно завязывать эти программы на API systemd.
ППКС
Пример того, как политика вмешивается в разработку и всё скатывает...
А ошибки в unit'ах таки могут приводить к жутким вещам.
Их действительно должны писать мейтейнеры всей системы,
а не авторы демонов - а то получится адок...