LINUX.ORG.RU

Sudo внутри программы это нормально использовать?

 ,


0

2

Это все началось с того что в CDE нет диалога выключения компьютера, выключаю через терминал. Однако я нашел xdmshutdown написанный на motif, который собственно и реализует диалог выключения и переагрузки. Но там внутри дергалось только shutdown и reboot, то есть требовало быть запущенным от root. Я дописал внутри кода sudo и теперь он просто по нажатию кнопки перезагружает и выключает. Вопрос собственно такой, это безопасно так делать или нужно через диалог какой-то дергать(графический в смысле), чтобы программа запрашивала повышение прав?

в онтопике для таких вещей обычно либо применяют polkit, либо ставят suid бит на экзешник, либо запиливают специальный демон с нужными правами и шлют ему команды по IPC.

Дёргать sudo изнутри точно плохая идея. У меня он например давно отовсюду выпилен, пользуюсь doas.

Lrrr ★★★★★
()
Ответ на: комментарий от zloy_starper

Делись софтиной

https://github.com/CubicalMarks/xdmshutdown - оригинальная софтина. Правленную пока на github не выложил, может попозже.

надо пароль вводить

У меня просто настроено sudo без пароля для перезагрузки и выключения. Так-то надо вообще.

vbcnthfkmnth123 ★★★★★
() автор топика
Последнее исправление: vbcnthfkmnth123 (всего исправлений: 1)
Ответ на: комментарий от vbcnthfkmnth123

Только, когда будешь править, сделай PR автору в оригинальный репозиторий.

Ещё там достаточно просто иожно прикрутить CI через GitHub Actions и сборку на CMake.

В Makefile сразу вижу, что порядок библиотек при сборке неверен. Должно быть -lXm -lXt -lX11, иначе велика вероятность проблем.

Bass ★★★★★
()
Последнее исправление: Bass (всего исправлений: 1)
Ответ на: комментарий от vbcnthfkmnth123

Нет. По умолчанию недоступно.

Офигенно. Включаешь комп, а выключить не можешь. Зовёшь администратора или выдёргиваешь из розетки. Великолепный план, если я правильно понял.

thegoldone ★★
()

Это все началось с того что в CDE нет диалога выключения компьютера, выключаю через терминал.

Немножко оффтопа.
На корпусе устройства есть кнопка питания?
Если есть, то что мешает поставить, например, acpid, который позволит выключать устройство по нажатию кнопки питания?

u5er ★★
()
Ответ на: комментарий от vbcnthfkmnth123

Разрабы даже добавили переименование окна из новых фич.

Линуксовые DE нервно напряглись! 🙃 Наверняка ещё и поддержку UTF-8 немного улучшили, меньше кракозябров теперь.

anonymous
()
Ответ на: комментарий от thegoldone

Включаешь комп, а выключить не можешь

Ну Linux это же серверная ОС, неудивительно что тут по умолчанию это недоступно. А именно в дистрибутиве который я использую(CRUX) это настроено уже по умолчанию(sudo для выключения без пароля).

Ну а вообще это логично. неудобно будет если любой пользователь может сервак у тебя выключить или перезагрузить.

vbcnthfkmnth123 ★★★★★
() автор топика
Последнее исправление: vbcnthfkmnth123 (всего исправлений: 1)
Ответ на: комментарий от vbcnthfkmnth123

Кнопка питания не может отмонтировать диски и сделать все остальное.

С каких это пор? В любом нормальном дистрибутиве реакция по умолчанию на эту кнопку эквивалентна команде poweroff, systemd там за ней прячется, или что другое.

anonymous
()
Ответ на: комментарий от vbcnthfkmnth123

Ну а вообще это логично.

Может Линукс и бывает на серверах, к настольным системам это отношения не имеет. И речь идёт о неверной настройке, всего лишь. Система неверно настроена. Неправильно выданы права. Гостевой сеанс пользователя как должен выглядеть в этом случае? Или гостя нужно добавлять в группу sudo (wheel)? Иначе он сможет включить систему и войти в свою учётную запись. Но не сможет выключить. Речь идёт всего лишь о неверной настройке системы. Ничего более.

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

thegoldone ★★
()

По хорошему, делаешь проверку можно ли вызвать shutdown/reboot без повышения привилегий, если же нет, то стартуешь pkexec с нужной командой.

Dr64h ★★★
()

В нормальных ос и дистрибутивах есть специальные группы (во FreeBSD это группа operator), при вступлении в которые не требуется повышать права для выключения.

Ygor ★★★★★
()
Ответ на: комментарий от MagicMirror

Ты специально клоунствуешь или в самом деле не в курсе, что кнопка на системном блоке делает нормальное завершение работы, то же что и shutdown -h now? По крайней мере если ты не запорол настройки дистра из коробки или не установил какую-нить чушь.

У кнопки по сравнению с другими способами однозначное преимущество: нажимая её, ты сразу же подтверждаешь наличие физического доступа к компу и бесполезность попыток запретить тебе его выключить. Возня же с разными способами выдачи прав на shutdown не-админам почти всегда приводит к сомнительным результатам, когда например рандомная прога, запущеная без особых прав, тоже может тебе шатдаун сделать.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от zloy_starper

Я ориентировался на описание программы. Собственно я и нашел эту программу по слову motif в поиске.

Shutdown button for XDM. Uses motif/lesstif.

Но можно и переписать. Где-то я видел тутор как использовать UTF-8 для motif.

vbcnthfkmnth123 ★★★★★
() автор топика
Последнее исправление: vbcnthfkmnth123 (всего исправлений: 2)
Ответ на: комментарий от MagicMirror

