суббота, 15 ноября 2014 г.

Systemd: правим разрешения в policykit и радуемся.

Интересно остались ли дистрибутивы без systemd?

Чем мне всегда нравился debian, тем что запуская apt-get dist-upgrade совершенно не волнуешься сломается что-то или отвалится. Работает себе и работает.

Но всё хорошое однажды проходит, и чем больше тут всяких systemd, тем больше любое обновление смахивает на лотерею.

Если вам нравится проверять свою везучесть - годный инструмент.

Мне пока фортит не очень.

После очередного обновления отпал suspend системы, который у меня много где используется, и в скриптах, и в кроне и т.д.

Ну ок, полез разбираться.

Запускаем бодро работающий ещё вчера systemdctl suspend, и видим:
==== AUTHENTICATING FOR org.freedesktop.login1.suspend ===
Чтобы перевести систему в ждущий режим, необходимо пройти аутентификацию.
Authenticating as: root
Password:

Что это? Откуда?Кто такой org.freedesktop.login1 ?

Что приятно в свежих поделках, это то что вы можете выкинуть все свои прошлые знания на помойку.
Знаете как настраивать sudoers? Понимаете как работает pam? Умете назначать capabilities? А зачем? Забудьте.

Те пионеры что строгают сейчас хипстерские системы этого не знают, им не надо, им некогда, им надо код фигачить.

Они быстрее свою, новую реализацию напишут и на вас будут отлаживать пока каникулы не кончатся.

В этот раз они придумали свою систему разрешений, дополнительно ко всем прочим.

Открываем /usr/share/polkit-1/actions/org.freedesktop.login1.policy

И ищем там такое вот:

        <action id="org.freedesktop.login1.suspend">
                <description>Suspend the system</description>
                <description xml:lang="de">Das System in Bereitschaft versetzen</description>
                <description xml:lang="el">Αναστολή του συστήματος</description>
                <description xml:lang="fr">Mettre le système en veille</description>
                <description xml:lang="it">Sospendere il sistema</description>
                <description xml:lang="pl">Uśpienie systemu</description>
                <description xml:lang="ru">Перевести систему в ждущий режим</description>
                <message>Authentication is required for suspending the system.</message>
                <message xml:lang="de">Legitimierung ist zum Versetzen des Systems in Bereitschaft notwendig.</message>
                <message xml:lang="el">Απαιτείται πιστοποίηση για την αναστολή του συστήματος.</message>
                <message xml:lang="fr">Authentification requise pour mettre le système en veille.</message>
                <message xml:lang="it">Autenticazione richiesta per sospendere il sistema.</message>
                <message xml:lang="pl">Wymagane jest uwierzytelnienie, aby uśpić system.</message>
                <message xml:lang="ru">Чтобы перевести систему в ждущий режим, необходимо пройти аутентификацию.</message>
                <defaults>
                        <allow_any>auth_admin_keep</allow_any>
                        <allow_inactive>auth_admin_keep</allow_inactive>
                        <allow_active>yes</allow_active>
                </defaults>
        </action>

Что то из раздела  auth_admin_keep нам мешает. Меняем на yes и оно начинает работать.

А теперь давайте подумаем про сорт травы у авторов этого решения.

1. Этот вот xml на 500 строк, это и есть человеко-понятные конфиги принятые в мире никсов?

2. Этот вот путь /usr/share точно подходит что б такое хранить?
Т.е. мало админу было следить за /etc, тут еще и файлы из /usr/share стали регулировать поведение системы?

3. Правильно я понимаю что следующий же апдейт системы перезатрет моё решение?
Не уверен что dpkg будет следить и мержить конфиги за пределами etc

4. Вот эта вот новая абстракция она чего добавляет то? Чего у нас такого не было в предыдущей сотне решений распределения прав что пришлось добавить ещё?

Неужто уже и debian мейнтейнеры уходят на покой, раз такое нам сюда втыкают раз за разом.

И куда валить теперь?