Да, так он и работает. Но, имхо, его стоит упоминать отдельно, потому что одно дело тупо процесс, висящий на шине и принимающий запросы от кого попало, и совсем другое — это когда есть механизм авторизации.
2) процесс с привилегиями ждет сигнала, например, по dbus. В современных дистрибутивах эту роль выполняет PolicyKit. Он же берет на себя все вопросы по разграничению прав.
Да, так он и работает. Но, имхо, его стоит упоминать отдельно, потому что одно дело тупо процесс, висящий на шине и принимающий запросы от кого попало, и совсем другое — это когда есть механизм авторизации.
Он откажет выполнении запроса если работает больше одного пользователя. И потребует повысить привилегии.
reboot, что является алиасом к systemctl reboot, что в свою очередь пинает logind по шине, который в свою очередь спрашивает разрешения у polkit, проверяет ингибиторы, пинает сессии и в конечном итоге запускает reboot.target.
И этот человек, который не может написать NOPASSWD в /etc/sudoers, считает себя более компетентным в устройстве линуксового юзерспейса, чем туча программистов, админов и дистростроителей, работающих над systemd и связанными вещами. Кек.
Я прекрасно знаю, как это работает. Но проверкой на количество сессий занимается не polkit. Количество активных сессий проверяет logind (или что там у вас вместо него) и в зависимости от него запрашивает у polkit разрешение на одно из двух формально разных действий (org.freedesktop.login1.reboot или org.freedesktop.login1.reboot-multiple-sessions).
В определениях этих действий, в свою очередь, сказано, что одно из них может делать любой залогиненный пользователь, а второе — только администратор.
Хорошо, немного ошибся. Человек, который не может прочитать ман по башу и осознать, что .bashrc обрабатывается только интерактивными оболочками.
«Почему же IceWM'у на это наплевать, хм?» Да потому что в лучшем случае он запускает твою команду через system(), т. е. в неинтерактивной оболочке, а в худшем — вообще через fork()+exec(), т. е. не через шелл вообще.
Да шо ты говоришь! Там тупо неактивны кнопки poweroff и reboot. Т.е. возможно, где-то в настройках IceWM это нужно активировать. А возможно — и где-то еще.
Но мне это не очень-то и нужно. Все равно у меня обычно почти на каждом из шести рабочих столах открыт terminal в полноэкранном режиме (только на четвертом рабочем столе нет терминала: там браузер и thunderbird).
Раньше у меня было 4 раб. стола (дома, кстати, на компе так и осталось). Но с тех пор, как у меня появилось по 4-5 одновременно тянущихся "долгих ящиков", я количество столов увеличил. И на каждом рабочем столе открыт один из этих "долгих ящиков".
По идее есть ещё третий вариант: дать пользователю или процессу привилегию (capability) необходимую для того что-бы ядро приняло от него сигнал на перезагрузку. Просмотрел тему, кажется про это тут ещё никто не писал.
Если я правильно помню, то capabilities очень похожи на setuid, с той лишь разницей что setuid разрешит все привилегированные действия а capabilitiy только действительно необходимые. ИМХО, это тоже частный случай первого способа.
Решил не заострять на нем внимания, так как, на сколько мне известно, они до сих пор не используются ни одним из популярных дистрибутивов.