Уважаемый Speccyfighter!
Зная, что вы много лет специализируетесь на системе инициализации System V init, поместил эту информацию не только в багзиллу, но еще на форум. Я хотел прочитать ваше авторитетное мнение. Я понимаю, что ваша первая реакция на этот бардак очень эмоциональная. Надеюсь, что когда вы "остынете", то напишете что-то по технической части.
А что там писать? И остывать здесь нельзя, ибо фатально для системы на sysv:
Через лог Поттеринг хочет чтобы systemd сервис-файл был добавлен в пакет console-scripts. Который предназначен для систем на sysv изначально от своего рождения. И это один из немногих пакетов который не содержит компонентов systemd. Единственный момент, это service входящий в пакет. В который альты добавили функциональность и для systemd:
# rpm -q --changelog service | grep 'systemd support' -B1
* Чт мар 17 2011 Dmitry V. Levin <ldv@altlinux.org> 0.5.21-alt1
- service: added systemd support (closes: #24989).
# grep -i ctl /sbin/service
SYSTEMCTL=systemctl
sd_booted && "$SYSTEMCTL" --version >/dev/null 2>&1
exec "$SYSTEMCTL" "$@" "$SYSTEMD_SERVICE_NAME"
# grep -i systemd /sbin/service
SYSTEMD_SERVICE_DIR=/lib/systemd/system
SYSTEMD_SERVICE_NAME=
systemd_status=
systemd_is_active()
if [ -z "$systemd_status" ]; then
systemd_status=$?
return $systemd_status
[ -f "$SYSTEMD_SERVICE_DIR/$SYSTEMD_SERVICE_NAME" ] &&
systemd_is_active &&
SYSTEMD_SERVICE_NAME="$SERVICE" ;;
SYSTEMD_SERVICE_NAME="$SERVICE.service" ;;
if systemd_is_active; then
exec "$SYSTEMCTL" "$@" "$SYSTEMD_SERVICE_NAME"
Но системе на sysv она не мешает и работает в скрипте выбором по условию.
Система на sysv и без того забита бесполезными и ненужными ей компонентами systemd.
145 файлов в /lib/systemd относятся к 11-ти пакетам:
$ find /lib/systemd -type f | wc -l
145
Проблема ухудшается тем, что файлы в /lib/systemd ничем и никем в системе на sysv не контролируются.
И среди этих никем и ничем не контролируемых в системе на sysv файлов, больше десятка исполняемые:
$ ls -l $(find /lib/systemd -type f) | grep rwx
-rwxr-xr-x 1 root root 342 сен 4 2019 /lib/systemd/altlinux-rsyslog-extrasockets
-rwxr-xr-x 1 root root 26584 авг 18 19:36 /lib/systemd/systemd-backlight
-rwxr-xr-x 1 root root 18376 авг 18 19:36 /lib/systemd/systemd-binfmt
-rwxr-xr-x 1 root root 18504 авг 18 19:36 /lib/systemd/systemd-modules-load
-rwxr-xr-x 1 root root 22592 авг 18 19:36 /lib/systemd/systemd-sysctl
-rwxr-xr-x 1 root root 133960 окт 14 2020 /lib/systemd/system-generators/lvm2-activation-generator
-rwxr-xr-x 1 root root 68488 авг 21 2019 /lib/systemd/system-generators/nfs-server-generator
-rwxr-xr-x 1 root root 39456 авг 21 2019 /lib/systemd/system-generators/rpc-pipefs-generator
-rwxr-xr-x 1 root root 168 июн 15 2020 /lib/systemd/system-shutdown/fwupd.shutdown
-rwxr-xr-x 1 root root 160 фев 23 2019 /lib/systemd/system-shutdown/mdadm.shutdown
-rwxr-xr-x 1 root root 201 июл 30 09:40 /lib/systemd/system/virtualbox-vmsvga.service
А атаку через подмену того что не контролируется в системе, никто не отменял.
Из этих ничем и никем не контролируемых исполняемых файлов в системе на sysv,
# ls -l $(find /lib/systemd -type f) | grep rwx | awk '{print $NF}' | while read line; do rpm -qf $line; done | sort -u
fwupd-1.4.4-alt1.x86_64
lvm2-2.03.10-alt1.x86_64
mdadm-4.1-alt1.x86_64
nfs-clients-2.3.3-alt1.x86_64
rsyslog-classic-8.1901.0-alt1.noarch
systemd-utils-246.16-alt1.x86_64
virtualbox-guest-additions-6.1.26-alt1.x86_64
пакет systemd-utils, из системы на sysv неудаляемый совсем:
# rpm -ql systemd-utils | grep bin/
/bin/journalctl
/bin/systemctl
/bin/systemd-escape
/sbin/journalctl
/sbin/systemctl
/sbin/systemd-binfmt
/sbin/systemd-firstboot
/sbin/systemd-machine-id-setup
/sbin/systemd-modules-load
/sbin/systemd-sysctl
/sbin/systemd-tmpfiles
/usr/bin/systemctl
Его удаление из системы на sysv, приведёт к полному уничтожению системы с удалением всех установленных ядер и их модулей.
И ирония в том, что sysv вглухую завязан на systemd-utils:
# grep -r cleanup /etc/ | tail -n 2
/etc/rc.d/scripts/cleanup:# /etc/rc.d/scripts/cleanup - run once at boot time from rc.sysinit
/etc/rc.d/rc.sysinit:action "Cleaning up temporary files from previous boot:" /etc/rc.d/scripts/cleanup
# grep -r systemd-tmpfiles /etc/
/etc/rc.d/init.d/udevd:systemd_tmpfiles=/sbin/systemd-tmpfiles
/etc/rc.d/scripts/cleanup:systemd-tmpfiles --clean
/etc/rc.d/scripts/cleanup:systemd-tmpfiles --remove --create --boot --exclude-prefix=/dev
Но это мы немного отвлеклись.
Главная мысль в том, чтобы оставить чистым console-scripts без компонентов systemd (совершенно бесполезных для sysv!), на чём настаивает в логе Поттеринг.
Но в одном Леннарт прав:
бесполезные и нефункциональные файлы, которые в системе могут представлять из себя потенциальную угрозу, в системе должны быть уничтожены
$ initsysv='/sbin/init'; if [ ! -L "$initsysv" ]; then echo '/sbin/init is not symbolic link'; else echo '/sbin/init is symbolic link'; fi
/sbin/init is not symbolic link
Уничтожить каталог /lib/systemd, если это система на sysv; иначе не трогать
# initsysv='/sbin/init'; if [ ! -L "$initsysv" ]; then rm -rf /lib/systemd; fi
В системах на sysvinit, /sbin/init это ELF.
В системах на systemd, /sbin/init это симлинк.
Ломать Леннарт умеет:
# man tmpfiles.d | grep '/RUN/ AND /VAR/RUN/' -A1
/RUN/ AND /VAR/RUN/
/var/run/ is a deprecated symlink to /run/, and applications should use the latter. systemd-tmpfiles will warn if /var/run/ is used.
Додуматься чтобы вдребезги сломать формат вывода, мог только Леннарт:
# head -n 20 sysv-tty1-bootlog.txt
/lib/tmpfiles.d/openvpn.conf:1: Line references path below legacy directory /va
r/run/, updating /var/run/openvpn ? /run/openvpn; please update the tmpfiles.d/ drop-in file accordingly.
/lib/tmpfiles.d/ppp.conf:1: Line references path below legacy dir
ectory /var/run/, updating /var/run/ppp ? /run/ppp; please update the tmpfiles.d/ drop-in file accordingly.
/lib/tmpfiles.d/ppp.conf:2: Line references path below legacy d
irectory /var/run/, updating /var/run/ppp/resolv.conf ? /run/ppp/resolv.conf; please update the tmpfiles.d/ drop-in file accordingly.
/lib/tmpfiles.d/faillock.conf:1: Line
references path below legacy directory /var/run/, updating /var/run/faillock ? /run/faillock; please update the tmpfiles.d/ drop-in file accordingly.
/lib/tmpfiles.d/open
-vm-tools-vgauthd.conf:1: Line references path below legacy directory /var/run/, updating /var/run/vmware ? /run/vmware; please update the tmpfiles.d/ drop-in file accord
ingly.
/lib/tmpfiles.d/openvpn.conf:1: Line references path below legacy directory /var/run/, updating /var/run/openvpn ? /run/openvpn; please update the tmpfiles.d/ drop-
in file accordingly.
/lib/tmpfiles.d/ppp.conf:1: Line references path below legacy directory /var/run/, updating /var/run/ppp ? /run/ppp; please update the tmpfiles.d/ dro
p-in file accordingly.
/lib/tmpfiles.d/ppp.conf:2: Line references path below legacy directory /var/run/, updating /var/run/ppp/resolv.conf ? /run/ppp/resolv.conf; please
update the tmpfiles.d/ drop-in file accordingly.
[ DONE ]
Activating swap space: [ DONE ]
Updating chrooted environments: [ DONE ]
Вам такой ^^^^^ "формат" вывода мозг не сломает, если вы захотите взглядом навскидку уловить суть?
И только Леннарт мог додуматься до того, чтобы для вывода в tty использовать символ не входящий в 128-мибайтную таблицу символов:
# hexdump -C sysv-tty1-bootlog.txt | head -n 16
00000000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
*
00000050 20 20 20 20 20 20 20 20 20 20 20 2f 6c 69 62 2f | /lib/|
00000060 74 6d 70 66 69 6c 65 73 2e 64 2f 6f 70 65 6e 76 |tmpfiles.d/openv|
00000070 70 6e 2e 63 6f 6e 66 3a 31 3a 20 4c 69 6e 65 20 |pn.conf:1: Line |
00000080 72 65 66 65 72 65 6e 63 65 73 20 70 61 74 68 20 |references path |
00000090 62 65 6c 6f 77 20 6c 65 67 61 63 79 20 64 69 72 |below legacy dir|
000000a0 65 63 74 6f 72 79 20 2f 76 61 0a 72 2f 72 75 6e |ectory /va.r/run|
000000b0 2f 2c 20 75 70 64 61 74 69 6e 67 20 2f 76 61 72 |/, updating /var|
000000c0 2f 72 75 6e 2f 6f 70 65 6e 76 70 6e 20 3f 20 2f |/run/openvpn ? /|
000000d0 72 75 6e 2f 6f 70 65 6e 76 70 6e 3b 20 70 6c 65 |run/openvpn; ple|
000000e0 61 73 65 20 75 70 64 61 74 65 20 74 68 65 20 74 |ase update the t|
000000f0 6d 70 66 69 6c 65 73 2e 64 2f 20 64 72 6f 70 2d |mpfiles.d/ drop-|
00000100 69 6e 20 66 69 6c 65 20 61 63 63 6f 72 64 69 6e |in file accordin|
00000110 67 6c 79 2e 20 20 20 20 20 20 20 20 20 20 20 20 |gly. |
00000120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
Байт по адресу 00ed
(символ 'знак вопроса' выводится если символ не может быть отображён и он не входит в 128 байт ascii table):
# hexdump -C sysv-tty1-bootlog.txt | head -n 16 | grep 00c0
000000c0 2f 72 75 6e 2f 6f 70 65 6e 76 70 6e 20 3f 20 2f |/run/openvpn ? /|
Теперь представили сколько разрушений Леннарт принёс в системы на init? И это не всё. А только верх айсберга. А теперь Леннарт советует в логе ещё и systemd-сервис в console-scripts положить? Дорогу ему подсказали. Но если он пожелает, он может сам написать свой consolesaverd. Не лезть в пакеты для init и оставить в покое хотя бы console-scripts.
Вопрос не в том, что лучше, а что хуже, systemd или init. А в том, что альтернативы не должны мешать друг другу. Оставляя систему в той или иной комплектации, в рамках здравого минимализма. Без излишеств. Тем более без нефункциональных по-определению. Но реальность такова, что сегодня система на sysv сильно замусорена нежизнеспособными компонентами systemd. И Леннарт предлагает логом замусорить её ещё больше.