amarao: (Default)
[personal profile] amarao
Dec 14 12:00:59 ubuntu dhclient[674]: Sending on Socket/fallback
Dec 14 12:00:59 ubuntu dhclient[674]: DHCPDISCOVER on ens3 to 255.255.255.255 port 67 interval 3 (xid=0x2ad36074)
Dec 14 12:00:59 ubuntu dhclient[674]: DHCPOFFER of 10.33.178.10 from 10.33.178.2
Dec 14 12:00:59 ubuntu dhclient[674]: DHCPREQUEST for 10.33.178.10 on ens3 to 255.255.255.255 port 67 (xid=0x7460d32a)
Dec 14 12:00:59 ubuntu dhclient[674]: DHCPACK of 10.33.178.10 from 10.33.178.2 (xid=0x2ad36074)
Dec 14 12:00:59 ubuntu audit[679]: AVC apparmor="DENIED" operation="exec" profile="/{,usr/}sbin/dhclient" name="/usr/bin/true" pid=679 comm="isc-worker0000" requested_mask="x" denied_mask="x" fsuid=0 ouid=0


Да-да. Была вот такая строчка:

md5sum "$mystatedir/isc-dhcp-v4-$interface" "$mystatedir/isc-dhcp-v6-$interface" "$mystatedir/ifupdown-inet-$interface" "$mystatedir/ifupdown-inet6-$interface" > "$oldstate" 2> /dev/null || true

В которой автор кода сказал "да, пожалуйста, игнорируйте любые ошибки в этом месте", но пришёл apparmor и сказал "нельзя, нельзя". И случилось чудное.

Программисты шутят про #define TRUE FALSE, а сисамдины отлаживают.

Date: 2023-12-14 05:02 pm (UTC)
yurikhan: (Default)
From: [personal profile] yurikhan

А вот если бы в башу написать || :, то злобный apparmor бы ничего не заметил.

Date: 2023-12-14 07:42 pm (UTC)
From: [personal profile] ex0_planet
К сожалению, the damage is already done. Такие переживания оставляют глубокие шрамы на коре головного мозга. Поражённые мучаются бессонницей, их преследуют навязчивые видения стай дятлов, обрушивающих цивилизацию, и другая подобная хтонь. На поздних стадиях ими овладевает стремление искать в своём окружении так называемых "программистов" и бить их линейкой по пальцам, чтобы (как комментируют сами поражённые) "подобное впредь не повторялось".
Помочь им нельзя.

Date: 2023-12-16 04:44 pm (UTC)
yurikhan: (Default)
From: [personal profile] yurikhan

Автор полиси неправ. Иметь исполняемый и работающий true — конституционное право каждого шелл-скрипта, гарантируемое спецификацией POSIX.

Date: 2023-12-18 05:45 am (UTC)
yurikhan: (Default)
From: [personal profile] yurikhan

В спеке на семейство функций execl, execle, execlp, execv, execve, execvp, fexecve перечислены условия, при которых вызов обязан вернуть код ошибки EACCES, но формулировка такова, что этот список не исчерпывающий (“shall fail if”, не “if and only if”). Поэтому ты можешь иметь файл, иметь право execute на его родительский каталог и всех предков, но exec* всё равно имеет право вернуть EACCES.

А вот в спеке на true никаких условий не прописано. Обязано быть, обязано вернуть нулевой код возврата, обязано никак не трогать стандартный ввод-вывод.

Date: 2023-12-20 12:40 pm (UTC)
yurikhan: (Default)
From: [personal profile] yurikhan

Так а я и говорю, что виноват автор полиси, которая сломала возможность запускать essential утилиту POSIX- окружения.

Ломать exec* чего попало в целях повышения безопасности — можно. Ломать exec* для конкретно /bin/true — нельзя.

Date: 2023-12-19 07:11 pm (UTC)
From: [personal profile] ex0_planet
ХЕЗ, если честно.
Если ставить вопрос в конструктивном ключе (кто будет исправлять код), то из прагматичных же соображений это будет "интегратор", т.е. тот кто пытается все эти четыре компонента собрать воедино. Если смотреть чуть глубже, то "по справедливости" это должен быть автор полиси, т.к. он нарушает сложившийся до него консенсус.
Рекурсивно углубляясь далее, мы неизбежно придём к вопросу "как дизайнить системы так, чтобы минимизировать подобные эксцессы" и на этот вопрос по-моему ни у кого нет хорошего ответа.

Date: 2023-12-20 12:58 pm (UTC)
yurikhan: (Default)
From: [personal profile] yurikhan

Именно в баше (и dash’е) и именно для true предусмотрено:

$ type true false sed
true is a shell builtin 
false is a shell builtin
sed is /usr/bin/sed
$ PATH=/nonexistent /bin/bash -c 'true'; echo $?
0
$ PATH=/nonexistent /bin/bash -c 'sed'; echo $?
/bin/bash: line 1: sed: command not found
127

хотя, скорее всего, по производительностным соображениям, а не отказоустойчивостным. (А шелл-скрипт из корневого поста работает не в баше, а в каком-то другом shell’е.)

Также в принципе можно представить себе дистрибутив, который при загрузке создаёт RAM-диск и всё essential окружение живёт на нём, и в разумных пределах пофиг, что там отвалится или форс-размонтируется в процессе работы. Кажется, некоторые инсталляторы GNU/Linux’а так делают.


Доводилось мне видеть последствия отвала диска, на котором размещён своп. Байтораздирающее. Всё просто встаёт колом.

Profile

amarao: (Default)
amarao

February 2026

S M T W T F S
123456 7
8910111213 14
15161718192021
22232425262728

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 25th, 2026 11:53 am
Powered by Dreamwidth Studios