В том что линкер, начиная с некоторых версий, проигнорирует те функции из подключаемой библиотеки, которые не были запрошены уже обработанным кодом (тем что сделав от -l). То есть если libXm использует какую-то функцию из libX11, но её не использует твой собственный код, линкер эту функцию сначала выкинет (во время обработки -lX11), а потом, когда дойдёт до -lXm, обнаружит unresolved symbol, и задним числом в libX11 её искать уже не будет. Старые версии линкера таким не страдали или почти не страдали.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Ты специально клоунствуешь

Аналогичный вопрос

что кнопка на системном блоке делает нормальное завершение работы

Она только сигнал подаёт, который можно (и нужно) проигнорировать, во избежание потери данных.

По крайней мере если ты не запорол настройки дистра из коробки или не установил какую-нить чушь.

Всё, что работает не так как в фантазиях об идеальном мире - запорото или чушь. Окей.

MagicMirror ★★
()
Ответ на: комментарий от MagicMirror

Она только сигнал подаёт, который можно (и нужно) проигнорировать, во избежание потери данных.

С чего бы это? Типа случайно если нажмёшь? У меня не нажимались никогда случайно, и я их никогда не отключал. Как на десктопах, так и на серверах, причём на серверах (речь про железки) это особенно удобно - их можно выключать кнопкой не подсоединяясь к ним ни по ssh ни консолью (то есть быстрее), и вообще не имея полноценных доступов (например если с железками проводятся технические работы людьми, не являющимися их администраторами).

Всё, что работает не так как в фантазиях об идеальном мире - запорото или чушь. Окей.

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

firkax ★★★★★
()
Ответ на: комментарий от firkax

Типа случайно если нажмёшь?

Ну да. Для меня это было например проблемой, пока корпус не поменял на тот что с дверцей, которая закрывает кнопку включения.

vbcnthfkmnth123 ★★★★★
() автор топика
Ответ на: комментарий от firkax

Типа случайно если нажмёшь?

Животные, дети, предмет на корпусе, сам в конце концов. «Со мной такого никогда не было» - слабая позиция. Со мной было не единожды, но я ничего не потерял потому что нормальное ДЕ переспрашивает, «действительно выключить?». Используя те самые «дырявые права».

так и на серверах, … это особенно удобно - их можно выключать … вообще не имея полноценных доступов …

Даже не знаю что сказать.

MagicMirror ★★
()
Ответ на: комментарий от MagicMirror

Как животные могут её нажать я не представляю (хотя корпуса конечно разные бывают), а дети могут и вилку из розетки тогда вытащить - надо воспитывать чтоб не лезли куда не положено. К тому же если ты кнопку электрически не отсоединил - её можно подержать чуть подольше и он всё равно выключится, но уже аварийным способом. А ещё можно переключатель на БП сзади так же нажать с теми же последствиями - значит надо искать БП без выключателя и с припаянным 220В проводом?

нормальное ДЕ переспрашивает, «действительно выключить?». Используя те самые «дырявые права».

Это можно и без выдачи прав организовать. Обработчик кнопки, запущеный от рута, вполне может слать какие угодно сигналы найденным активным сессиям и ждать от них ответ перед тем как начинать выключение. И это тоже вариант лучше чем всякие sudo.

Даже не знаю что сказать.

Что не так? Повторю - если кто-то нажимает кнопку то он может с тем же успехом дёрнуть питание, так что запрещать выключение через неё бесполезно с точки зрения безопасности. А с точки зрения удобства очень полезно когда такое выключение разрешено. Вместо того чтоб сидеть перед ssh и ждать когда надо выключить можно просто сказать «нажмите кнопку когда начнёте и дождитесь пока все индикаторы погаснут».

firkax ★★★★★
()
Ответ на: комментарий от MagicMirror

Можно просто вилку из розетки дёргать, зачем все эти сложности?

Кстати да, я одно время свой сервер именно так и выключал, было довольно удобно

Вырубаешь пилот, ЮПС начинает верещать и apcupsd шатдаунит сервер 😀

alx777 ★★
()
Ответ на: комментарий от firkax

Как животные могут её нажать я не представляю (хотя корпуса конечно разные бывают)

На вскидку у каждого второго она сверху.

а дети могут и вилку из розетки тогда вытащить - надо воспитывать чтоб не лезли куда не положено. К тому же если ты кнопку электрически не отсоединил - её можно подержать чуть подольше и он всё равно выключится, но уже аварийным способом. А ещё можно переключатель на БП сзади так же нажать с теми же последствиями - значит надо искать БП без выключателя и с припаянным 220В проводом?

А еще могут террористы напасть и метеорит упасть, забыл? Неужели так сложно просто спросить подтверждение перед тем как уничтожать все данные в памяти?

Это можно и без выдачи прав организовать. Обработчик кнопки, запущеный от рута, вполне может слать какие угодно сигналы найденным активным сессиям и ждать от них ответ перед тем как начинать выключение.

SystemD так умеет. Но на десктопе проще юзеру это всё отдать.

И это тоже вариант лучше чем всякие sudo.

Всё лучше, чем встраивать судо ради заранее известного ограниченного набора действий.

Что не так? Повторю - если кто-то нажимает кнопку то он может с тем же успехом дёрнуть питание, так что запрещать выключение через неё бесполезно с точки зрения безопасности.

Ты понимаешь смысл слова «случайно»? Давай перила на мостах уберём, их ведь перелезть можно.

А с точки зрения удобства очень полезно когда такое выключение разрешено. Вместо того чтоб сидеть перед ssh и ждать когда надо выключить можно просто сказать «нажмите кнопку когда начнёте и дождитесь пока все индикаторы погаснут».

- Ну когда вы там?
- А мы уже всё сделали
- *молча смотришь на оставшуюся нетронутой сессию ssh*

Ну-ну.

MagicMirror ★★
()